比较随机森林的折叠间的 CV 预测

机器算法验证 交叉验证 随机森林
2022-03-26 06:40:05

我已经实施了 k 折交叉验证来评估随机森林的分类性能。我想知道的是:折叠的预测值是否可以直接比较?

例如,当我在保留折叠 1 上生成预测并获得一个观察值的预测值 0.84 时,我是否可以比折叠 2 中的观察值 0.80 对该预测更有信心?

最终的问题是,是否适合堆叠我的 k-folds 的所有预测,然后从堆叠的预测中计算模型性能(例如 ROC)。这在具有少量正数的高度不平衡数据集的情况下可能很有用,因为每个折叠将具有更少的正数,因此 ROC 将在折叠之间具有相对较高的方差。

这篇关于 RF的帖子很有帮助,但没有直接解决这个问题。

附加信息:我对具有高度不平衡和小正数集的案例特别感兴趣。这不会改变问题,但确实突出了跨折叠结果比较的潜在问题。

3个回答

对于每个折叠,您都在构建一个分类器,对观察结果进行预测。每个折叠内的分类器具有略微不同的训练集和不同的权重,但它们都试图估计相同的基础模型。所以是的,你可以结合预测。如果您对一个观察结果有多个预测,您可以取几倍的平均预测,或者对预测进行加权,以便更准确的模型比不太准确的模型具有更大的影响。这适用于任何“集成学习”系统。不同观察的预测应该在相同的范围内进行(例如从-1到+1或0到+1),所以我想不出任何理由不将它们结合起来。

在与其他一些人讨论过这个问题后,我认为从技术上讲,无法直接比较不同折叠的预测概率,但实际上,在大多数情况下,您可以。

如果你有一个小的、潜在的多样化的积极集合,你将无法做到这一点。那么当你把正片分成k个折叠时,每个正片的折叠可能不是那么相似,所以k-1个折叠实际上会有所不同;这将使构成每个森林的树木更加不同 - 这似乎表明您无法直接比较折叠之间的预测概率。

现在在实践中,如果你有一个大小合适的正数集,那么当你将这些正数拆分为折叠时,构成折叠的每个 k-1 组折叠将非常相似,因此森林最终不会那么不同(假设你有足够的树)。因此,在实践中,预测的概率最终将接近直接可比。

我不确定您是否可以结合 k 折的所有预测。

但是,您可以对 K 折进行分层,以便在每个折中具有相似数量的正数,并且 ROC 性能不会因数据集不平衡而变化。

在 python 中,scikit learn 中的这个包运行良好:http ://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedShuffleSplit.html#sklearn.cross_validation.StratifiedShuffleSplit

如果你真的有太少的正面实例,你可以使用引导而不是交叉验证(这篇论文解释得很好:http ://scitation.aip.org/content/aapm/journal/medphys/35/4/10.1118 /1.2868757 )