【问题标题】:SVM, scikit-learn: Decision values with RBF kernelSVM,scikit-learn:带有 RBF 内核的决策值
【发布时间】:2014-03-15 01:12:23
【问题描述】:

我在某处读到,无法解释非线性内核上的 SVM 决策值,因此只有符号很重要。但是,我看到有几篇文章为决策值设置了阈值(尽管使用了 SVMlight)[1] [2]。所以我不确定对决策值设置阈值是否也合乎逻辑,但无论如何我对结果很好奇。

那么,当您调用 predict() 时,LibSVM python 接口直接返回具有预测目标的决策值,有没有办法用 scikit-learn 来做到这一点?我已经使用 svm.SVC() 训练了一个二元分类 SVM 模型,但现在卡在了那里。

在源代码中,我发现 svm.libsvm.decision_function() 函数注释为“(libsvm 名称为 predict_values)”。然后我看到了 svm.SVC.decision_function() 并检查了它的源代码:

    dec_func = libsvm.decision_function(
        X, self.support_, self.support_vectors_, self.n_support_,
        self.dual_coef_, self._intercept_, self._label,
        self.probA_, self.probB_,
        svm_type=LIBSVM_IMPL.index(self._impl),
        kernel=kernel, degree=self.degree, cache_size=self.cache_size,
        coef0=self.coef0, gamma=self._gamma)

    # In binary case, we need to flip the sign of coef, intercept and
    # decision function.
    if self._impl in ['c_svc', 'nu_svc'] and len(self.classes_) == 2:
        return -dec_func

它似乎在做 libsvm 的预测等价物,但为什么它会改变决策值的符号,如果它是等价的?

另外,有没有办法使用这个值或任何预测输出来计算 SVM 决策的置信度值(除了概率估计和 Platt 方法,我的模型在计算概率估计时不好)?或者正如已经争论的那样,唯一的符号对非线性内核中的决策值很重要?

[1]http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0039195#pone.0039195-Teng1

[2]http://link.springer.com/article/10.1007%2Fs00726-011-1100-2

【问题讨论】:

    标签: python machine-learning scikit-learn svm libsvm


    【解决方案1】:

    似乎它正在执行 libsvm 的预测等效项,但是如果它等效于 ,为什么它会更改决策值的符号?

    这些只是关于类符号内部表示的实现技巧。没有什么可真正担心的。

    sklearn decision_function 是 SVM 的超平面 w 和您的数据 x 之间的内积值(可能在内核诱导空间中),因此您可以使用它,移位或分析。然而,它的解释非常抽象,因为对于 rbf 内核,它只是以x 为中心的正态分布乘积与方差等于1/(2*gamma) 和以支持向量为中心的正态分布的加权和的积分(和相同的方差),其中权重是alpha 系数。

    另外,有没有办法使用这个值或任何预测来计算 SVM 决策的置信度值

    使用 Platt 的缩放比例并不是因为有一些“游说”迫使我们这样做 - 只是这是估计 SVM 置信度的“正确”方法。但是,如果您对“概率感”置信度不感兴趣,而是您可以定性比较的任何值(哪个点更置信)而不是决策函数都可以用来做。它大致是内核空间中的点图像和分离超平面之间的距离(直到归一化常数是w 的范数)。所以这是真的,那

    abs(decision_function(x1)) < abs(decision_function(x2)) =>x1 的信心不如x2

    简而言之 - decision_function 值越大,点在其超平面中的“更深”。

    【讨论】:

    • 非常感谢您的澄清!
    • 更深是否意味着它更接近超平面?
    • 这里更深意味着更远。大决策功能意味着你离得很远,所以决策是可靠的(因为你需要长途跋涉才能改变分类)
    最近更新 更多