0

を使用しようとすると、この投稿と同様の問題が発生します。私は彼らの提案を試みましたが、彼らは私の問題を解決しませんでした. 例として、caret パッケージの GermanCredit データセットを見てみましょう。このデータセットでは、すべての因子 (ターゲット変数 を除く) が既にバイナリ数値変数に変換されているため、 の使用について心配する必要はありません。rfelrFuncsClassmodel.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 を除く) を調べ、分散のない変数 (つまり、一意の値が 1 つだけ) を削除します。

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

この問題を解決し、このエラーが発生する理由を理解するための助けに感謝します。

4

1 に答える 1

0

わかりました、私はそれを理解したと思います。ダミー因子と分散のない2つの変数のそれぞれに対して1つの「レベル」を削除したところ、機能するようになりました。

于 2015-12-21T19:56:23.150 に答える