如何通过逻辑回归消除R递归特征

时间:2017-03-23 18:52:57

标签: r r-caret feature-selection

事实上,有一个类似的问题和答案,但它不起作用。见下文。诀窍在于重写lmFunc

  

"错误{:任务1失败 - "结果没有相同的长度",许多警告:glm.fit:拟合概率数字0或1发生"

故障在哪里?

lmFuncs$fit=function (x, y, first, last, ...) 
{
  tmp <- as.data.frame(x) 
  tmp$y <- y
  glm(y ~ ., data = tmp, family=binomial(link='logit'))
}
ctrl <- rfeControl(functions = lmFuncs,method = 'cv',number=10)
fit.rfe=rfe(df.preds,df.depend, rfeControl=ctrl)

在rfeControl帮助中,据说参数&#39;功能&#39;可以与插入符号的列车功能(caretFuncs)一起使用。它到底意味着什么? 任何细节和例子?谢谢

1 个答案:

答案 0 :(得分:0)

自定义lmFunc时遇到类似的问题。

对于逻辑回归,请确保使用 lr Func,并将大小设置为等于预测变量的数量。这不会导致任何问题。

示例(仅出于功能目的)

library(caret)
#Reproducible data
set.seed(1) 
x <- data.frame(runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10),runif(10))
x$dpen <- sample(c(0,1), replace=TRUE, size=10)
x$dpen <- factor(x$dpen)

#Spliting training set into two parts based on outcome: 80% and 20%
index <- createDataPartition(x$dpen, p=0.8, list=FALSE)
trainSet <- x[ index,]
testSet <- x[-index,]

control <- rfeControl(functions = lrFuncs,
                   method = "cv", #cross validation
                   verbose = FALSE, #prevents copious amounts of output from being produced.
                   )

##RFE
rfe(trainSet[,1:28] #predictor varia, 
    trainSet[,9], 
    sizes = c(1:28) #size of predictor variables, 
    rfeControl = control)