Поддержка Vector Machine плохие результаты-Python
Я изучаю SVM и реализовал этот код, он слишком простой, примитивный и занимает слишком много времени, но я просто хотел посмотреть, как он на самом деле работает. К сожалению, он дает мне плохие результаты. Что я пропустил? Некоторая ошибка кодирования или математические ошибки? Если вы хотите посмотреть на набор данных, это ссылка здесь. Я взял это из хранилища машинного обучения UCI. Спасибо за вашу сделку.
def hypo(x,q):
return 1/(1+np.exp(-x.dot(q)))
data=np.loadtxt('LSVTVoice',delimiter='\t');
x=np.ones(data.shape)
x[:,1:]=data[:,0:data.shape[1]-1]
y=data[:,data.shape[1]-1]
q=np.zeros(data.shape[1])
C=0.002
##mean normalization
for i in range(q.size-1):
x[:,i+1]=(x[:,i+1]-x[:,i+1].mean())/(x[:,i+1].max()-x[:,i+1].min());
for i in range(2000):
h=x.dot(q)
for j in range(q.size):
q[j]=q[j]-(C*np.sum( -y*np.log(hypo(x,q))-(1-y)*np.log(1-hypo(x,q))) ) + (0.5*np.sum(q**2))
for i in range(y.size):
if h[i]>=0:
print y[i],'1'
else:
print y[i],'0'
1 ответ
В зависимости от ваших данных, простая реализация SVM дает вам плохой результат. Вы должны попробовать расширенную версию реализации SVM (например, Sickit SVM), вы также можете проверить это: https://github.com/scikit-learn/scikit-learn/tree/master/sklearn/svm
SVM имеет типы реализации и параметры, такие как разные ядра (например, rbf). Вы должны проверить их и попробовать их с другим параметром (в зависимости от ваших данных) и сравнить результаты друг с другом.
Вы можете использовать подход поиска по сетке для сравнения (проверьте это: http://scikit-learn.org/stable/modules/grid_search.html)