【发布时间】:2020-02-07 14:06:27
【问题描述】:
我在以 svm.SVC 作为基础估计器的多类问题上使用 OneVsRestClassifier。
predict_proba() 的 argmax 与预测的类不匹配:
后台是否进行了一些规范化?我如何获得 predict_proba() 和 predict() 匹配?
【问题讨论】:
-
请不要在 cmets 中发布代码或数据 - 相应地编辑和更新您的帖子!
我在以 svm.SVC 作为基础估计器的多类问题上使用 OneVsRestClassifier。
predict_proba() 的 argmax 与预测的类不匹配:
后台是否进行了一些规范化?我如何获得 predict_proba() 和 predict() 匹配?
【问题讨论】:
根据scikit learn's SVC documentation on multi-class classification,predict 的输出与predict_proba 的argmax 之间可能存在差异(强调我的):
SVC 和 NuSVC 的 decision_function 方法为每个样本提供每个类别的分数(或在二元情况下每个样本的单个分数)。当构造函数选项概率设置为 True 时,将启用类成员概率估计(来自方法 predict_proba 和 predict_log_proba)。在二进制情况下,概率使用 Platt 标度进行校准:SVM 分数的逻辑回归,通过对训练数据的额外交叉验证进行拟合。在多类情况下,这根据 Wu 等人进行了扩展。 (2004 年)。
不用说,Platt 缩放中涉及的交叉验证对于大型数据集来说是一项昂贵的操作。 此外,概率估计可能与分数不一致,即分数的“argmax”可能不是概率的argmax。 (例如,在二元分类中,根据 predict_proba,可以通过 predict 将样本标记为属于概率
您无法使用 SVC 使它们匹配。如果您需要概率,您可以尝试其他模型。如果您不需要概率,如文档中所述,您可以使用decision_function(有关详细信息,请参阅here。)
【讨论】: