sklearn LinearSVC 如何对边界上的测试用例进行分类?

How does sklean LinearSVC classify the test cases which are on the boundary?

我刚刚做了一个实验。我只提供了两个训练案例 [0, 1] 和 [1, 0]。它们属于两个不同的类别。测试用例是 [0, 0],它位于决策边界上。 classifier把它赋值给了class0,是不是因为class0是第一个class?真的有意义吗?

>>> X=numpy.array([[0,1],[1,0]])
>>> y=numpy.array([0,1])
>>> clf.fit_transform(X,y)
array([[0, 1],
       [1, 0]])

>>> clf.predict(numpy.array([[0,0]]))
array([0])
>>> clf.decision_function(numpy.array([[0,0]]))
array([ 0.])
>>> clf.coef_
array([[ 0.66666667, -0.66666667]])
>>> clf.predict(numpy.array([[0,1]]))
array([0])
>>> clf.decision_function(numpy.array([[0,1]]))
array([-0.66666667])
>>> clf.intercept_
array([ 0.])
>>> clf.intercept_ > 0
array([False], dtype=bool)

就我个人而言,我会将您的实验作为问题的答案。

决策边界上的点不明确。行为应该是怎样的?它应该预测两个 类 之一吗?出错了?预测 NaN?

根据您的实验,scikit-learn 预测 0。我认为这意味着在一般情况下,它为边界情况选择第一个(按字典顺序)。

如果边界情况对您的应用程序很重要,您将必须编写特殊代码来检查决策函数是否为 0,并做一些不同的事情。像这样:

scores = clf.decision_function( X )
predictions = scores > 0
preidctions[ scores==0 ] = np.nan