Существует ли быстрая оценка простой регрессии (линии регрессии только с пересечением и наклоном)?
Этот вопрос относится к процедуре выбора функции машинного обучения.
У меня есть большая матрица возможностей - столбцы - это объекты предметов (строк):
set.seed(1)
features.mat <- matrix(rnorm(10*100),ncol=100)
colnames(features.mat) <- paste("F",1:100,sep="")
rownames(features.mat) <- paste("S",1:10,sep="")
Ответ был измерен для каждого субъекта (S
) в разных условиях (C
) и поэтому выглядит так:
response.df <-
data.frame(S = c(sapply(1:10, function(x) rep(paste("S", x, sep = ""),100))),
C = rep(paste("C", 1:100, sep = ""), 10),
response = rnorm(1000), stringsAsFactors = F)
Таким образом, я сопоставляю предметы вresponse.df
:
match.idx <- match(response.df$S, rownames(features.mat))
Я ищу быстрый способ вычисления одномерной регрессии каждой функции и ответа.
Что-нибудь быстрее этого?
fun <- function(f){
fit <- lm(response.df$response ~ features.mat[match.idx,f])
beta <- coef(summary(fit))
data.frame(feature = colnames(features.mat)[f], effect = beta[2,1],
p.val = beta[2,4], stringsAsFactors = F))
}
res <- do.call(rbind, lapply(1:ncol(features.mat), fun))
Я заинтересован в маргинальном ускорении, то есть в других методах, кроме использования параллельных вычислений черезmclapply
или жеmclapply2
.