为啥随机森林分类器 .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() 的预测不匹配?的主要内容,如果未能解决你的问题,请参考以下文章