You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn多分类任务make_scorer自定义指标选取目标类概率咨询

三分类自定义收益函数选取目标类别概率的解决方案

核心原理

scikit-learn中分类器的predict_proba接口在多分类场景下会返回形状为(样本数, 类别数)的二维数组,每一列的顺序和分类器的classes_属性存储的类别标签顺序完全对应,你只需要提取目标类别对应的列即可实现单类别的收益计算。

具体实现步骤

  1. 确认目标类别的索引:先打印训练后的分类器clf.classes_属性,找到你要计算收益的目标类别对应的索引位置,例如你的类别标签为[0,1,2],要计算标签为1的流失客户收益,对应索引就是1。
  2. 修改自定义收益函数,提取目标类别的概率列,同时调整真实标签的判断逻辑。

可直接复用的代码示例

def gain_fn(y_true, y_prob):
    # 替换下方索引为你目标类别的实际索引,示例为类别1对应索引1
    target_prob = y_prob[:, 1]
    # 真实标签判断也对应你的目标类别取值
    tp = np.where((target_prob >= 0.025) & (y_true == 1), 40000, 0)
    fp = np.where((target_prob >= 0.025) & (y_true != 1), -1000, 0)
    return np.sum(tp + fp)

scorer_fn = make_scorer(gain_fn, greater_is_better = True, needs_proba=True)

# RandomizedSearchCV的其余配置保持不变即可
randomcv = RandomizedSearchCV(
    estimator=clf,
    param_distributions = params_grid,
    cv=kfoldcv,
    n_iter=100, 
    n_jobs=-1, 
    scoring=scorer_fn
)

补充注意事项

  • 若你需要针对多个类别分别计算收益再累加,可分别提取多个类别的概率列,结合业务规则分别计算后再求和返回即可。
  • 索引取值一定要和clf.classes_的顺序对应,避免取错其他类别的概率导致计算结果不符合预期。

内容的提问来源于stack exchange,提问作者Antonio Velazquez Bustamante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:36:01