如何在随机森林分类器中预测'predict'所预测类别的'predict_proba'值?

6
from sklearn import ensemble

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

我知道 predict() 方法使用 predict_proba() 方法进行预测,通过计算森林中树的预测类别概率的平均值得出结果。
我想获取 predict() 方法预测的类别的 predict_proba() 方法结果。
我的做法是:首先像上面代码一样调用 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时,我们希望确定这意味着“属于类别1的概率为0.7”;而根据你所描述的情况,这将不再是这种情况,0.7可能意味着“属于类别1的概率为0.7”或“属于类别0的概率为0.7”,这显然是没有任何意义的。 - desertnaut
在我的情况下,我想要预测大约1000个类。我想要这些概率值,以便将它们与来自不同学习方法的不同模型的置信度进行比较,并选择具有最高置信度的预测结果。 - Snow
那么,下面的答案就是你要找的。 - desertnaut
1个回答

10
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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接