4

我正在尝试解决因素的 32 个级别的 randomForest 包限制。

我在一个因子变量中有一个包含 100 个级别的数据集。

我编写了以下代码,以查看使用带替换的采样会是什么样子,以及需要多少次尝试才能选择特定百分比的级别。

sampAll <- c()
nums1 <- seq(1,102,1)
for(i in 1:20){
    samp1 <- sample(nums1, 32)
    sampAll <- unique(cbind(sampAll, samp1))
    outSamp1 <- nums1[-(sampAll[,1:ncol(sampAll)])]
    print(paste(i, " | Remaining: ",length(outSamp1)/102,sep=""))
    flush.console()
}

[1] "1 | Remaining: 0.686274509803922"
[1] "2 | Remaining: 0.490196078431373"
[1] "3 | Remaining: 0.333333333333333"
[1] "4 | Remaining: 0.254901960784314"
[1] "5 | Remaining: 0.215686274509804"
[1] "6 | Remaining: 0.147058823529412"
[1] "7 | Remaining: 0.117647058823529"
[1] "8 | Remaining: 0.0980392156862745"
[1] "9 | Remaining: 0.0784313725490196"
[1] "10 | Remaining: 0.0784313725490196"
[1] "11 | Remaining: 0.0490196078431373"
[1] "12 | Remaining: 0.0294117647058824"
[1] "13 | Remaining: 0.0196078431372549"
[1] "14 | Remaining: 0.00980392156862745"
[1] "15 | Remaining: 0.00980392156862745"
[1] "16 | Remaining: 0.00980392156862745"
[1] "17 | Remaining: 0.00980392156862745"
[1] "18 | Remaining: 0"
[1] "19 | Remaining: 0"
[1] "20 | Remaining: 0"

我正在争论的是是否需要更换样品。

我在想:

  1. 获取 100 个因子中的 32 个样本,
  2. 使用这些行来运行 randomForest,
  3. 用 randomForest 预测测试集和
  4. 重复此过程 (a) 3(不更换)或 (b) 10-15 次(更换)。
  5. 取 3 或 10-15 个预测值,找到平均值并将其用作最终预测值。

我很好奇是否有人尝试过这样的事情,或者我是否违反了任何规则(引入偏见等),或者是否有人有任何建议。

注意:我也在 Stats-Overflow / Cross-Validated 上交叉发布了这个问题。

4

2 回答 2

3

您还可以将 100 级变量拆分为 4 个单独的变量,每个变量有 25 个级别。这会导致线性模型出现棘手的混叠问题,但您不必担心随机森林的问题。

于 2012-01-08T04:01:16.333 回答
0

我可以推荐两种方法:

  1. 您可以将 100 级变量转换为 100 个二进制变量。它们中的每一个都将代表一个原始级别(0 - 假,1 - 真)。因此,您将能够使用整个数据集并制作随机森林模型。但在这种情况下,数据集的内存消耗会增加,您可能需要使用一些额外的包来处理庞大的数据集。

  2. 第二种可能性是用替换来制作原始数据集的许多样本。因为如果您将数据集拆分而不进行替换,您将在模型中产生偏差。但尽管如此,我认为您需要进行 10-15 次以上的拆分以避免偏见。我不能说到底有多少。也许大约数百或更多。这取决于您的数据集。因为如果 100 个级别中每个级别的对象数量显着不同,那么拆分后您将收到大小显着不同的样本,这会影响模型的预测能力。在这种情况下,应该增加拆分的数量。

于 2012-01-08T06:22:50.880 回答