比有界支持向量更多的训练集错误?

时间:2016-03-29 21:24:29

标签: machine-learning scikit-learn svm libsvm data-science

我们正在使用scikit-learn OneClassSVM训练1级svm,这是libsvm的包装。当我们使用verbose=True时,它会在下面的输出中报告有界支持向量的数量nBSV = 106

>>> clf = svm.OneClassSVM(nu=0.75, kernel="linear", verbose=True, shrinking=True, tol=0.00001)
>>> clf.fit(x)
[LibSVM].*
optimization finished, #iter = 392
obj = 182.273953, rho = 1.831054
nSV = 260, nBSV = 106

现在,如果我们对训练集进行评估,我们得到186个负数,这超过了上面的106个有界支持向量。

>>> y=clf.predict(x)
>>> np.bincount(y.astype(np.int64)+1)
array([186,   0,  98])

根据我对SVM的理解,这应该是不可能的。只要存在非零余量,训练误差应该是有界支持向量的子集,因为有界支持向量是位于边缘错误一侧的训练实例,而训练集错误是实例在错误的一侧。学会了分隔符,它位于边缘内。

虽然实际数字不同,但这种观察对于此数据集的设置似乎很稳健。我甚至看到nBSV=0大多数训练样本被错误分类。

有人可以解释这是怎么发生的吗?

0 个答案:

没有答案