如何使用整个训练示例来估计 sklearn RandomForest 中的类概率

Posted

技术标签:

【中文标题】如何使用整个训练示例来估计 sklearn RandomForest 中的类概率【英文标题】:How to use whole training example to estimate class probabilities in sklearn RandomForest 【发布时间】:2015-03-16 04:21:02 【问题描述】:

我想使用 scikit-learn RandomForestClassifier 来估计给定示例属于一组类的概率,当然是在预先训练之后。

我知道我可以使用 predict_proba 方法获得类概率,该方法将它们计算为

[...] 森林中树木的平均预测类别概率。

在this question 中提到:

单个树返回的概率是归一化类 样本所在叶子的直方图。

现在,我一直在阅读一些关于概率估计的论文,并意识到没有简单的解决方案。根据Estimating Class Probabilities in Random Forests (Böstrom):

使用相同的示例来种植树木并估计 概率,[...]必然会导致纯粹的(因此 小)估计集

这很糟糕。解决方案似乎是使用训练集中的所有示例,而不是仅使用引导样本中用于生长树的示例。

Scikit-learn 确实只使用每棵树的引导样本来计算每个类的概率估计,对吧? 有人对如何继续使类概率来自 RandomForest 的整个训练集有任何指示吗?

我认为这需要一些特殊的Tree 子类化,不会将类概率分配给树的叶子,然后需要一些程序来使用整个训练集从 RandomForest 分类器中分配它们。

【问题讨论】:

【参考方案1】:

Scikit-learn 确实只使用每棵树的引导样本来计算每个类的概率估计,对吧?

不,它仅使用样本内部分,因此不会给出非常校准的概率输出(我猜这就是论文的建议)。

您可以使用样本外估计来获得更好的概率估计,甚至可以使用当前代码库轻松完成。也许使用校准方法作为后处理(使用袋外样本)会更好。

不管怎样,你要达到的就是默认的。

【讨论】:

以上是关于如何使用整个训练示例来估计 sklearn RandomForest 中的类概率的主要内容,如果未能解决你的问题,请参考以下文章

sklearn Count vectorizer - 如何在以后保存、加载和使用转换单个文本

如何使用 sklearn.pipeline 转换新数据

ValueError:找到暗淡为 3 的数组。预计估计器 <= 2。(Keras,Sklearn)

防止过拟合的方法 预测鸾凤花(sklearn)

如何使用 tensorflow 数据集训练 sklearn 模型?

python(sklearn)中的二维核密度估计如何工作?