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

时间:2015-08-18 13:46:09

标签: python scikit-learn classification svm svc

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

from sklearn import svm

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

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

2 个答案:

答案 0 :(得分:3)

对于线性核,决策边界为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的结果作为相对距离。

答案 1 :(得分:0)

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

首先我们知道SVM是要找到一个最佳的" w表示超平面wx + b = 0。

事实是

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是上面计算的范数。

(StackOverflow不允许我发布2个以上的链接,所以自己渲染乳胶吧。)