无法处理超过32个类别的分类预测变量

时间:2013-11-06 00:37:41

标签: r random-forest

我正在尝试使用一组1664(列)x 208(行)的数据运行随机林。我的因变量是保留时间(秒),我的自变量是1664种不同的描述符,所有不同的化合物。所有描述符都给出一个值,而不是分类变量。我正在尝试为随机森林进行回归。但是,当我尝试使用以下代码运行它时: -

urine.rf <- randomForest(RT..seconds.~., data=urine, importance=TRUE)

我收到消息: -

randomForest.default(m,y,...)中的错误:   无法处理超过32个类别的分类预测变量。

我在网上看到你可以通过构建某种形式的model.matrix来解决这个问题。我对R来说是全新的,并没有得到关于如何做到这一点的最微弱的线索。我已经尝试在我的csv文件中格式化我的单元格,以便所有单元格都是数字,但由于某种原因,它仍然作为分类预测变量。我该如何解决这个问题?

RT (seconds)    1_MW    2_AMW   3_Sv    4_Se    5_Sp    6_Ss    
46.58353    155.18  7.76    11.8    20.61   12.21   32.67   0.59
46.79514    145.29  5.01    14.76   28.37   16.11   21  0.51
48.18893    169.21  7.36    13.4    23.49   13.97   34.17   0.58
49.94328    169.21  7.36    13.4    23.49   13.97   34.17   0.58
50.81087    187.33  5.51    17.87   33.59   19.32   30.17   0.53
51.3834 104.2   4.96    10.39   20.67   11.41   16.5    0.49
51.51799    125.17  8.94    7.41    14.81   8.3 27.92   0.53
52.67208    117.13  7.81    8.2 15.73   8.45    29.33   0.55
52.79043    137.18  7.22    11.59   19.12   12.13   26.33   0.61
52.79046    161.23  6.2 13.71   26.27   14.7    33.5    0.53

这就是我正在使用的数据库。我希望RT成为我的Y变量,其他一切(1_MW和之后的所有其他)都是我的自变量(有1664)

由于

2 个答案:

答案 0 :(得分:0)

所以,只是为了完成这个。我有完全相同的问题,我花了10分钟才发现有隐藏的评论。因此:

解决方案可能是空值被解释为字符

尝试使用na.strings选项:

read.csv("filename.csv", na.strings=c("", "NA", "NULL"))

答案 1 :(得分:0)

请注意,使用 model.matrix 的 one-hot 编码可能会创建非常稀疏的数据集。

另一种选择是实际使用专为高维/大容量数据集构建的最新软件包。他们使用低级语言(C++ 和/或 Java)运行代码,并且在某些情况下使用并行化来加快处理速度。

我建议看看这三个:

ranger(使用 C++ 编译器)randomForestSRC(使用 C++ 编译器)h2o(Java 编译器 - 需要 Java 8 或更高版本)此外,这里还有一些额外的阅读材料,可以让您更多地了解选择哪个包:{{3} }

第 8 页显示的基准测试显示了 Ranger 与 randomForest 在不断增长的数据大小下的性能改进 - 由于运行时的线性增长,而不是 randomForest 的非线性增长,ranger 的速度更快,因为树/样本/分割/特征大小不断增长。

>

除此之外,使用可变重要性将特征尺寸减少到信息最多的特征尺寸将提高模型性能/准确性。

祝你好运!