Matlab - ошибка с линейным дискриминантным анализом - PullRequest
0 голосов
/ 08 мая 2011

Я запускаю

Y_testing_obtained = classify(X_testing, X_training, Y_training);

и получаю ошибку

Error using ==> classify at 246
The pooled covariance matrix of TRAINING must be positive definite.

X_training - матрица 1550 x 5.Подскажите, пожалуйста, что означает эта ошибка, то есть, почему она появляется и как ее обойти?Спасибо

Ответы [ 2 ]

5 голосов
/ 17 апреля 2013

Объяснение: Когда вы запускаете функцию classify без указания типа дискриминантной функции (как вы это сделали), Matlab использует Линейный дискриминантный анализ (LDA).Не вдаваясь в подробности LDA, алгоритмы должны вычислить ковариационную матрицу X_testing, чтобы решить задачу оптимизации, и эта матрица должна быть положительно определенной (см. Википедия: Положительно-определенная матрица ).Основное предположение состоит в том, что ваши данные представлены многомерным распределением вероятностей, которое всегда имеет положительно определенную ковариационную матрицу, если только одна или несколько переменных не являются точными линейными комбинациями других.

Для решения вашей проблемы: Возможно, что одна из ваших переменных является линейной комбинацией других.Вы можете попытаться выбрать разумное подмножество ваших переменных или выполнить анализ основных компонентов (PCA) на данных обучения, а затем классифицировать, используя первые несколько основных компонентов.Или вы можете указать тип дискриминантной функции и выбрать один из двух наивных байесовских классификаторов, например:

Y_testing_obtained = classify(X_testing, X_training, Y_training, 'diaglinear');

В качестве примечания, вам также необходимо иметь больше наблюдений (строк), чем переменных (столбцы), но в вашем случае это не проблема, так как у вас, похоже, 1550 наблюдений и 5 переменных.

Наконец, вы также можете взглянуть на ответы, опубликованные на аналогичный вопрос на Форум Matlab .

0 голосов
/ 13 июня 2014

Попробуйте упорядочить данные, используя функцию cvshrink в Matlab

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...