随机森林:预测 vs predict_proba

Posted

技术标签:

【中文标题】随机森林:预测 vs predict_proba【英文标题】:random forest: predict vs predict_proba 【发布时间】:2021-06-23 05:31:03 【问题描述】:

我正在研究一个多类、高度不平衡的分类问题。我使用随机森林作为基础分类器。

我必须在考虑多个标准(指标:precision, recall conf_matrix, roc_auc)的评估集上给出模型性能报告。

模型火车:

rf = RandomForestClassifier(()
rf.fit(train_X, train_y)

为了获得精确/召回和混淆矩阵,我喜欢:

pred = rf.predict(test_X)
precision = metrics.precision_score(y_test, pred)
recall  = metrics.recall_score(y_test, pred)
f1_score = metrics.f1_score(y_test, pred) 
confusion_matrix = metrics.confusion_matrix(y_test, pred)

很好,但是计算roc_auc 需要类的预测概率而不是类标签。为此,我必须进一步这样做:

y_prob = rf.predict_proba(test_X)
roc_auc = metrics.roc_auc_score(y_test, y_prob)

但是我在这里担心rf.predict() 首先产生的结果可能与rf.predict_proba() 不一致,所以我报告的roc_auc 分数。我知道多次调用predict 会产生完全相同的结果,但我担心predict 然后predict_proba 可能会产生略有不同的结果,因此不适合与上述指标一起讨论。

如果是这种情况,有没有办法控制这种情况,确保predict() 用于确定预测标签的类概率在我调用predict_proab 时完全相同?

【问题讨论】:

作为一般评论,对于高度不平衡的分类,准确率、精度、召回率和 f1 分数是评估模型的较差指标。如果您想评估您的模型在不同类别之间的区分程度,请关注 roc-auc。如果您正在尝试针对业务问题进行优化并知道错误的成本(例如:将 A 标记为 B 比将 B 标记为 A 差 10 倍),请关注f_beta_score。 【参考方案1】:

predict_proba()predict() 是一致的。事实上,predict 使用 predict_proba 内部可以看到here in the source code

【讨论】:

以上是关于随机森林:预测 vs predict_proba的主要内容,如果未能解决你的问题,请参考以下文章

在随机森林中使用 predict() 与 predict_proba() 计算时,ROC_AUC_SCORE 不同

scikit学习随机森林分类器概率阈值

随机森林回归中的树数

集成学习与随机森林随机森林与随机子空间

RandomForestClassifier 获得前 N 个预测和相应的概率

分类算法 - 随机森林