Skip to main content
 首页 » 编程设计

python之来自 sklearn 的决策边界

2025年05月04日14kuangbin

假设我们有一个简单的 SVM 训练案例和训练目标

from sklearn import svm 
>>> X = [[0, 0], [2, 2]] 
>>> y = [0.5, 2.5] 
>>> clf = svm.SVR() 
>>> clf.fit(X, y)  
SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, 
epsilon=0.1, gamma=0.0, kernel='rbf', max_iter=-1, probability=False, 
random_state=None, shrinking=True, tol=0.001, verbose=False) 
>>> clf.predict([[1, 1]]) 
array([ 1.5]) 

我们如何使用非线性“rbf”内核获得决策边界? 我们可以通过 clf.suppport_vectors_ 获得支持向量 然而,支持向量与决策边界方程的对应关系是什么?

请您参考如下方法:

对于像具有 RBF 核的 SVM 模型这样复杂的对象,没有“决策边界方程”这样的东西。至少不是直接的。

首先,SVM构造一个超平面w , 然后通过计算内积 <w,x> 来分离数据并检查 <w,x>+b 的标志(其中 b 是经过训练的阈值)。而在线性情况下,我们可以简单地重构 w通过服用 SUM y_i alpha_i x_i , 其中x_i是支持向量,y_i他们的类(class)和alpha_i在优化过程中发现的对偶系数,当我们处理由 RBF 核引入的无限维空间时,它要复杂得多。所谓的内核技巧表明,我们可以计算内积 <w,x>+b轻松使用内核,因此我们可以无需计算实际的 w 进行分类.那么什么是w确切地?它是以支持向量(其中一些具有负系数)为中心的高斯线性组合。您可以再次计算 SUM y_i alpha_i f(x_i) , 其中f是一个特征投影(在这种情况下,它将是一个返回以给定点为中心的高斯分布的函数,方差等于 1/(2gamma) 。实际的决策边界现在被描述为这个函数和高斯分布的内积以这一点等于 -b 。

如果您的问题只是绘制决策边界,您可以通过创建网格、计算 SVM 决策函数并绘制 contour plot 来实现

您的问题询问的是决策边界,但您的代码实际上运行的是回归,而不是分类。在这种情况下,更有可能的是您实际上是在寻找回归线,而不是决策边界,但问题与分类情况非常相似——“取出”有关的信息仍然非常重要方程,因为它实际上只是无限维空间中的一个超平面。您仍然可以绘制它(如果使用 SVC 以更简单的方式进行回归),但是没有很好的“封闭形式”回归方程。它仍然由这些支持向量和内核定义的内积定义。