ランダムフォレストモデルの欠落しているカテゴリカル予測子変数を推定する方法は?


8

ランダムフォレストを構築するために使用しているx、yデータのセットがあります。xデータは、いくつかのNAを含む値のベクトルです。そのためrfImpute、欠けているデータを処理してランダムフォレストを作成するために使用します。今、私は新しい目に見えない観測x(NAあり)を持っており、yを予測したいと思います。すでに成長したランダムフォレストを使用できるように、欠損値をどのように代入するのですか?rfImputeこの関数は、xとyを必要としているようです。予測のためにxしかありません。

私の質問はこの質問に似ています(ただし異なります)。たとえば、同じ虹彩データセットを使用できます。私が参照する質問の回答のコードを正しく解釈した場合iris.na[148, , drop=FALSE]、ステートメントのコードiris.na2 = rbind(iris.imputed, iris.na[148, , drop=FALSE])Species(Y値)を含む新しいデータを表します。私の問題では、私は知らないでしょう— Speciesランダムフォレストを使用してそれを予測したいと思います。4つの独立変数がありますが、一部はNA特定の行のものである可能性があります。類推を続けるために、私が4つの変数のうち3つを持っていると想像してください(1つは欠落しています)。私はその価値を主張したいと思います。それから私は知らない種を予測したいと思います。

私がイラストを追加すべきだというガンのコメントに応えて、虹彩データセットの観点から説明させてください。花に関する次のデータがあるとします。私はそれが、、であることを知っていますがSepal.LengthSepal.WidthPetal.LengthはありませんPetal.Width。を代入してPetal.Widthから、RFモデル内でこれらの4つの値を使用してを予測したいと思いますSpecies


何もないと言ってるの?xとyのみでモデルを構築し、xもyもない観測のyを予測したいとします。あれは正しいですか?
ガン-モニカの復活

ガン、私は何かを持っています。新しいx観測がありますが、y観測はありません。新しいxに基づいてyを予測したい。しかし、xベクトルには、いくつかのNA値が含まれています。ありがとう。
rmacey 2015

なるほど、xは予測変数の集合であり、他の変数はありません。そうですか?Qを更新したり(メインページにぶつかる)、小さな説明的な例を含めたりすることができます。注意点:このQは、「Rをどのように使用しますか?」&/または「これを行うのに役立つコードは何ですか?」、これはプログラムと見なされ、閉じることができます。あなたは、これはRFについての質問があることは明らかであることを確認する必要があります、ではない/ R.ワットRFを行う方法
復活モニカ- GUNG

LOL ...私がそれを単純なスタック交換に置いたとき、彼らは私がそれをここに移動することを提案しました。これは、実際にはrfImputeまたは同様のものです。
rmacey

「プレーンスタック交換」とは、スタックオーバーフローを意味しますか?あなたの質問がコードの使用方法である場合、そこに行きます。それが基礎となる統計を理解する方法であるなら、それはここに行きます。(もちろん、両方のトピックで話題から外れているQもあります。)ここで、あなたのQが必ずしも話題から外れているとは思いません。私はあなたがそれをどのように表現するかに注意するようにあなたに通知しているだけなので、それがコーディングの質問ではなく統計的な質問であることは明らかです。
ガン-モニカの復活

回答:


4

私は教師なしの補完方法が必要だと思います。これは、代入にターゲット値を使用しないものです。予測特徴ベクトルが少ない場合は、データ構造を明らかにするのが難しい場合があります。代わりに、予測を既に代入されたトレーニング特徴ベクトルと混合し、この構造を使用してもう一度代入することができます。この手順は、独立性の前提に違反する可能性があることに注意してください。したがって、深刻な過剰適合をチェックするために、手順全体を外側の相互検証にラップします。

この質問へのコメントからmissForestについて学んだところです。missForestがうまくやっているようです。アイリスデータで問題をシミュレートしました。(外部相互検証なし)

rm(list=ls())
data("iris")
set.seed(1234)
n.train = 100
train.index = sample(nrow(iris),n.train)
feature.train = as.matrix(iris[ train.index,1:4])
feature.test  = as.matrix(iris[-train.index,1:4])


#simulate 40 NAs in train
n.NAs = 40
NA.index = sample(length(feature.train),n.NAs)
NA.feature.train = feature.train; NA.feature.train[NA.index] = NA

#imputing 40 NAs unsupervised
library(missForest)
imp.feature.train = missForest(NA.feature.train)$ximp
#check how well imputation went, seems promsing for this data set
plot(    feature.train[NA.index],xlab="true value",
     imp.feature.train[NA.index],ylab="imp  value",)

#simulate random NAs in feature test
feature.test[sample(length(feature.test),20)] = NA

#mix feature.test with imp.feature.train
nrow.test = nrow(feature.test)
mix.feature = rbind(feature.test,imp.feature.train)
imp.feature.test = missForest(mix.feature)$ximp[1:nrow.test,]

#train RF and predict
library(randomForest)
rf = randomForest(imp.feature.train,iris$Species[train.index])
pred.test = predict(rf,imp.feature.test)
table(pred.test, iris$Species[-train.index])

Printing...
-----------------
pred.test    setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         20         2
  virginica       0          1        15
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.