【问题标题】:Random Forest with R. cannot allocate vector of size 7.5 Gb带有 R. 的随机森林无法分配大小为 7.5 Gb 的向量
【发布时间】:2018-08-16 03:19:58
【问题描述】:

我有一个数据集 (df),其中包含 10000 条推文和 2 个观察值(正文和标签);前 4000 条推文被标记(正面或负面),我想用它作为训练集来预测其余推文的标签,测试,根据文本正文。 我想使用随机森林算法来预测(插入符号包)和交叉验证以确定准确性。 我使用了这个脚本:

training <- subset(df[1:4000,])
testing  <- subset(df[4001:10000,])

fitControl1 <- trainControl(method = "repeatedcv",
                       number = 10,
                       repeats = 10)

rfFit <- train(training$label~ training$body, data = training, 
             method = "rf", 
             trControl = fitControl,
             verbose = FALSE)

但这是来自控制台的错误

Error: cannot allocate vector of size 7.5 Gb

我该如何解决? 提前致谢

【问题讨论】:

标签: r machine-learning random-forest


【解决方案1】:

由于您将完整的推文用作一个变量(类字符),因此在训练模型时,R 将首先将字符向量转换为因子(因为统计模型可以围绕数字矩阵而不是字符构建)并将每条推文转换为一个因素需要如此巨大的空间,请参阅blog。 此外,这是 NLP 的一个问题。在构建模型之前,我建议您首先标记数据集并制作一个稀疏矩阵。

【讨论】:

    【解决方案2】:

    随机森林将尝试在变量或特征之间的可能性树中分配您的观察结果。但是你这样做的方式有些奇怪。如果推文的正文有一个变量(推文的字符串),第二个是标签。没有执行分类的实际特征,随机森林会尝试记忆(过拟合)训练集。随机森林算法创建了几棵可能性树来创建一个复合模型,这会产生巨大的可能性空间,特别是如果您没有从推文语料库中提取特征(我认为您正在这样做),并且模型会表现得很糟糕。

    您需要做的是对推文的正文进行标记,以创建一个模型来提取语料库的特征。我推荐sklearn documentation 用于提取文本特征。不懂python也没关系,解释很明确,你会找到在R中执行操作的工具。

    【讨论】:

      【解决方案3】:

      随机森林算法会破坏你的记忆,尤其是当你没有太多记忆的时候。 R 可以使用磁盘作为内存,所以这可能会对你有所帮助。

      如果你检查

      memory.limit()
      

      它会显示你的内存大小。但是你也可以使用这个命令来设置它。

      memory.limit(100000)
      

      你去吧,现在你有大约 100GB 的内存。其中一堆在你的硬盘上。

      如果你没有太多的硬盘空间......好吧,这对你没有帮助。

      【讨论】:

        猜你喜欢
        • 2016-12-23
        • 1970-01-01
        • 2014-02-18
        • 2021-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-02
        相关资源
        最近更新 更多