使用多项式核的sklearn和SVM
我正在使用Python的sklearn库来进行支持向量机(SVM)的交叉验证。我尝试了线性核和RBF核,效果都很好。但是,当我用多项式核时,它一直没有结束。现在已经运行了8个小时,还是没有结果。输入数据X的维度是(1422, 2),也就是说有1422个样本,每个样本有2个特征。
def SupportVectorMachines(X,y):
clf = svm.SVC(C=1.0, kernel='poly', degree=3, gamma=2)
classifier = clf.fit(X,y)
score = cross_validation.cross_val_score(classifier, X,y, cv=10, n_jobs=1).mean()
return score
有没有人知道这是为什么呢?
谢谢!
2 个回答
1
试着把这个设置成 (max_iter = 1e5
).
可以这样写:
clf = svm.SVC(C=1.0, kernel='poly', degree=3, gamma=2,max_iter = 1e5)
它会出现以下错误,但会结束运行:
/usr/local/lib/python3.6/dist-packages/sklearn/svm/_base.py:231: ConvergenceWarning: Solver terminated early (max_iter=100000). Consider pre-processing your data with StandardScaler or MinMaxScaler. % self.max_iter, ConvergenceWarning)
2
试着把C的值调小一点(可以试试C=0.001、0.01、0.1)。C是一个惩罚参数,C的值越大,模型就越想减少惩罚,这样训练起来就会花更多的时间。
或者,可以试着减少交叉验证的折数。因为你的数据集只有1422个点,可以试试用cv=5。这样运行的时间会更短。