2015-10-23 3 views
-1

Я пытаюсь подготовить линейный SVM к данным, имеющим 100 измерений. У меня 80 тренировок. Я тренирую SVM с помощью функции fitcsvm в MATLAB и проверяю функцию с использованием predict данных обучения. Когда я классифицирую данные обучения с помощью SVM, все точки данных классифицируются только в один класс.Функция предсказания Matlab не работает

SVM = fitcsvm(votes,b,'ClassNames',unique(b)'); 
predict(SVM,votes); 

Это дает выходы как все 0, что соответствует 0-му классу. b содержит 1 и 0, указывающие класс, к которому принадлежит каждая точка данных. Данные, используемый, т.е. матрицы votes и векторное b приведен следующие link

+0

Конечно, вы не можете обучить SVM с использованием 100 классов только с 80 тренировочных очков. – Adriaan

+0

@Adriaan Thanx мелочи просто избегают внимания – Aditya

+0

@Adriaan выглядит как b, содержит только два класса, 80 - размер набора для обучения, а 100 - тусклый. – gregswiss

ответ

2

Убедитесь, что вы используете нелинейное ядро, такие как гауссово ядро ​​и что параметры ядра будут переделаны. Просто в качестве отправной точки:

SVM = fitcsvm(votes,b,'KernelFunction','RBF', 'KernelScale','auto'); 
bp = predict(SVM,votes); 

что сказал, что вы должны разделить ваш набор в обучающем наборе, и набор испытаний, в противном случае вы рискуете переобучения

+1

+1, исправление [моя проблема] (http://stackoverflow.com/вопросы/39267100/SVM-прогнозный делает-не предсказуемое-ок-хотя-заместитель поддержки векторы-являются-действительным). – dariush

 Смежные вопросы

  • Нет связанных вопросов^_^