在python中更改SVM的C参数

时间:2013-11-03 07:04:03

标签: python machine-learning scikit-learn

我正在尝试优化我的SVM,使用交叉验证来估算我的表现。

似乎改变C参数什么都不做 - 怎么回事?

from sklearn import cross_validation
from sklearn import svm
for C in [0.1, 0.5, 1.0, 2.0, 4.0]:
    clf = svm.SVC(kernel='linear', C=C)
    scores = cross_validation.cross_val_score(clf, X, y, cv=6, n_jobs = -1)
    print C, scores

结果是

> 0.1 [ 0.88188976  0.85826772  0.90118577  0.90909091  0.8972332   0.86561265]
> 0.5 [ 0.88188976  0.85826772  0.90118577  0.90909091  0.8972332   0.86561265]
> 1.0 [ 0.88188976  0.85826772  0.90118577  0.90909091  0.8972332   0.86561265]
> 2.0 [ 0.88188976  0.85826772  0.90118577  0.90909091  0.8972332   0.86561265]
> 4.0 [ 0.88188976  0.85826772  0.90118577  0.90909091  0.8972332   0.86561265]

1 个答案:

答案 0 :(得分:3)

这些似乎可以通过C值的微小变化来查看任何差异。试试一套

C = [ 10**x for x in xrange(10) ]

为了检查一切是否正常,您应该打印模型,而不仅仅是结果。您的SVC对象包含有关支持向量的信息 - 只需打印它们即可查看C中的更改确实会影响算法训练SVM的方式。

对于线性内核,您可以打印:

print clf.coef_
print clf.intercept_

表示非线性内核:

print clf.dual_coef_
print clf.support_vectors_
print clf.intercept_