SKLearn:从决策边界获取每个点的距离?
SKLearn: Getting distance of each point from decision boundary?
我正在使用 SKLearn 对我的数据进行 运行 SVC。
from sklearn import svm
svc = svm.SVC(kernel='linear', C=C).fit(X, y)
我想知道如何获取 X 中每个数据点与决策边界的距离?
对于线性核,决策边界为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。即使是RBF核,点到超平面的距离也恰好有问题
首先我们知道SVM是为超平面wx + b = 0寻找一个“最优”的w。
而事实是
w = \sum_{i} \alpha_i \phi(x_i)
其中那些 x 是所谓的支持向量,那些 alpha 是它们的系数。注意x外面有个phi();它是将 x 变换到某个高维 space 的变换函数(对于 RBF,它是无限维)。我们知道
[\phi(x_1)\phi(x_2) = K(x_1, x_2)][2]
所以我们可以计算
然后我们可以得到w。所以,你想要的距离应该是
svc.decision_function(x) / w_norm
其中 w_norm 上面计算的范数。
(Whosebug 不允许我 post 超过 2 个链接,所以你自己渲染乳胶吧。)
我正在使用 SKLearn 对我的数据进行 运行 SVC。
from sklearn import svm
svc = svm.SVC(kernel='linear', C=C).fit(X, y)
我想知道如何获取 X 中每个数据点与决策边界的距离?
对于线性核,决策边界为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。即使是RBF核,点到超平面的距离也恰好有问题
首先我们知道SVM是为超平面wx + b = 0寻找一个“最优”的w。
而事实是
w = \sum_{i} \alpha_i \phi(x_i)
其中那些 x 是所谓的支持向量,那些 alpha 是它们的系数。注意x外面有个phi();它是将 x 变换到某个高维 space 的变换函数(对于 RBF,它是无限维)。我们知道
[\phi(x_1)\phi(x_2) = K(x_1, x_2)][2]
所以我们可以计算
然后我们可以得到w。所以,你想要的距离应该是
svc.decision_function(x) / w_norm
其中 w_norm 上面计算的范数。
(Whosebug 不允许我 post 超过 2 个链接,所以你自己渲染乳胶吧。)