library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)
ランダムフォレストモデルに適合させたいのですが、このエラーが発生します。
Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, :
missing values in object
16個の数値属性でデータフレームを学習し、WINはレベル0 1の要因です。
この質問に対する私の最初の反応は、「誰も」がランダムフォレストが予測子の欠損値を処理しないことを知っているため、あまり研究努力を示さなかったことです。しかし、?randomForest
をチェックする際には、このことについてもっと明確にできることを告白しなければなりません。
(ただし、ドキュメントにリンクされているBreimanの [〜#〜] pdf [〜#〜] は、欠損値はまったく処理されないと明示的に述べています。)
私が見ることができた公式ドキュメントの唯一の明白な手がかりは、na.action
パラメーターのデフォルト値がna.fail
であるということでした。
いずれにせよ、予測変数に欠損値がある場合、(基本的に)2つの選択肢があります。
rpart
は欠損値をうまく処理します)。当然のことながら、randomForest
パッケージにはこれを行うための関数rfImpute
があります。 ?rfImpute
のドキュメントは、その基本的な使用例を示しています。
少数のケースにのみ欠損値がある場合は、na.action = na.omit
を設定して、それらのケースを単にドロップすることもできます。
そしてもちろん、この答えは、あなたの問題が実際に単純に欠損値を持っているという推測の少しです。
欠損値が参考になる可能性がある場合は、欠損値を入力し、(new.vars<-is.na(your_dataset)
を使用して)追加のバイナリ変数を追加し、new.var
がyour_dataset
に追加するには大きすぎる場合はエラーを下げるかどうかを確認します。それを単独で使用し、varImpPlot
で重要な変数を選択してyour_dataset
に追加できます。また、NA
のnew.var <- rowSums(new.vars)
の数をカウントする単一の変数をyour_dataset
に追加することもできます。
欠損変数は、不完全な代入手順だけによるモデルエラーの増加を修正できる可能性のある欠損変数が有益なアカウンティングである場合、オフトピックの答えではありません。
欠損値は有益であり、非ランダムな原因により発生します。これは、社会実験の設定で特に一般的です。
randomForestパッケージの基になっているブライマンのランダムフォレストは、実際には欠損値の処理を予測子で行います。 randomForestパッケージでは、次を設定できます。
na.action = na.roughfix
欠損値の中央値/モードを使用することから始めますが、その後、フォレストを成長させて近接度を計算し、これらの新たに満たされた値などを使用してフォレストを反復および構築します。これはrandomForest documentation(p10 ) 。状態だけ
.... NAは列中央値に置き換えられます....これは、ランダムフォレストによる欠損値の代入の開始点として使用されます。
ブライマンの ホームページ では、もう少し情報が見つかります
missfill = 1,2は、トレーニングセット(1に等しい場合)およびより注意深い置換(2に等しい場合)の欠損値の高速置換を行います。
missfill = 2を指定したmfixrep = kは、トレーニングセットのみでk反復の近接を使用して、より低速ですが、通常はより効果的な置換を行います。 (nprox> 0が必要です)。