首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高插入符号(R)中的模型训练速度

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

Stack Overflow用户
提问于 2015-10-02 09:55:34
回答 3查看 11.2K关注 0票数 12

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-05 18:46:30

@phiver一针见血,但是,对于这种情况,有一些建议:

  • 确保您不会因为使用并行处理而耗尽系统内存。使用X工作线程时,您将在内存中创建X个额外的数据副本。对于类不平衡的
  • additional sampling可以提供帮助。向下采样可能有助于提高性能并减少所需时间。
  • 使用不同的库。用ranger代替randomForest,用xgboostC5.0代替gbm。你应该意识到,集成方法正在拟合大量的组成模型,并且需要一段时间才能拟合。
  • 这个包有一个用于在更少的时间内调整参数的racing-type algorithm
  • ,github上的开发版本具有随机搜索方法,可以对具有大量调整参数的模型进行搜索。

最大值

票数 18
EN

Stack Overflow用户

发布于 2015-10-02 21:09:08

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

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

此外,你在4个内核上并行运行,随机森林需要所有可用的观察数据,因此所有训练观察数据将在内存中存储4次。训练模型的内存可能不多了。

我的建议是开始缩小规模,看看是否可以加快速度,比如将bootstrap数量设置为1,并将长度调回到默认的3。或者甚至将培训控制方法设置为"none",只是为了了解模型在最小设置下的速度,并且不进行重采样。

票数 16
EN

Stack Overflow用户

发布于 2016-01-08 14:20:26

@phiver和@topepo的出色输入。我将尝试总结并添加更多的观点,这些观点是我在搜索类似问题的一些SO帖子中收集的:

  • 是的,并行处理需要更多的时间和更少的内存。使用8个内核和64 to时,经验法则可能是最多使用5-6个工作进程。
  • @topepo关于插入符号预处理here的页面非常棒。它是逐步指导的,有助于取代预处理的手工工作,如虚拟变量,删除多共线/linear组合变量和变换。
  • randomForest和其他模型变得非常慢的原因之一是因为分类变量中的因素数量太多。如果可能的话,建议使用俱乐部因子或转换为顺序/数字转换。
  • 尝试在整体模型中最充分地使用插入符号中的Tunegrid功能。从一个数据样本的mtry/ntree的最小值开始,看看它在提高准确性方面是如何工作的。
  • 我发现this页面是非常有用的,parRF是主要推荐的页面。通过用parRF替换RF,我并没有在我的数据集中做太多改进,但是你可以尝试一下。其他建议是使用data.table而不是数据帧,使用预测/响应数据而不是公式。它极大地提高了速度,相信我(但有一个警告,预测/响应数据的性能(提供x=X,y=Y data.tables)似乎也以某种方式提高了预测精度,并在使用公式(Y~.)时改变了变量重要表。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32899418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档