【问题标题】:Recursive feature elimination (caret) with linear regression, how to disable intercept?带有线性回归的递归特征消除(插入符号),如何禁用拦截?
【发布时间】: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


【解决方案1】:

lmFuncs 是你的线性回归吗?在这种情况下,您可以尝试在没有截距的情况下拟合第二个线性回归,然后应用特征消除函数

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2018-12-05
    • 2018-05-21
    相关资源
    最近更新 更多