是否有确定随机森林的正确 sampSize 的公式或规则?

机器算法验证 r 随机森林
2022-02-11 20:40:03

我正在玩 randomForest 并发现通常增加 sampSize 会导致更好的性能。是否有规则/公式/等建议最佳 sampSize 应该是什么,还是反复试验?我猜是另一种表达方式;sampSize 太小或太大(过度拟合?)的风险是什么?


这个问题是指randomForest包中随机森林的R实现。该函数randomForest有一个参数sampSize,在文档中描述为

要绘制的样本大小。对于分类,如果sampsize是一个长度为层数的向量,那么抽样是按层分层的,sampsize的元素表示要从层中抽取的数量。

3个回答

一般来说,随机森林的样本量可以控制所涉及的“随机程度”,因此可以作为调整偏差-方差权衡的一种方式。增加样本量会导致“不那么随机”的森林,因此有过度拟合的趋势。减少样本量会增加森林中单棵树的变化,防止过度拟合,但通常会以牺牲模型性能为代价。一个有用的副作用是,较小的样本量会减少训练模型所需的时间。

最佳样本大小的通常经验法则是“引导样本”,即大小与原始数据集相同的样​​本,但选择时进行了替换,因此某些行未被选择,而其他行被选择多次。这通常提供近乎最佳的性能,并且是标准 R 实现中的默认设置。但是,您可能会在实际应用中发现调整样本大小可以提高性能。如有疑问,请使用交叉验证选择适当的样本量(和其他模型参数)。

我用一些随机参数设置在一夜之间运行了 4500 个随机森林:

Ysignal = x1^2+sin(x2*pi) + x3 * x4 + x5 任何x独立于正态分布的样本的回归问题,sd=1,mean=1

Ytotal = Ysignal + Yerror

在哪里Yerror = rnorm(n.observations,sd=sd(Ysignal))*noise.factor

theoretical.explainable.variance"TEV" = var(Ysignal= / var(Ytotal)

randomForest.performance = explained.variance(OOB cross-validation) / TEV

数据集是从回归问题中采样的,添加的噪声 是1 到 20n.obs之间的 1000 到 5000 之间的随机数 n.extra.dummy.variables

ntree总是 1000

sample_replacement总是true

mtry是 5 到 25,限制n.obs noise.factor在 0 到 9 之间

samplesize.ratio一个介于 10% 和 100% 之间的随机数,每个 bootstrap 的比例大小

所有模型都接受过类似的训练rfo = randomForest(x=X, y=Ytotal, <more args>)

randomForest.performance它能够解释TEV通常当小于 50%时samplesize降低而高于 50% 时降低的最高比例TEVTEV

因此,如果您的报告(例如,OOB-CV 解释了 15% 的方差),并且这对您来说是可接受的模型精度,那么您可能可以通过将观察次数randomForest-modelfit降低到三分之一来稍微提高性能,给定.sampsizentree > 1000

士气:对于非常嘈杂的数据,最好对树进行去相关而不是通过生长最大尺寸的树来降低偏差。

为了使随机森林在新数据中的工作与在训练数据中一样好,所需的样本量是巨大的,通常是候选特征数量的 200 倍。这里