为啥随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配?

Posted

技术标签:

【中文标题】为啥随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配?【英文标题】:Why prediction from randomforest classifier .predict() and .predict_proba() don't match?为什么随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配? 【发布时间】:2021-08-05 20:19:15 【问题描述】:

我训练了一个简单的随机森林分类器,然后当我使用相同的测试输入测试预测时:

rf_clf.predict([[50,0,500,0,20,0,250000,1.5,110,0,0,2]])

rf_clf.predict_proba([[50,0,500,0,20,0,250000,1.5,110,0,0,2]])

第一行返回array([1.]),而第二行返回array([[0.14, 0.86]]),其中预测是第一个浮点数0.14,对吗?

这两个怎么不匹配?我有点困惑。谢谢。

【问题讨论】:

【参考方案1】:

predict()函数返回特征所属的类,predict_proba()函数返回特征属于不同输出类的概率。

示例: predict() 函数的输出结果表明该特征属于第 1 类(即)数组([1.])

predict_proba() 函数的输出为您提供了属于每个输出类数组的特征的概率([[0.14, 0.86]])。特征属于 0 类的概率为 14%,特征属于 1 类的概率为 86%。

参考文档:predict() docs、predict_proba() docs

【讨论】:

谢谢,我想用它们来返回预测类,我定义了一个dict,例如0-not dead/1-dead,对于predict(),我怎样才能返回相应的类? dict[clf.predict()[0]] 将返回预测类。【参考方案2】:

看看sklearn.ensemble.RandomForestClassifier 的documentation 部分,特别是predict_proba 方法。

返回:形状的 ndarray (n_samples, n_classes),或 n_outputs 的列表。如果 n_outputs > 1,则为此类数组。输入样本的类概率。类的顺序与属性classes_中的顺序相对应。

因此,您得到的输出 (array([[0.14, 0.86]])) 是每个样本输入的样本中存在的每个类的概率列表。 predict() 方法只是为每个输入预测一个类(这就是为什么你得到 array([1.]) 作为返回)。

【讨论】:

以上是关于为啥随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林分类器批量学习 Python 维度错误

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

关于决策树和随机森林分类器(scikit)的疑问

朴素贝叶斯分类器,决策树,boosting,随机森林实现分类

为啥以两种不同方式应用随机森林分类器的特征选择结果不同

为啥打乱训练数据会影响我的随机森林分类器的准确性?