我有一个非常简单的一维分类问题:值列表 [0, 0.5, 2] 及其关联的类 [0, 1, 2]。我想获得这些类之间的分类边界。
调整iris example (出于可视化目的),摆脱非线性模型:
X = np.array([[x, 1] for x in [0, 0.5, 2]])
Y = np.array([1, 0, 2])
C = 1.0 # SVM regularization parameter
svc = svm.SVC(kernel='linear', C=C).fit(X, Y)
lin_svc = svm.LinearSVC(C=C).fit(X, Y)
给出以下结果:
LinearSVC 正在返回垃圾(为什么?),但具有线性内核的 SVC 工作正常。所以我想获得边界值,您可以通过图形猜测:~0.25 和 ~1.25。
这就是我迷路的地方:svc.coef_
返回
array([[ 0.5 , 0. ],
[-1.33333333, 0. ],
[-1. , 0. ]])
而 svc.intercept_
返回 array([-0.125 , 1.66666667, 1. ])
。
这不是明确的。
我一定是遗漏了一些愚蠢的东西,如何获得这些值?它们似乎很容易计算,在 x 轴上迭代以找到边界是荒谬的......
最佳答案
我有同样的问题,最终在 sklearn documentation 中找到了解决方案.
给定权重 W=svc.coef_[0]
和截距 I=svc.intercept_
,决策边界是直线
y = a*x - b
与
a = -W[0]/W[1]
b = I[0]/W[1]
关于python - 使用 scikit-learn 线性 SVM 提取决策边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794277/