从sklearn Multiclass SVC中提取1D决策边界值

时间:2016-06-21 21:25:21

标签: python scikit-learn svm

我在1维数据上运行多类SVM。 SVM似乎工作正常,我现在想要提取它找到的决策边界。我的问题类似于previous one,其答案不正确且不完整。

带有简单数据的分类器代码

#Data
X = np.asarray([[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [9, 1]]) #The Y Coordinates here are meaningless
Labels = [1, 1, 2, 2, 3, 3]

#Classifier
svc = svm.SVC(kernel='linear').fit(X, Labels)

绘制代码

#Meshgrid for Contour Plot
x_min, x_max = np.min(X) - 1, np.max(X) + 1
y_min, y_max = 0, 2
h = .02  # step size in the mesh    
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                 np.arange(y_min, y_max, h))


# Draw Contour Plot
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

# Plot training points
plt.scatter(X[:, 0], X[:, 1], cmap=plt.cm.Paired)
plt.xlabel('Signal')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.yticks(()); #Y value is meaningless in this data. 

Multiclass SVM Plot

系数

clf.coef_是:

[[-1.          0.        ]
 [-0.66666667  0.        ]
 [-1.          0.        ]]

拦截

clf.intercept_是:

[ 2.5         2.33333333  4.5       ]

现在,我如何获得决策界限?在2D中,这是我见过的:

边界提取的二维算法

给出权重

W = svc.coef_
I = svc.intercept_

然后,我相信我们通过

获得决策边界
y = a * x - b

哪里

a = -W[0]/W[1]
b = I[0]/W[1]

但是,这不适用于有问题的数据,因为W[1] == 0适用于所有系数对。

我如何获得这些界限?

0 个答案:

没有答案