【问题标题】:Predicting Class in Multiclass classification using SVM使用 SVM 预测多类分类中的类
【发布时间】:2018-06-30 19:58:45
【问题描述】:
In:svc1.predict([X_poly[25].reshape(1,-1))

Out:array([3], dtype=int64)

In:svc1.decision_function([X_poly[25]])

Out:array([[ 0.58348329, -0.99979492,  0.08571431, -0.99996706, -0.52397444,
     0.99959056]])

In:svc1.predict_proba(X_poly[25].reshape(1,-1))

Out:array([[ 0.48373954,  0.11870606,  0.00261101,  0.39494339]])

我正在使用 rbf 内核和“ovo”分类。我正在尝试预测数据中第 26 个样本的类别。 SVC 分类器将类别样本预测为 3。但是,当概率表明另一种方式时,我无法理解它如何缩小到类别 3。能否请您解释一下decision_function方法的输出以及如何使用它来预测类。

【问题讨论】:

标签: python machine-learning scikit-learn svm


【解决方案1】:

正如documentation 建议的那样:

概率模型是使用交叉验证创建的,因此 结果可能与通过 predict 获得的结果略有不同。 此外,它会在非常小的数据集上产生毫无意义的结果。

我认为这就是为什么你有不同的输出。

至于ovo(一对一)决策函数,因为您的决策函数返回 6 个值,这意味着您有 4 个类:

(n*(n-1))/2 = 6,其中 n 是类数。

现在介绍如何使用决策函数返回的数字来预测类别。顾名思义(一对一),它对类进行一对一的比较,然后输出一个正数或负数,表明它认为哪个类是正确的。在您的情况下,由于我们有 4 个类,它会产生 6 个数字,代表您的类(1、2、3、4)之间的比较,如下所示:[12,13,14,23,24,34] 在您的情况下由这个决策向量表示:

[0.58348329, -0.99979492,  0.08571431, -0.99996706, -0.52397444, 0.99959056]

所以,哪个班级获胜取决于数字的信号,所以在这个例子中,获胜班级是:[1,3,1,3,4,3],即'12'0.58348329比较,因此班级'1'获胜......等等。因此,决策函数将 '3' 类投票作为您的预测,因为它是最获胜的类。

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 2023-03-18
    • 2016-07-15
    • 2019-12-15
    • 2013-05-20
    • 2013-11-17
    • 2020-03-20
    • 2017-01-19
    • 2011-03-21
    相关资源
    最近更新 更多