R插入使用lrFuncs导致[错误{:任务1失败 - " rfe期待58个重要值,但只有48"]

时间:2015-12-21 19:22:47

标签: r r-caret rfe

当我尝试rfe使用lrFuncs时,我遇到与this post类似的问题。我尝试了他们的建议,但他们没有解决我的问题。我们以插入符号包中的GermanCredit数据集为例。在此数据集中,所有因素(目标变量Class除外)已经转换为二进制数值变量,因此我们不必担心使用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"

好的,那么我查看没有方差的变量(目标变量Class除外)并删除没有方差的变量(即只有一个唯一值)。

> 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))]

现在我查看相关变量并删除重复&#39;。

> 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))]

如果我现在尝试rfe,我仍会得到同样的错误。

> 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"

我很感激有任何帮助解决这个问题,并理解为什么会出现这种错误。

1 个答案:

答案 0 :(得分:0)

好的,我想我明白了。我删除了一个&#39;级别&#39;对于每个虚拟因子以及没有变化的两个变量,现在它可以工作。