R - 随机森林和超过53个类别

时间:2017-10-24 15:30:56

标签: r random-forest

我知道。 RandomForest无法处理超过53个类别。遗憾的是,我必须分析数据,一列有165个级别。因此,我想使用RandomForest进行分类。

我的问题是我无法移除此列,因为此预测器非常重要并且被称为有价值的预测器。

此预测器有165个级别,是一个因素。

我有什么提示可以解决这个问题吗?既然我们在谈论电影类型,我不知道。

是否有替代大数据包?一个特殊的解决方法?像这样......

切换到Python是没有选择的。我们这里有太多的R脚本。

非常感谢,一切顺利

str(数据)如下所示:

'data.frame':   481696 obs. of  18 variables:
 $ SENDERNR          : int  432 1612 735 721 436 436 1321 721 721 434 ...
 $ SENDER            : Factor w/ 14 levels "ARD Das Erste",..: 6 3 4 9 12 12 10 9 9 7 ...
 $ GEPLANTE_SENDUNG_N: Factor w/ 12563 levels "-- nicht bekannt --",..: 7070 808 5579 9584 4922 4922 12492 1933 9584 4533 ...
 $ U_N_PROGRAMMCODE  : Factor w/ 14 levels "Bühne/Aufführung",..: 9 4 8 4 8 8 12 8 4 2 ...
 $ U_N_PROGRAMMSPARTE: Factor w/ 6 levels "Anderes","Fiction",..: 5 3 2 3 2 2 5 2 3 3 ...
 $ U_N_SENDUNGSFORMAT: Factor w/ 29 levels "Bühne / Aufführung",..: 20 9 19 4 19 19 24 19 4 16 ...
 $ U_N_GENRE         : Factor w/ 163 levels "Action / Abenteuer",..: 119 147 115 4 158 158 163 61 4 84 ...
 $ U_N_PRODUKTIONSART: Factor w/ 5 levels "Eigen-, Co-, Auftragsproduktion, Cofinanzierung",..: 1 1 3 1 3 3 1 3 1 1 ...
 $ U_N_HERKUNFTSLAND : Factor w/ 25 levels "afrikanische Länder",..: 16 16 25 16 15 15 16 25 16 16 ...
 $ GEPLANTE_SENDUNG_V: Factor w/ 12191 levels "-- nicht bekannt --",..: 6932 800 5470 9382 1518 9318 12119 1829 9382 4432 ...
 $ U_V_PROGRAMMCODE  : Factor w/ 13 levels "Bühne/Aufführung",..: 9 4 8 4 8 8 12 8 4 2 ...
 $ U_V_PROGRAMMSPARTE: Factor w/ 6 levels "Anderes","Fiction",..: 5 3 2 3 2 2 5 2 3 3 ...
 $ U_V_SENDUNGSFORMAT: Factor w/ 28 levels "Bühne / Aufführung",..: 20 9 19 4 19 19 24 19 4 16 ...
 $ U_V_GENRE         : Factor w/ 165 levels "Action / Abenteuer",..: 119 148 115 4 160 19 165 61 4 84 ...
 $ U_V_PRODUKTIONSART: Factor w/ 5 levels "Eigen-, Co-, Auftragsproduktion, Cofinanzierung",..: 1 1 3 1 3 3 1 3 1 1 ...
 $ U_V_HERKUNFTSLAND : Factor w/ 25 levels "afrikanische Länder",..: 16 16 25 16 15 9 16 25 16 16 ...
 $ ABGELEHNT         : int  0 0 0 0 0 0 0 0 0 0 ...
 $ AKZEPTIERT        : Factor w/ 2 levels "0","1": 2 1 2 2 2 2 1 2 2 2 ...

2 个答案:

答案 0 :(得分:2)

遇到同样的问题,我可以列出一些提示。

  1. 切换到另一种算法,例如渐变增强 gbm包。您最多可以处理1024个分类级别。如果您的预测变量具有相当大的判别参数,您还应该考虑概率方法,例如naiveBayes
  2. 将您的预测变换为虚拟变量,可以使用matrix.model来完成。然后,您可以在此矩阵上执行随机林。
  3. 减少因子中的级别数。好吧,这可能听起来像是一个愚蠢的建议,但它是否真的与看待这些"瘦弱" ?你有可能在更广泛的层面上汇总一些形式吗?
  4. 编辑添加MODEL.MATRIX示例

    如上所述,这是一个关于如何使用model.matrix将列转换为虚拟变量的示例。

    mydf <- data.frame(var1 = factor(c("A", "A", "A", "B", "B", "C")),
                       var2 = factor(c("X", "Y", "X", "Y", "X", "Z")),
                       target = c(1,1,1,2,2,2))
    dummyMat <- model.matrix(target ~ var1 + var2, mydf, # set contrasts.arg to keep all levels
                             contrasts.arg = list(var1 = contrasts(mydf$var1, contrasts = F), 
                                                 var2 = contrasts(mydf$var2, contrasts = F))) 
    mydf2 <- cbind(mydf, dummyMat[,c(2:ncol(dummyMat)]) # just removing intercept column
    

答案 1 :(得分:1)

使用插入符号包:

body {
background-color: grey;
}