首先,我创建一些玩具数据:
n_samples=20
X=np.concatenate((np.random.normal(loc=2, scale=1.0, size=n_samples),np.random.normal(loc=20.0, scale=1.0, size=n_samples),[10])).reshape(-1,1)
y=np.concatenate((np.repeat(0,n_samples),np.repeat(1,n_samples+1)))
plt.scatter(X,y)
在图表下方显示数据:
然后我用LinearSVC
训练一个模型
from sklearn.svm import LinearSVC
svm_lin = LinearSVC(C=1)
svm_lin.fit(X,y)
我对C
的理解是:
C
非常大,那么错误分类将是不可容忍的,因为惩罚将是巨大的李>C
很小,可以容忍错误分类,以使保证金(软保证金)更大李>对于C=1
,我有下面的图表(橙色线表示给定x值的预测),我们可以看到决策边界大约为7,因此C=1
足够大,不会出现任何错误分类
X_test_svml=np.linspace(-1, 30, 300).reshape(-1,1)
plt.scatter(X,y)
plt.scatter(X_test_svml,svm_lin.predict(X_test_svml),marker="_")
plt.axhline(.5, color='.5')
以C=0.001
为例,我希望决策边界位于右侧,例如11左右,但我得到了以下结果:
我尝试了另一个带有SVC
函数的模块:
from sklearn.svm import SVC
svc_lin = SVC(kernel = 'linear', random_state = 0,C=0.01)
svc_lin.fit(X,y)
我成功地获得了所需的输出:
用我的R代码,我得到了一些更容易理解的东西。(我使用了来自e1071
包的svm
函数)
LinearSVC
和SVC(kernel=linear)
不是一回事区别在于:
另见:https://stackoverflow.com/a/33844092/5025009
相关问题 更多 >
编程相关推荐