2015-12-21 7 views
0

У меня аналогичная проблема с this post, когда я пытаюсь сделать rfe с помощью lrFuncs. Я пробовал свои предложения, но они не разрешили мою проблему. В качестве примера возьмем набор данных GermanCredit в пакете Caret. В этом наборе данных все факторы (кроме целевой переменной Class) уже были преобразованы в двоичные числовые переменные, поэтому нам не нужно беспокоиться об использовании model.matrix.R CARET, используя lrFuncs полученную в [Ошибке в {: задача-не удался - «RFE ожидает 58 значений важности, но имеет только 48»]

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

Хорошо так, то я смотреть на переменных, не дисперсии (для переменного класса целевого исключения) и удалить переменные без каких-либо отклонений (т.е.. Только одно уникального значения).

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

Буду благодарен за любую помощь в решении этой проблемы и понимание причины возникновения этой ошибки.

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^