R插入符号';s rfe使用lrFuncs导致[在{:任务1失败中出错-“";rfe期望58个重要值,但只有48个”]

R插入符号';s rfe使用lrFuncs导致[在{:任务1失败中出错-“";rfe期望58个重要值,但只有48个”],r,r-caret,rfe,R,R Caret,Rfe,当我尝试使用lrFuncs执行rfe时,我遇到了一个类似的问题。我尝试了他们的建议,但没有解决我的问题。让我们以caret包中的GermanCredit数据集为例。在该数据集中,所有因素(除了目标变量类)已经转换为二进制数值变量,因此我们不必担心使用model.matrix > library(caret) > data(GermanCredit) > GCrfe <- rfe(GermanCredit[,c(1:9,11:62)], GermanCredit[,10],

当我尝试使用
lrFuncs
执行
rfe
时,我遇到了一个类似的问题。我尝试了他们的建议,但没有解决我的问题。让我们以caret包中的GermanCredit数据集为例。在该数据集中,所有因素(除了目标变量
)已经转换为二进制数值变量,因此我们不必担心使用
model.matrix

> library(caret)
> data(GermanCredit)
> GCrfe <- rfe(GermanCredit[,c(1:9,11:62)], GermanCredit[,10], sizes=(1:50), rfeControl=rfeControl(functions=lrFuncs))
Error in { : 
  task 1 failed - "rfe is expecting 61 importance values but only has 48"
>库(插入符号)
>数据(德国信贷)
>GCrfe variableVariance,其中(variableVariance==1)
目的。度假私人。女性。单身
26                     44 
>德国信贷德国信贷Cor diag(Cor)其中(Cor>0.8,arr.ind=T)
行列
其他安装计划。无52 50
其他分期付款计划。银行50 52
>德国信贷GCrfe集合种子(12213)

>索引lrctr GCrfe好的,我想我找到了答案。我删除了每个虚拟因素的一个“级别”,以及两个没有方差的变量,现在它工作了

> variableVariance <- sapply(GermanCredit[-10], function(x) length(unique(x)))
> which(variableVariance==1)
      Purpose.Vacation Personal.Female.Single 
                    26                     44 
> GermanCredit <- GermanCredit[-grep('Purpose.Vacation', names(GermanCredit))]
> GermanCredit <- GermanCredit[-grep('Personal.Female.Single', names(GermanCredit))]
> Cor <- abs(cor(GermanCredit[-10]))
> diag(Cor) <- 0
> which(Cor > 0.8, arr.ind=T)
                           row col
OtherInstallmentPlans.None  52  50
OtherInstallmentPlans.Bank  50  52
> GermanCredit <- GermanCredit[-grep('OtherInstallmentPlans.Bank', names(GermanCredit))]
> GCrfe <- rfe(GermanCredit[,c(1:9,11:59)], GermanCredit[,10], sizes=(1:50), rfeControl=rfeControl(functions=lrFuncs))
Error in { : 
  task 1 failed - "rfe is expecting 58 importance values but only has 48"

    > set.seed(12213)
    > index <- createFolds(GermanCredit$Class, k=10, returnTrain=T)
    > lrCtrl <- rfeControl(functions=lrFuncs, method='repeatedcv', index=index)
    > GCrfe <- rfe(GermanCredit[,c(1:9,11:59)], GermanCredit[,10], sizes=(1:50), rfeControl=lrCtrl)
    Error in { : 
      task 1 failed - "rfe is expecting 58 importance values but only has 48"