【问题标题】:Why is the result of sklearn.svm.SVC.predict() inconsistent with sklearn.svm.SVC.predict_proba()?为什么sklearn.svm.SVC.predict()的结果与sklearn.svm.SVC.predict_proba()的结果不一致?
【发布时间】:2021-04-02 15:19:07
【问题描述】:

我使用 sklearn.svm.SVC 构建支持向量分类器,如下所示。

import numpy as np
from sklearn.svm import SVC
    
svc=SVC(probability=True)

X = np.random.randint(0, 100, [100, 3])
y = np.random.choice([0, 1, 2], 100, replace=True)
svc.fit(X, y)

print(svc.predict([[10, 20, 30]]), svc.predict_proba([[10, 20, 30]]))

输出是

[2] [[0.38993057 0.3791583  0.23091113]]

svc.predict_proba() 的结果表明该实例应该属于class0 的概率最高。但是 svc.predict() 改为使用 class2。我想知道为什么这两个结果不一致。

【问题讨论】:

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

标签: python scikit-learn svm


【解决方案1】:

scikit-learn documentation 明确提到如果你使用svm.SVC(probability=True),那么从.predict() 预测的输出类可能与.predict_proba() 不同。原因是它使用了 5 折交叉验证,本质上是随机的。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2021-12-16
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多