4

我正在尝试使用一组 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)

谢谢

4

2 回答 2

0

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

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

尝试使用 na.strings 选项:

read.csv("filename.csv", na.strings=c("", "NA", "NULL"))
于 2013-12-16T11:29:21.790 回答
0

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

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

我建议看看这三个:

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

第 8 页显示了基准测试,显示了 ranger 针对 randomForest 对不断增长的数据大小的性能改进 - 由于运行时的线性增长,ranger 的速度要快得多,而不是 randomForest 的非线性增长,因为树/样本/拆分/特征大小的增加。

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

祝你好运!

于 2021-01-07T23:20:37.770 回答