Raret rfe использует lrFuncs, что приводит к [Ошибка в {: задача 1 не выполнена - "rfe ожидает 58 значений важности, но имеет только 48"]

У меня похожая проблема с этим постом, когда я пытаюсь сделать rfe с помощью lrFuncs, Я попробовал их предложения, но они не решили мою проблему. Давайте возьмем в качестве примера набор данных 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))]

Теперь я смотрю на коррелированные переменные и избавляюсь от "дубликатов".

> 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 ответ

Ладно, думаю, я понял это. Я удалил один "уровень" для каждого из фиктивных факторов, а также две переменные, которые не имели дисперсии, и теперь это работает.

Другие вопросы по тегам