提高插入符号模型训练速度(R)

时间:2015-10-02 01:55:34

标签: r performance machine-learning r-caret

我有一个由20个特征和大约300,000个观测值组成的数据集。我正在使用插入符号来训练带有doParallel和四个核心的模型。对于我尝试的方法(rf,nnet,adabag,svmPoly),即使对我的数据进行10%的训练也需要超过8小时。我正在重新采样3次,我的tuneLength是5.我能做些什么来加速这个令人痛苦的缓慢过程吗?有人建议使用底层库可以将我的过程加速到10倍,但在我走这条路之前,我想确保没有其他选择。

3 个答案:

答案 0 :(得分:17)

phiver击中了头部的钉子,但是,对于这种情况,有一些事情需要建议:

  • 确保使用并行处理不会耗尽系统内存。使用 X 工作程序时,您正在内存中创建 X 数据的额外副本。
  • 如果课程不平衡,additional sampling可以提供帮助。下采样可能有助于提高性能并缩短时间。
  • 使用不同的库。 ranger代替randomForestxgboostC5.0代替gbm。你应该意识到,集合方法适合大量的组成模型,并且必然需要一段时间才能适应。
  • 该软件包具有racing-type algorithm用于在更短的时间内调整参数
  • github上的开发版本具有随机搜索方法,用于具有大量调整参数的模型。

最高

答案 1 :(得分:15)

在比较底层模型和使用插入符号时,人们忘记的是插入符号有很多额外的东西。

以你的随机森林为例。所以bootstrap,3号和tuneLength 5。 所以你重新采样3次,并且由于tuneLength,你试图为mtry找到一个好的值。总共运行15个随机森林并比较这些森林以获得最终模型的最佳森林,而如果使用基本随机森林模型则只需1个森林。

此外,您在4核心上并行运行并且随机森林需要所有可用的观察结果,因此您的所有训练观察结果将是内存中的4次。可能没有多少记忆用于训练模型。

我的建议是开始按比例缩小以查看是否可以加快速度,例如将引导数设置为1并将长度调整回默认值3.甚至将traincontrol方法设置为“none”,只是为了得到一个关于模型在最小设置上的速度以及没有重新采样的想法。

答案 2 :(得分:1)

@phiver和@topepo的精彩投入。我将尝试总结并添加一些我从一些SO帖子中收集到的更多信息,这些信息是我为类似问题所做的:

  • 是的,并行处理需要更多时间,内存更少。凭借8核和64GB RAM,经验法则最多可以使用5-6名工作人员。
  • @ topepo关于插入符号预处理here的页面非常棒。它是逐步指导的,有助于取代预处理的手工工作,如虚拟变量,删除多线性/线性组合变量和转换。
  • randomForest和其他模型变得非常慢的原因之一是分类变量中的因子数量。如果可能,建议使用俱乐部因子或转换为序数/数字转换。
  • 尝试使用插入符号中的Tunegrid功能来充分利用整体模型。从最小的mtry / ntree值开始,获取数据样本,并了解它在提高准确度方面的效果。
  • 我发现this SO页面在主要建议使用parRF时非常有用。通过用parRF替换RF,我的数据集没有太大改进,但你可以尝试一下。其他建议是使用data.table而不是数据帧,并使用预测器/响应数据而不是公式。相信我,它大大提高了速度(但有一点需要注意,预测器/响应数据的性能(提供x = X,y = Y data.tables)似乎也以某种方式提高了预测准确性并改变了变量重要性表使用公式(Y~。)时,因子分解。