python - 使用 scikit-learn 线性 SVM 提取决策边界

标签 python classification scikit-learn svm

我有一个非常简单的一维分类问题:值列表 [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)

给出以下结果:enter image description here

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/

相关文章:

python - Scikit-learn 中的输出交叉验证模型(又名估计器)是什么?

python - 无法为 urllib2.urlopen() 引发异常

python - 使用 Tkinter,如何在启动时定位对话框或如何在设置几何图形后自动调整窗口大小?

python - 在 Python 中获取生成器的第 n 项

python - BERT 微调后得到句子级别的嵌入

algorithm - 如何计算分类错误率

python - 保留使用 TFIDF 制作的模型,以便使用 Scikit for Python 预测新内容

python - 有没有办法在 python 中使用 TF-IDF 找到句子的权重

python - Scikit-learn 中用于多标签分类的 GridSearch

Python numpy 数组的列加法与移位