Я изучаю SVM и реализовал этот код, он слишком простой, примитивный и занимает слишком много времени, но я просто хотел посмотреть, как он работает на самом деле. К сожалению, это дает мне плохие результаты. Что я упустил? Некоторая ошибка кодирования или математические ошибки? Если вы хотите посмотреть набор данных, это ссылка здесь. Я взял его из UCI Machine Learning Repository. Спасибо за вашу сделку.Поддержка векторной машины плохие результаты-Python
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'
Может быть, вы должны объяснить немного, что делает код. Поскольку я не вижу никакого вызова библиотеки, я предполагаю, что вы внедрили некоторый svm-алгоритм самостоятельно? Где? Второй цикл? Что это должно быть? SGD? Координатно-спуск? – sascha