1

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

4

1 回答 1

8

对于具有 RBF 内核的 SVM 模型等复杂对象,不存在“决策边界方程”之类的东西。至少不是直接的。

首先,SVM 构造一个超平面w,然后用于通过计算内积<w,x>和检查 的符号来分离数据<w,x>+b(其中b是训练的阈值)。虽然在线性情况下,我们可以简单地重建wSUM 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 决策函数和绘制等高线图来完成

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

于 2013-09-27T17:05:26.343 回答