OneVsRest predict_proba() 和 predict() 不匹配?

Posted

技术标签:

【中文标题】OneVsRest predict_proba() 和 predict() 不匹配?【英文标题】:OneVsRest predict_proba() and predict() don't match? 【发布时间】:2020-02-07 14:06:27 【问题描述】:

我在以 svm.SVC 作为基础估计器的多类问题上使用 OneVsRestClassifier。 predict_proba() 的 argmax 与预测的类不匹配:

后台是否进行了一些规范化?我如何获得 predict_proba() 和 predict() 匹配?

【问题讨论】:

不要在 cmets 中发布代码或数据 - 相应地编辑和更新您的帖子! 【参考方案1】:

根据scikit learn's SVC documentation on multi-class classification,predict 的输出与predict_probaargmax 之间可能存在差异(强调我的):

SVC 和 NuSVC 的 decision_function 方法为每个样本提供每个类别的分数(或在二元情况下每个样本的单个分数)。当构造函数选项概率设置为 True 时,将启用类成员概率估计(来自方法 predict_proba 和 predict_log_proba)。在二进制情况下,概率使用 Platt 标度进行校准:SVM 分数的逻辑回归,通过对训练数据的额外交叉验证进行拟合。在多类情况下,这根据 Wu 等人进行了扩展。 (2004 年)。

不用说,Platt 缩放中涉及的交叉验证对于大型数据集来说是一项昂贵的操作。 此外,概率估计可能与分数不一致,即分数的“argmax”可能不是概率的argmax。 (例如,在二元分类中,根据 predict_proba,可以通过 predict 将样本标记为属于概率

您无法使用 SVC 使它们匹配。如果您需要概率,您可以尝试其他模型。如果您不需要概率,如文档中所述,您可以使用decision_function(有关详细信息,请参阅here。)

【讨论】:

谢谢。我最终使用了另一个模型,但如果你想要 SVC 和概率,CalibratedClassifierCV 也是一个选项

以上是关于OneVsRest predict_proba() 和 predict() 不匹配?的主要内容,如果未能解决你的问题,请参考以下文章

PySpark ML:LinearSVC 的 OnevsRest 策略

有没有一种简单的方法来获得多类分类的混淆矩阵? (OneVsRest)

解决 scikit-learn OneVsRest RandomForests 的缓慢解酸问题

了解`predict_proba`的结果

回归与分类器 predict_proba

如何修复 TypeError:predict_proba() 缺少 1 个必需的位置参数:'X'