我正在研究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'
答案 0 :(得分:0)
根据您的数据,通常简单实施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)