我尝试用SVC预测奇数和偶数,但我的输出不是我期望的
from sklearn import svm
import numpy as np
clf = svm.SVC(kernel='linear')
data = np.array([[0], [1], [2], [3], [4]])
label = np.array([1,0,1,0,1])
clf.fit(data, label)
print(clf.predict([[3]]))
print(clf.predict([[4]]))
print(clf.predict([[5]]))
结果在
[1]
[1]
[1]
我做错了什么?我希望 [3] 和 [5] 是 [0]
我正在使用:
numpy==1.9.1
scikit-learn==0.16.1
scipy==0.13.3
[更新]SVM 不适用于这种情况。该算法找不到将标签为 0 的值与标签为 1 的值分开的线/平面/超平面。
您的数据不是线性可分的。尝试使用像 rbf 这样的内核svm.SVC(kernel='rfb')
也许它可以帮助你
使用
clf = svm.SVC(kernel='rbf', C=100)
会给出预期的
clf.predict(np.arange(10).reshape(-1, 1))
> array([1, 0, 1, 0, 1, 1, 1, 1, 1, 1])
对于此任务,您不能使用此内核在训练数据范围之外进行泛化。我认为,你需要一个正弦内核(不是在 sklearn 中)来学习这个。或者你可以只使用你的特征的窦值。