支持向量机不好的结果-Python

Support Vector Machine bad results-Python

我正在研究 SVM 并实现了这段代码,它太基础、原始并且花费了太多时间,但我只是想看看它实际上如何 works.Unfortunately,它让我很糟糕 results.What我错过了吗?一些编码错误或数学错误?如果你想查看数据集,这里是 link。我从 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'

根据您的数据,SVM 的简单实现通常会给您带来不好的结果。您必须在 SVM 实现上尝试高级版本(例如 Sickit SVM) you can also check this: https://github.com/scikit-learn/scikit-learn/tree/master/sklearn/svm

SVM 有不同类型的实现和参数,如不同的内核(例如 rbf)。您必须检查它们并尝试使用不同的参数(取决于您的数据)并将结果相互比较。

您可以使用网格搜索方法进行比较(检查:http://scikit-learn.org/stable/modules/grid_search.html