我像这样使用scikit-learn的SVM:
clf = svm.SVC() clf.fit(td_X, td_y)
我的问题是,当我使用分类器预测训练集成员的班级时,即使在scikit- learns实现中,分类器也可能是错误的。(例如clf.predict(td_X[a])==td_Y[a])
clf.predict(td_X[a])==td_Y[a]
是的,可以运行以下代码,例如:
from sklearn import svm import numpy as np clf = svm.SVC() np.random.seed(seed=42) x=np.random.normal(loc=0.0, scale=1.0, size=[100,2]) y=np.random.randint(2,size=100) clf.fit(x,y) print(clf.score(x,y))
分数是0.61,因此将近40%的训练数据被错误分类。部分原因是,即使默认内核是'rbf'(理论上也应该能够对任何训练数据集进行完美分类,只要您没有两个带有不同标签的相同训练点),也可以进行正则化以减少过度拟合。默认的正则化器为C=1.0。
'rbf'
C=1.0
如果您运行与上述相同的代码,但切换clf = svm.SVC()到 clf = svm.SVC(C=200000),则精度为0.94。
clf = svm.SVC()
clf = svm.SVC(C=200000)