【问题标题】:How to get the 'predict_proba' for the class predicted by 'predict' in Random Forest Classifier?如何获得随机森林分类器中“预测”预测的类的“预测概率”?
【发布时间】:2021-02-11 20:44:09
【问题描述】:
from sklearn import ensemble

model = ensemble.RandomForestClassifier(n_estimators=10)
model.fit(x,y)
predictions = model.predict(new)

我知道 predict() 使用 predict_proba() 通过计算森林中树木的预测类别概率的平均值来获得预测。

我想得到predict_proba() 方法预测的类的predict() 方法的结果。

我正在做的是:首先像上面的代码一样调用predict(),对于概率,我从树中提取最大概率,如下所示:

all_probabilities = model.predict_proba()
class_probabilities = np.array([])
for tree in all_probabilities:
    class_probabilites = np.append(class_probabilities, tree.max())

这是正确的吗?如果不是,如何提取预测类别的概率?

【问题讨论】:

  • 您确定要这样做吗?因为,从建模的角度来看,这没有多大意义——当我们在二进制情况下得到一个概率值,比如说,0.7,我们想确定这意味着“0.7 属于第 1 类的概率";根据您的描述,情况将不再如此,0.7 可能意味着“0.7 类 1 的概率”或“0.7 类 0 的概率”,其中,如前所述,没有任何意义。
  • @desertnaut 在我的例子中,我想预测大约 1000 个类。我想要概率,以便将它们与来自不同学习方法的不同模型的置信度进行比较,并选择置信度最高的预测。
  • 那么,下面的答案就是你要找的。​​span>

标签: python machine-learning scikit-learn random-forest


【解决方案1】:

predict_proba() 方法返回一个二维数组,其中包含每个实例和每个类的估计概率:

import numpy as np
from sklearn.ensemble import RandomForestClassifier

X = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9], 
              [10, 11, 12]])
y = np.array([0, 0, 1, 1])

model = RandomForestClassifier()
model.fit(X, y)

model.predict_proba(X)
array([[0.91, 0.09],
       [0.91, 0.09],
       [0.25, 0.75],
       [0.05, 0.95]])

正如您所注意到的,对于每个实例,预测的类别是概率最大的类别。因此,获取预测类的估计概率的一种简单方法是使用np.max()

np.max(model.predict_proba(X), axis=1)
array([0.91, 0.91, 0.75, 0.95])

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2016-12-04
    • 2015-05-03
    • 2018-10-23
    • 2017-04-24
    • 1970-01-01
    • 2018-10-04
    • 2020-07-06
    • 2014-08-07
    相关资源
    最近更新 更多