ml-py svm сходится, но неправильно классифицирует

Я пытаюсь выполнить некоторую задачу классификации с помощью python и SVM.

Из собранных данных я извлек векторы признаков для каждого класса и создал обучающую выборку. Векторы признаков имеют n-мерность (39 и более). Итак, скажем, для 2 классов у меня есть набор из 39 векторов признаков и один массив меток классов, соответствующих каждой записи в векторе признаков. В настоящее время я использую mlpy и делаю что-то вроде этого:

import numpy as np
import mlpy 

svm=mlpy.Svm('gaussian') #tried a linear kernel too but not having the convergence
instance= np.vstack((featurevector1,featurevector1))
label=np.hstack((np.ones((1,len(featurevector1),dtype=int),-1*np.ones((1,len(featurevector2),dtype=int))) 

#Назначение метки (+1/-1) для каждой записи экземпляра (+1 для записей из #featurevector 1 и -1 для featurevector2

svm.compute(instance,label) #it converges and outputs 1
svm.predict(testdata) #This one says all class label are 1 only whereas I ve testing data from both classes

Я делаю какую-то ошибку здесь? Или я должен использовать какую-то другую библиотеку? Пожалуйста помоги.


person Nihar Sarangi    schedule 27.11.2011    source источник
comment
mlpy - отличный инструмент. если у вас есть время, посмотрите лекции по SVM на ml-class.org . Сначала вы можете нормализовать свои функции, затем вы должны найти метрики точности и отзыва для измерения дисперсии/смещения, что поможет принять следующие решения, например, изменить параметр C или сигму. Или соберите больше данных, или очистите существующие данные.   -  person timgluz    schedule 27.11.2011
comment
Спасибо @timgluz. Я слежу за ml-class.org. Для этой конкретной проблемы я хочу использовать классификатор, который может работать как черный ящик и предсказывать метку класса тестовых данных после того, как я обучу его на обучающих данных. Мой набор входных данных представляет собой набор музыкальных сигналов, преобразованных в 39-мерные функции, и нет возможности собрать их больше.   -  person Nihar Sarangi    schedule 27.11.2011


Ответы (1)


Я не использую mlpy, но np.ones((1,len(featurevector1)), возможно, должно быть просто np.ones(len(featurevector1)) --
напечатайте .shape каждого из них, чтобы увидеть разницу.
(Если у вас есть ссылка на общедоступные данные, подобные вашим, не могли бы вы опубликовать ее, пожалуйста? )

person denis    schedule 01.12.2011
comment
понял, вектор-строка — это все, что мне было нужно. Я изменил то же самое и попытался, но это не сработало. Попробовал libsvm на python, и на удивление он сработал с вышеуказанной проблемой и дал мне правильные результаты. - person Nihar Sarangi; 02.12.2011