我有一个大约20k行和160列的数据集。经过一些简单的预处理,如近零方差和去除具有大量NA的变量,我只保留了56列作为特征。现在,我想用随机森林方法对这些数据进行训练模型。但大约一个小时后它没有回答,我就中止了。
是否有任何代码可以预测根据我的PC配置训练模型所需的时间? 通常,对具有此维度的数据集执行随机林或rpart训练方法需要多少费用?
答案 0 :(得分:2)
尝试为randomForest
功能设置一些参数。从少量树(ntree
)开始和/或在每个分割(mtry
)和/或少量"叶子和#34中绘制少量变量; (maxnodes
)。然后更改参数以提高模型的复杂性和准确性。这也将有助于您的计算机的计算速度,因为你从小开始,慢慢增加参数,看看它们对性能的影响。
注意,如果您使用randomForest
进行功能选择(这就是我使用它的原因),请使用大量ntree
,mtry
,并且maxnodes
的数量较少,因此您可以提取有关单变量的良好信息。
答案 1 :(得分:1)
您可以使用github GuessCompx
库来预测randomForest算法的经验复杂度和计算时间。让我们创建一个与您的大小相同的伪数据:
df = data.frame(matrix(rpois(20000*56, 3), ncol=56))
然后,加载库;
library(GuessCompx) # get it by running: install_github("agenis/GuessCompx")
library(randomForest)
运行测试,您会得到 N * log(N)时间复杂度:
CompEst(df, randomForest)
#### $`TIME COMPLEXITY RESULTS`$best.model
#### [1] "NLOGN"
#### $`TIME COMPLEXITY RESULTS`$computation.time.on.full.dataset
#### [1] "3M 30.31S"
#### $`MEMORY COMPLEXITY RESULTS`
#### $`MEMORY COMPLEXITY RESULTS`$best.model
#### [1] "QUADRATIC"
#### $`MEMORY COMPLEXITY RESULTS`$memory.usage.on.full.dataset
#### [1] "14033 Mb"
时间似乎不是问题,但是更多的内存限制(理论上为14Go),因为它达到了系统的极限,并且妨碍了运行,并可能大大减慢算法的速度(预计总共需要3分钟)时间实际上超出了内存需求,我花了12分钟)?尝试尽可能增加memory.limits。