R采样绕过randomForest 32因子限制

时间:2012-01-08 00:40:14

标签: r sampling resampling random-forest

我正在尝试解决因子的randomForest包限制为32级。

我在一个因子变量中有一个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. 预测测试集
  5. 重复该过程(a)3(没有替换)或(b)10-15次(更换)。
  6. 取3或10-15个预测值,找出平均值并将其作为最终预测值。
  7. 我很好奇是否有人尝试过这样的事情,或者我违反任何规则(引入偏见等)或者是否有人有任何建议。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我可以推荐两种方式:

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

  2. 第二个可能性是将原始数据集的许多样本替换为。因为如果您在没有替换的情况下拆分数据集,您将在模型中产生偏差。但是,我认为你需要做出超过10-15次分裂才能避免偏见。我不能说多少确切。也许几百或更多。这取决于您的数据集。因为如果100个级别中每个级别的对象数量明显不同,那么在拆分后您将收到大小不同的样本,这会影响模型的预测能力。在这种情况下,应该增加分割数量。