【问题标题】:how to make RandomForestClassifier faster?如何使 RandomForestClassifier 更快?
【发布时间】:2017-09-24 05:33:12
【问题描述】:

我正在尝试从kaggle 网站实现词袋模型,其中包含大约 1M 原始数据的 Twitter 情绪数据。我已经清理了它,但是在最后一部分中,当我将特征向量和情绪应用于随机森林分类器时,它花费了很多时间。这是我的代码...

from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100,verbose=3)
forest = forest.fit( train_data_features, train["Sentiment"] )

train_data_features 是 1048575x5000 稀疏矩阵。我尝试将其转换为数组,但这样做表示内存错误。

我在哪里做错了?有人可以建议我一些资源或其他方法来更快地做到这一点吗?我在机器学习方面绝对是新手,没有太多的编程背景,所以一些指南会适应。

在此先感谢您

【问题讨论】:

  • 您几乎可以肯定不需要每次都在 1M 行上进行大部分工作培训。这里有一个建议:fit()/predict()/score(on hold-out test set) 你的问题训练(拟合)只有 50,000 行,从你的 1M 中随机抽样。然后对 100,000 行执行相同的操作。然后是 150,000 行,等等。我敢打赌,你会看到测试分数开始收敛到明显少于 1M 行
  • 即使您的问题确实在您将数据添加到 1M 行时显示出性能改进,上面的练习允许您估计运行 1M 行需要多长时间。然后你知道它是“我需要在一夜之间运行”问题还是“这需要完全不可行的时间”问题。如果这是“一夜之间运行”的问题,我仍然建议您对一小部分数据进行大部分编码/迭代,然后当您拥有所需的代码并且想要重新运行所有数据时,只需重新运行一夜之间的所有数据
  • 最后的建议 - 5000 列是巨大的。尝试从谷歌搜索“sklearn 降维”中找到的一些方法。
  • @MaxPower 谢谢你的帮助.....它对我有用......

标签: python-3.x pandas machine-learning sentiment-analysis


【解决方案1】:

实际上,解决方案非常简单:获得强大的机器并并行运行。默认情况下,RandomForestClassifier 使用单个线程,但由于它是完全独立的模型的集合,您可以并行训练这 100 个发束中的每一个。设置好了

forest = RandomForestClassifier(n_estimators = 100,verbose=3,n_jobs=-1)

使用你所有的核心。您还可以限制max_depth,这将加快速度(最终您可能需要这种方式,因为 RF 可能会严重过度拟合而没有任何深度限制)。

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2016-10-03
    相关资源
    最近更新 更多