【发布时间】:2021-01-09 12:58:25
【问题描述】:
我正在使用 R 包“caret”中的递归特征消除 线性回归适用于我的问题,因此我在我的控制函数中使用了 functions = lmFuncs。 但是我想在没有拦截的情况下再次测试这个设置,这可能吗?
我当前的代码:
control <- rfeControl(functions = lmFuncs
, verbose = FALSE
)
results <- rfe(df_train
, df_train
, rfeControl=control
)
我也想使用自定义函数,但我不知道如何。
非常感谢。
编辑: 在深入研究 caret 包后,我找到了答案。
没有拦截的lmFuncs:
lmFuncs_wo_intercept <- list(
summary = defaultSummary,
fit = function(x, y, first, last, ...) {
tmp <- if(is.data.frame(x)) x else as.data.frame(x, stringsAsFactors = TRUE)
tmp$y <- y
#lm(y~., data = tmp) #old
lm(y~0+., data = tmp) #new
},
pred = function(object, x) {
if(!is.data.frame(x)) x <- as.data.frame(x, stringsAsFactors = TRUE)
predict(object, x)
},
rank = function(object, x, y) {
coefs <- abs(coef(object))
#coefs <- coefs[names(coefs) != "(Intercept)"] # old
coefs[is.na(coefs)] <- 0
vimp <- data.frame(Overall = unname(coefs),
var = names(coefs))
rownames(vimp) <- names(coefs)
vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE]
vimp
},
selectSize = pickSizeBest,
selectVar = pickVars
)
【问题讨论】:
-
如果您对此没有强有力的令人信服的理由(来自科学!),则不包括拦截是一个坏主意。在线性回归中包含截距有很好的理论依据。
标签: r linear-regression r-caret