python中的随机森林:分类问题的最终概率

pro*_*ter 4 python classification probability random-forest scikit-learn

在分类问题中,RF 分类器根据多数投票给出最终响应,例如对某个事件是或否。

另一方面,我还可以看到一个带有事件最终概率的向量,例如 0,83。如果我有 1000 个估计量,这个概率是如何计算的,是每棵树的 1000 个概率的平均值吗?

clf = RandomForestClassifier(max_depth = 4, min_samples_split=2, n_estimators = 200, random_state = 1) 
clf.fit(train[columns], train["churn"]) 
predictions = clf.predict(test[columns]) 
predicted_probs = clf.predict_proba(test[columns]) 
print(predicted_probs) 
test = pd.concat([test, pd.DataFrame(predicted_probs, columns=['Col_0', 'Col_1'])], axis=1) 
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 5

是每棵树 1000 个概率的平均值?

是的。


该向量显示所有树中每个选定类别的平均概率。Scikit RF 分类中的最终投票会选择所有树的给定输入的平均概率最高的类别。

因此,如果对于双类数据集,对于给定样本/输入,C1 和 C2 在分别标记为 1 和 2 的树上的概率为 0.3、0.7 和 0.5、0.5。C1 的平均概率为 0.4,而 C2 的平均概率为 0.4。0.6。

C2 是该输入的选定类别,因为它在两棵树中具有最高的平均概率。


您还可以查看 的predict方法的源代码ForestClassifiers。从该__doc__方法来看:

输入样本的预测类别是森林中树木的投票,并根据它们的概率估计进行加权。也就是说,预测的类别是树中具有最高平均概率估计的类别。

简而言之,这是一种多数投票,其中投票权重不是树之间的类别频率,而是树之间的平均值。