如何从树模型获取概率以绘制完整的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图:
请问是否存在类似逻辑回归中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
相关产品推荐
相关产品推荐

