gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:01:03 25 4
gpt4 key购买 nike

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

我的问题是我无法删除这些列,因为这个预测器非常重要并且被称为有值(value)的预测器。

此预测变量有 165 个级别,是一个因子。

有什么技巧可以解决这个问题吗?因为我们在谈论电影类型,所以我不知道。

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

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

非常感谢,一切顺利

str(data) 看起来像这样:

'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 ...

最佳答案

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

  1. 切换到另一种算法,例如梯度提升gbm 包。您最多可以处理 1024 个分类级别。如果您的预测器具有相当可区分的参数,您还应该考虑概率方法,例如 naiveBayes
  2. 将您的预测变量转换为虚拟变量,这可以通过使用 matrix.model 来完成。然后,您可以在此矩阵上执行随机森林。
  3. 减少因子中的级别数。好吧,这听起来可能是个愚蠢的建议,但是查看具有如此“薄度”的因素真的相关吗?您是否可以在更广泛的层面上汇总一些模式?

编辑以添加 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

关于R - 随机森林和超过 53 个类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com