SKLearn:从决策边界获取每个点的距离?

Posted

技术标签:

【中文标题】SKLearn:从决策边界获取每个点的距离?【英文标题】:SKLearn: Getting distance of each point from decision boundary? 【发布时间】:2015-11-11 11:57:07 【问题描述】:

我正在使用 SKLearn 对我的数据运行 SVC。

from sklearn import svm

svc = svm.SVC(kernel='linear', C=C).fit(X, y)

我想知道如何获取 X 中每个数据点到决策边界的距离?

【问题讨论】:

【参考方案1】:

恰好我正在做一门名为“机器学习技术”的课程的作业 1。即使对于 RBF 内核,也恰好存在点到超平面的距离问题。

首先我们知道 SVM 是为超平面 wx + b = 0 找到“最优” w。

事实上,

w = \sum_i \alpha_i \phi(x_i)

其中那些 x 是所谓的支持向量,而那些 alpha 是它们的系数。请注意,在 x 之外有一个 phi();它是将 x 变换到某个高维空间的变换函数(对于 RBF,它是无限维)。我们知道

[\phi(x_1)\phi(x_2) = K(x_1, x_2)][2]

所以我们可以计算

那么我们可以得到 w。所以,你想要的距离应该是

svc.decision_function(x) / w_norm

其中 w_norm 是上面计算的范数。

(*** 不允许我发布超过 2 个链接,所以自己渲染乳胶吧。)

【讨论】:

【参考方案2】:

对于线性核,决策边界为y = w * x + b,点x到决策边界的距离为y/||w||。

y = svc.decision_function(x)
w_norm = np.linalg.norm(svc.coef_)
dist = y / w_norm

对于非线性内核,没有办法得到绝对距离。但是您仍然可以使用decision_funcion 的结果作为相对距离。

【讨论】:

决策函数的输出和y/w_norm有什么区别? ***.com/questions/11030253/decision-values-in-libsvm@karenu 的回答会很有帮助。 决策值为w*x+b的评估结果,y/w_norm为实际距离。所以决策值越接近0,越接近决策边界。它的决策值表示该点的类别。 我们不应该包括拦截(svc.intercept_)吗?

以上是关于SKLearn:从决策边界获取每个点的距离?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习sklearn----支持向量机分类器SVC求解过程可视化

机器学习sklearn----支持向量机分类器SVC求解过程可视化

从 SKlearn 决策树中检索决策边界线(x,y 坐标格式)

从线性 SVM 绘制 3D 决策边界

如何在 sklearn Python 中绘制 SVM 决策边界?

如何在 python 中的 SVM sklearn 数据中绘制决策边界?