【发布时间】:2019-12-29 17:46:19
【问题描述】:
我在 R 中使用不同的线性回归模型。我使用了 DATASET,它有 21263 行和 82 列。
除了使用 R 函数 lmrob 的 MM 估计回归之外,所有回归模型的时间消耗都可以接受。
我等待了 10 多个小时来运行第一个 for 循环 (#Block A),但它不起作用。 “不起作用”是指两天后它可能会给我一个输出。我用较小的DATASET 尝试了这段代码,它有 9568 行,5 列,它在一分钟内运行。
我使用的是标准笔记本电脑。
我的分析步骤如下
上传和缩放数据集,然后使用 k=30 的 k-folds 拆分,因为我想计算 k 拆分中每个变量的系数方差。
您能给我提供任何指南吗?
wdbc = read.csv("train.csv") #critical_temp is the dependent varaible.
wdbcc=as.data.frame(scale(wdbc)) # scaling the variables
### k-folds split ###
set.seed(12345)
k = 30
folds <- createFolds(wdbcc$critical_temp, k = k, list = TRUE, returnTrain = TRUE)
############ Start of MM Regression Model #################
#Block A
lmrob = list()
for (i in 1:k) {
lmrob[[i]] = lmrob(critical_temp~ .,
data = wdbcc[folds[[i]],],setting="KS2014")
}
#Block B
lmrob_coef = list()
lmrob_coef_var = list()
for(j in 1:(lmrob[[1]]$coefficients %>% length())){
for(i in 1:k){
lmrob_coef[[i]] = lmrob[[i]]$coefficients[j]
lmrob_coef_var[[j]] = lmrob_coef %>% unlist() %>% var()
}
}
#Block C
lmrob_var = unlist(lmrob_coef_var)
lmrob_df = cbind(coefficients = lmrob[[1]]$coefficients %>% names() %>% as.data.frame()
, variance = lmrob_var %>% as.data.frame())
colnames(lmrob_df) = c("coefficients", "variance_lmrob")
#Block D
lmrob_var_sum = sum(lmrob_var)
【问题讨论】:
-
这通常很难回答。 “不起作用”到底是什么意思?您是否调查过
lmrob的性能如何随样本数量和预测变量数量而变化?例如,尝试使用随机选择的 1000、2000、3000、... 5000 个响应子集和随机选择的 10、20、30、40、50 个变量子集来拟合模型,并查看时间如何缩放。这将帮助您确定问题是否只是内在缓慢。如果您有一台多核机器,并行化(跨折叠)是一种更快解决问题的简单方法...... -
@BenBolker,“不起作用”,我的意思是它可能会在两天后给我一个输出。我用一个较小的数据集尝试了这个,它运行一段时间。
-
我不明白“以某种方式时间”是什么意思......如果您成功运行了一个较小的示例,您可以编辑您的问题以包含此信息(说它有多大,运行需要多长时间,以及您正在使用的硬件)?
-
@好的,当然。
标签: r machine-learning regression