在 scikit-learn 中运行 Randomforest 的 MemoryError

Posted

技术标签:

【中文标题】在 scikit-learn 中运行 Randomforest 的 MemoryError【英文标题】:MemoryError of running Randomforest in scikit-learn 【发布时间】:2015-06-23 18:34:39 【问题描述】:

我正在关注For Beginners - Bag of Words 中给出的Python 示例。但是,以下代码段会给出类似MemoryError 的错误消息。什么可能导致此错误

forest = forest.fit(train_data_features, train["sentiment"])

Traceback (most recent call last):
File "C:/Users/PycharmProjects/Project3/demo4.py", line 60, in <module>
   forest = forest.fit(train_data_features, train["sentiment"])
File "C:\Users\AppData\Roaming\Python\Python27\site-        
   packages\sklearn\ensemble\forest.py", line 195, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "C:\Users\AppData\Roaming\Python\Python27\site-
   packages\sklearn\utils\validation.py", line 341, in check_array
   array = np.array(array, dtype=dtype, order=order, copy=copy)
MemoryError

【问题讨论】:

【参考方案1】:

MemoryError,顾名思义,表示您的可用内存即将用完。

如果您遵循here 中的示例代码,那么有几件事可以帮助您:

当您不再需要变量时,使用 del 删除变量 (例如,第 62 行之后不需要clean_train_reviews) 在第 42 行之后,只需要 train["sentiment"],其余的 train 可以被丢弃以释放内存 一开始不要同时阅读训练集和测试集。 test 集仅在构建森林后才需要,此时不再需要与火车集相关的任何其他内容。 整个训练部分可以包装在一个返回森林的函数中,该函数将处理此后不再需要的所有引用。

【讨论】:

根据您的建议,我创建了 doTrain() 函数以允许 Python 清理变量。在我运行本教程时,它单独解决了MemoryError。操作系统:Ubuntu 14.04,内存 8G【参考方案2】:

在指定的示例中,词袋包含 5000 个特征;这需要大量内存。因此,一种解决方案是减少特征数量,但这样做可能会影响模型性能。 另一种解决方案是从 32 位 Python 切换到 64 位。

【讨论】:

以上是关于在 scikit-learn 中运行 Randomforest 的 MemoryError的主要内容,如果未能解决你的问题,请参考以下文章

集成学习(Random Forest)——实践

LinearSVC sklearn (scikit-learn) 中 C 的行为

Keras 和 scikit-learn 的 MLP 结果完全不同

逻辑回归-5. scikit-learn中的逻辑回归

如何在 scikit-learn 中计算正确的交叉验证分数?

混淆矩阵中的 Scikit-learn 变化阈值