我正在尝试解决因子的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"
我在争论的是无论是否有替换样品。
我正在考虑:
我很好奇是否有人尝试过这样的事情,或者我违反任何规则(引入偏见等)或者是否有人有任何建议。
注意: 我已经在Stats-Overflow / Cross-Validated上交叉发布了这个问题。
答案 0 :(得分:3)
您还可以将100级变量拆分为4个单独的变量,每个变量有25个级别。这会导致线性模型出现棘手的混叠问题,但您不会担心使用随机森林。
答案 1 :(得分:0)
我可以推荐两种方式:
您可以将100级变量转换为100个二进制变量。它们中的每一个都代表一个原始级别(0 - 假,1 - 真)。因此,您将能够使用整个数据集并制作随机森林模型。但在这种情况下,数据集的内存消耗将增加,您可能需要使用一些额外的软件包来处理大型数据集。
第二个可能性是将原始数据集的许多样本替换为。因为如果您在没有替换的情况下拆分数据集,您将在模型中产生偏差。但是,我认为你需要做出超过10-15次分裂才能避免偏见。我不能说多少确切。也许几百或更多。这取决于您的数据集。因为如果100个级别中每个级别的对象数量明显不同,那么在拆分后您将收到大小不同的样本,这会影响模型的预测能力。在这种情况下,应该增加分割数量。