当使用 3 个类时,输出对于在 Scikitlearn 的 SVM 中获取决策函数意味着啥

Posted

技术标签:

【中文标题】当使用 3 个类时,输出对于在 Scikitlearn 的 SVM 中获取决策函数意味着啥【英文标题】:What does the Output means for getting Decision Function in Scikitlearn's SVM, when used 3 classes当使用 3 个类时,输出对于在 Scikitlearn 的 SVM 中获取决策函数意味着什么 【发布时间】:2018-03-01 20:23:25 【问题描述】:

我在执行以下代码块https://prateekvjoshi.com/2015/12/15/how-to-compute-confidence-measure-for-svm-classifiers/ 时参考了以下博客文章,并获得了以下结果。我的意图是在 Scikit-learn 的 SVM 的 SVC 中找出一个点与 3 个类的距离,但我对所描述的含义感到困惑,是否有任何解决方案。

import numpy as np
from sklearn.svm import SVC
x = np.array([[1,2],[2,3],[3,4],[1,4],[1,5],[2,4],[2,6]])
y = np.array([0,1,-1,-1,1,1,0])
classifier = SVC(kernel='linear')
classifier.fit(x,y)
classifier.decision_function([2,1])

最后一次调用给出以下大小为 3 的数组的输出

array([[ -8.88178420e-16,  -1.40000000e+00,  -1.00000000e+00]])

这个数组是什么意思,我们如何使用这个数组来找出与特定数据点相关的三个类(-1,1,0)。

【问题讨论】:

【参考方案1】:

它是点[2,1]到SVM分类器的分离超平面的距离。所以第一个值是[2,1] 与分离第一类的超平面的距离,以此类推。您可以查看函数的实现here 并阅读文档here 了解更多信息。

编辑:您也可以查看this example。

【讨论】:

@Mohammad Kashif,您能否进一步详细说明 3 个值会进一步响应什么,我很困惑,是否像第一个值是比较 (-1,0) 类,第二个是 (0,1)第三个是 (1,-1) 是这样还是其他方式.... @AmutheezanSivagnanam 它基本上是点[2,1]到类-1的超平面的垂直距离,然后是点[2,1]到类0的超平面的垂直距离,最后是垂直距离来自类 1 的超平面的点 [2,1] @Mohammad Kashif,在我的任务中,我需要预测它属于哪个类,这对于 3 个类和使用决策距离来说是可能的,顺便说一句,我调整以获得 rbf 内核中的模型,它表示它给出了相对距离.因为当我尝试决策函数而不是预测或预测概率时,它给出的 fscore 和平均值非常低 "第一个值是 [2,1] 与分离第一类的超平面的距离"。我来到this answer,它详细阐述了该主题并解释了列实际上包含与一对类(而不是单个超平面)的相对位置。这与使用 4 个类时返回的数组有 6 列(根据文档为 4x3/2)这一事实是一致的,这是类的唯一成对组合的数量。所以在 OP 案例中,第一列包含相对于类 1 和 2 的度量。

以上是关于当使用 3 个类时,输出对于在 Scikitlearn 的 SVM 中获取决策函数意味着啥的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中具有类权重的多标签分类

当final作用于变量参数方法和类时该如何处理

类的加载器 ClassLoader

使用 Apple 的 MixerHostAudio 示例类时遇到问题

为啥当我没有为我的 openGLWidget 创建额外的类时 glRotate 只工作一次?

Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用