我在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.
系数
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
适用于所有系数对。
我如何获得这些界限?