我正在使用SKLearn在我的数据上运行SVC。
from sklearn import svm
svc = svm.SVC(kernel='linear', C=C).fit(X, y)
我想知道如何从决策边界获取X中每个数据点的距离?
答案 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个以上的链接,所以自己渲染乳胶吧。)