【问题标题】:understanding sklearn calibratedClassifierCV了解sklearn calibratedClassifierCV
【发布时间】:2022-01-09 15:56:27
【问题描述】:

大家好,我无法理解如何使用sklearn.calibration.CalibratedClassifierCV 的输出。

我已经用这种方法校准了我的二元分类器,结果大大提高了。但是我不确定如何解释结果。 sklearn guide 指出,校准后,

predict_proba 方法的输出可以直接解释为 置信水平。例如,一个经过良好校准的(二元)分类器应该对样本进行分类,使得在其给出的 predict_proba 值接近 0.8 的样本中,大约 80% 实际上属于正类。

现在我想通过为模型应用 0.6 的截止值来预测标签 True 来减少误报。如果没有校准,我会简单地使用my_model.predict_proba() > .6。 但是,校准后,predict_proba的含义似乎发生了变化,所以我不确定我是否可以再这样做了。

通过快速测试,predict 和 predict_proba 似乎遵循我在校准之前所期望的相同逻辑。输出:

pred = my_model.predict(valid_x)
proba= my_model.predict_proba(valid_x)
pd.DataFrame({"label": pred, "proba": proba[:,1]})

如下:

所有概率高于 0.5 的东西都被归类为真,而低于 0.5 的所有东西都被归类为假。

您能否确认,在校准后,我仍然可以使用predict_proba 应用不同的截止值来识别我的标签?

2https://scikit-learn.org/stable/modules/calibration.html#calibration

【问题讨论】:

  • 请修复您的链接;你有一个链接应该指向 sklearn 文档(你引用的地方),它实际上链接到你的数据图像

标签: python machine-learning scikit-learn probability calibration


【解决方案1】:

对我来说,您实际上可以在校准后使用predict_proba() 来应用不同的截止值。

CalibratedClassifierCV 类中发生的事情(如您所见)实际上是predict() 的输出基于predict_proba() 的输出(参见here 以供参考),即np.argmax(self.predict_proba(X), axis=1) == self.predict(X)

另一方面,对于您传递给CalibratedClassifierCV 的未校准分类器(取决于它是否是概率分类器),上述等式可能成立也可能不成立(例如,它不适用于SVC() 分类器 - 例如,请参阅 here,了解有关此的一些其他详细信息。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 2018-04-16
    • 2022-01-20
    • 2016-03-31
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多