来自sklearn的决策边界

时间:2013-09-27 16:26:26

标签: python machine-learning svm scikit-learn

假设我们有一个简单的培训案例和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_获得支持向量 但是,支持向量和决策边界方程之间的对应关系是什么?

谢谢,

1 个答案:

答案 0 :(得分:8)

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

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

如果您的问题仅涉及绘图决策边界,您可以通过创建网格网格,计算SVM决策函数并绘制contour plot

来实现

您的问题询问决策边界,但您的代码实际上运行回归,而不是分类。在这种情况下,更可能的是你实际上在寻找回归线,而不是决策边界,但问题非常类似于分类案例 - “取出”关于该分类的信息仍然非常微不足道。因为它实际上只是无限维空间中的超平面。您仍然可以绘制它(如果以更简单的方式回归,然后使用SVC),但是没有漂亮的,“封闭形式”的回归方程。它仍然由这些支持向量和内核定义的内部产品定义。