具有线性回归的递归特征消除插入符号,如何禁用拦截?

问题描述

我正在使用R包'插入符'中的递归功能消除 线性回归可以很好地解决我的问题,因此在我使用函数= lmFuncs插入我的控制函数之前。 但是我想在没有拦截的情况下再次测试此设置,这可能吗?

我当前的代码

control <- rfeControl(functions = lmFuncs,verbose = FALSE
)

results <- rfe(df_train,df_train,rfeControl=control                           
)

我也想使用自定义函数,但是我不知道怎么做。

非常感谢。

编辑: 在深入研究插入符号包后,我找到了答案。

没有拦截的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
)

解决方法

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