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

如何从树模型获取概率以绘制完整的ROC曲线?

问题:如何从决策树、随机森林等模型获取概率以绘制完整ROC曲线?

我正在针对二分类问题使用10余种模型进行模型选择。遍历每个模型时,执行train-test-split、生成预测并计算得分,将得分更新至以模型名为键的字典中。但决策树、随机森林、AdaBoost等诸多模型输出的是int型类别(1或0)而非浮点型概率,这导致这些模型的AUC图仅有三个点。

我的代码如下:

fig = make_subplots(1,1)

ns_probs = [0 for i in range(len(y_test))]
ns_auc = roc_auc_score(y_test, ns_probs)
ns_fpr, ns_tpr, _ = roc_curve(y_test, ns_probs)


for model in scores_kf_df.columns:
    fig.add_scatter(x=scores_kf_df.T.loc[model, 'fpr'],y=scores_kf_df.T.loc[model, 'tpr'], name=model)
    
fig.add_scatter(x=ns_fpr,y=ns_tpr, name='No Skill', line={'dash':'dot'})
    
    
fig.update_layout({'title':{'text':'ROC AUC Curve', 'x':0.5, 'font':{'size':28}},
                  'xaxis':{'title':'False Positive Rate'},
                  'yaxis':{'title':'True Positive Rate'}})
    
iplot(fig)

对应的ROC图:
ROC曲线仅有三个点

请问是否存在类似逻辑回归中predict_proba()函数的方法,可从这些模型获取概率?


回答:

  • Scikit-learn中的DecisionTreeClassifier、RandomForestClassifier、AdaBoostClassifier都支持predict_proba()方法,调用后会返回每个样本属于各类别的概率数组:二分类场景下,返回形状为[n_samples, 2]的数组,其中第二列对应正类的概率,可直接用于ROC曲线计算。
  • 针对AdaBoostClassifier需要注意:若自定义了基分类器,需确保基分类器支持概率输出(比如DecisionTreeClassifier默认支持),同时建议使用默认的algorithm='SAMME.R'(基于概率的AdaBoost实现),避免因算法选择导致无法输出概率。
  • 用predict_proba()获取正类概率后,将该概率数组传入roc_curve()函数,就能计算出连续的FPR和TPR值,绘制出完整的ROC曲线,解决当前仅三个点的问题。

内容的提问来源于stack exchange,提问作者plotmaster473

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28