gpt4 book ai didi

machine-learning - 将连续模型概率得分转换为分类评级

转载 作者:行者123 更新时间:2023-11-30 09:48:25 25 4
gpt4 key购买 nike

我有一个标准的 xgboost 分类模型,该模型已经过训练,现在可以预测概率分数。然而,为了使用户界面更简单,我想将此分数转换为 5 星级评级方案。 IE。离散化分数。

有哪些智能方法可以导出此量化的阈值,以便高评级代表高置信度的高概率分数?

例如,我正在考虑生成置信区间以及预测,并将高置信度高分分组为 5 颗星。高置信度低分为 1 星。高置信度中高分如 4 星等。

最佳答案

我为此研究了多种解决方案,并设计了一个 V0 解决方案原型(prototype)。解决方案的主要需求如下:

  • 随着评级级别的提高(5 星优于 1 星),误报数量必须减少。

  • 用户无需手动定义得分概率的阈值,阈值会自动导出。

  • 阈值源自某些更高级别的业务要求。

  • 阈值源自标记数据,并且可以在发现新信息时重新导出。

考虑的其他解决方案:

  • 基于置信区间的评级。例如,您的预测得分可能为 0.9,但置信度较低(即置信区间较大);预测得分可能为 0.9,但置信度较高(即置信区间较小)。我怀疑我们可能希望后者成为 5 星候选者,而前者也许是 4 星?
  • 识别ROC曲线的凸度和凹度以识别最大值点
  • 使用约登指数来识别最佳点

最终解决方案 - 具有给定业务需求集(与每个星级相关联的 FPR 集)的 ROC 曲线样本,然后转换为阈值。注意:这可行,但假设精度曲线有些单调,但情况可能并不总是如此。我通过将问题表述为优化问题来改进解决方案,其中评级阈值是自由度,目标函数是每个评级桶之间转换率的线性度。我确信你可以尝试不同的目标函数,但就我的目的而言,效果非常好。

引用文献:

原型(prototype)解决方案:

import numpy as np
import pandas as pd
# The probas and fpr/tpr/thresholds come from the roc curve.
probas_ = xgb_model_copy.fit(features.values[train], label.values[train]).predict_proba(features.values[test])
# Compute ROC curve and area the curve
fpr, tpr, thresholds = roc_curve(label.values[test], probas_[:, 1])

fpr_req = [0.01, 0.3, 0.5,0.9]
def find_nearest(array,value):
idx = (np.abs(array-value)).argmin()
return idx

fpr_indexes = [find_nearest(fpr, fpr_req_val) for fpr_req_val in fpr_req]
star_rating_thresholds = thresholds[fpr_indexes]
star_rating_thresholds = np.append(np.append([1],star_rating_thresholds),[0])
candidate_ratings = pd.cut(probas_,
star_rating_thresholds[::-1], labels=[5,4,3,2,1],right=False,include_lowest=True)

star_rating_thresolds
array([1. , 0.5073538 , 0.50184137, 0.5011086 , 0.4984425 ,
0. ])
candidate_ratings
[5, 5, 5, 5, 5, ..., 2, 2, 2, 2, 1]
Length: 564
Categories (5, int64): [5 < 4 < 3 < 2 < 1]

关于machine-learning - 将连续模型概率得分转换为分类评级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49218083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com