Объяснение: Когда вы запускаете функцию classify
без указания типа дискриминантной функции (как вы это сделали), Matlab использует Линейный дискриминантный анализ (LDA).Не вдаваясь в подробности LDA, алгоритмы должны вычислить ковариационную матрицу X_testing
, чтобы решить задачу оптимизации, и эта матрица должна быть положительно определенной (см. Википедия: Положительно-определенная матрица ).Основное предположение состоит в том, что ваши данные представлены многомерным распределением вероятностей, которое всегда имеет положительно определенную ковариационную матрицу, если только одна или несколько переменных не являются точными линейными комбинациями других.
Для решения вашей проблемы: Возможно, что одна из ваших переменных является линейной комбинацией других.Вы можете попытаться выбрать разумное подмножество ваших переменных или выполнить анализ основных компонентов (PCA) на данных обучения, а затем классифицировать, используя первые несколько основных компонентов.Или вы можете указать тип дискриминантной функции и выбрать один из двух наивных байесовских классификаторов, например:
Y_testing_obtained = classify(X_testing, X_training, Y_training, 'diaglinear');
В качестве примечания, вам также необходимо иметь больше наблюдений (строк), чем переменных (столбцы), но в вашем случае это не проблема, так как у вас, похоже, 1550 наблюдений и 5 переменных.
Наконец, вы также можете взглянуть на ответы, опубликованные на аналогичный вопрос на Форум Matlab .