在用于随机森林特征选择的 R randomForest 包中,数据集如何拆分以进行训练和测试?

机器算法验证 r 随机森林 准确性 重要性
2022-04-02 07:07:39

我正在使用randomForest R 包来执行随机森林特征选择。我不明白,在执行 randomForest 函数后,我必须检查重要性字段,并通过均方误差精度降低和基尼纯度降低来研究重要性测量。

例如,通过使用这个 R 代码:

data(iris)
library("randomForest")
set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE,
proximity=TRUE)
print(iris.rf)

它将打印出:

                     MeanDecreaseAccuracy  MeanDecreaseGini
        Sepal.Width  0.007962441             2.625413
        Sepal.Length 0.031901722            10.714741
        Petal.Length 0.304760304            42.104241
        Petal.Width  0.300907912            43.767952

然后,我发现我可以通过 MeanDecreaseAccuracy 或 MeanDecreaseGini 字段对这些特征进行排名,以了解哪些是最重要的。即使我了解该方法的输出,我也无法理解该方法如何获得其结果。

问题是:

  1. 该方法如何计算准确性?
  2. 该方法如何将数据集拆分为训练集和测试集以计算准确度?
3个回答

它不使用单独的训练和测试集。相反,随机森林中的标准准确度估计利用了一个重要特征:装袋或引导聚合。

为了构建一个随机森林,大量的数据子集是通过从完整数据集中进行替换抽样而生成的。一个单独的决策树适合每个引导数据子集,这些树共同形成随机森林。来自完整数据集的每个数据点存在于大约 2/3 的引导数据子集中,而在剩余的 1/3 中不存在。因此,您可以使用 1/3 的不包含点的树来预测它们的值;这些被称为袋外(OOB)估计. 这个过程避免了过度拟合问题(并且可以说为此目的使交叉验证变得多余),因为这些点不存在于用于预测它们的树中。通过对完整数据集中的每个点重复此操作并将 OOB 预测与真实值进行比较,您可以计算随机森林的准确性。

通过在整个数据集中排列该变量的值并估计随机森林的准确度如何变化来计算变量的准确度度量的平均下降(通常推荐)。

Breiman & Cutler 以这种方式解释了 Gini 指标的平均下降(我从这个有用的答案中得到):

每次对变量 m 进行节点拆分时,两个后代节点的基尼杂质标准都小于父节点。将森林中所有树木的每个单独变量的 gini 减少相加得出一个快速变量重要性,这通常与排列重要性度量非常一致。

为了计算准确率的平均下降,randomForest 本身不使用训练集和测试集,它使用了一种称为袋外样本的东西。由于每棵树都是使用引导样本(与替换采样的数据集大小相同的样本)构建的,因此数据集中的记录不用于构建树,这些记录称为袋外记录( OOB) 样本。您在树中运行这些记录并计算它们的准确性(您可以将 OOB 记录视为您的测试集)。为了确定准确度的平均下降,您随机置换 OOB 样本中的一个解释变量,然后在树中重新运行 OOB 样本并重新计算准确度,您看到的准确度下降就是重要性度量所指的内容。

如果您想获得更详细的描述,您可以阅读回答您问题的维基百科文章: https ://en.wikipedia.org/wiki/Random_forest

和这篇文章:这是一篇更详细解释的好文章: https ://www.quora.com/What-is-the-out-of-bag-error-in-random-forests-What-does-it -mean-Whats-a-typical-value-if-any-Why-would-it-be-higher-or-low-than-a-typical-value

但简而言之,只是为了让你开始:

1)随机森林算法生成一组决策树

2)每棵树都在不同的、随机选择的数据子集(约 2/3)上进行训练,并使用不同的、随机选择的特征子集。所以随机森林中的每棵决策树都有不同的测试和训练集(回答你的第二个问题)

3) 对于数据的每个元素 X_i,您可以计算出袋外错误(OOB 错误)。简而言之,您会考虑在不包含 X_i 的集合上训练的 RF 中的所有树。您计算一个 OOB 错误,计算那些未能对 X_i 进行分类的树的百分比。对您获得 OOB 的所有数据求此错误的平均值。准确度 = 1-OOB