【问题标题】:Get Confidence probability Scores for each Predicted Result in Catboost Classifier获取 Catboost 分类器中每个预测结果的置信概率分数
【发布时间】:2022-05-02 16:31:48
【问题描述】:

我已经使用 Catboost 分类器构建了一个机器学习模型来预测我的结果的类别名称,如下面的截图 1。但是,如果我得到一个未知的输入或任何没有训练模型的输入,那么我需要将其返回为 null。

我的想法是根据以下 scrrenshot2(预期输出)的置信概率得分。对于已知输入,该模型的概率得分较高,而对于任何未知的未知输入,该模型的置信度得分较低。

如何实现这一点并将概率列添加到我的预测结果中,如下面的屏幕截图2(预期输出)?

我正在使用的代码

pred = pipe_model_.predict(df_unseen)
predict_proba = pipe_model_.predict_proba(df_unseen)
# Get predicted RawFormulaVal
preds_raw = pipe_model_.predict(df_unseen, 
                          prediction_type='RawFormulaVal')

Predict_proba 上的上述代码输出如下

样本输入训练数据帧(屏幕截图 1)

预期的预测输出如下(屏幕截图 2),黄色突出显示的是模型以前从未见过或训练过的输出,因此概率很低,我可以根据我的要求编写一个 if 条件来省略它

【问题讨论】:

  • 我可能有一个解决方案,但您能否先分享一个数据集样本?

标签: python machine-learning probability catboost


【解决方案1】:

总结您的要求:

  1. 返回模型预测的标签概率
  2. 如果输入(姓名)不是训练集的一部分,则将概率设为空

如果这是正确的,那么对于要求 1,您缺少的唯一步骤是从 .predict_proba() 输出到类的映射。您可以调用 .classes_ 来恢复映射。见related answer。使用此映射,您可以存储预测以及每个类的概率,并且只显示预测的类的概率。

对于要求 2,您需要记录您在培训中提供的所有输入(姓名)。您可以将其保存在 .txt 文件中并将其加载到列表中。然后,在做出预测后,您可以排除任何具有新输入或未知输入的行。

2 是一个奇怪的要求。如果您知道之前看到的每个名称的标签,并且您不想在之前没有看到名称的情况下使用模型的输出,那么使用案例可能会更好地服务于从名称到标签的硬编码查找。模型的目的是在您之前没有见过 Name 时预测标签,在对名称模式进行训练之后(例如,如果您获得新名称“Transt”,该模型有望在训练后预测“Logistics”关于“运输”>“物流”和“运输”>“物流”)。

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2019-08-05
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2021-02-11
    • 2016-01-05
    • 2017-06-12
    • 2018-04-19
    相关资源
    最近更新 更多