1. ホーム
  2. r

[解決済み] rfImpute後の予測値の取得

2022-02-27 01:56:15

質問

randomForestパッケージを使ってモデリングをしています。その rfImpute 関数は、モデルフィットの際に欠損値を処理するのに非常に優れています。しかし 予測 を、欠損値を持つ新しいケースに適用できますか?

の例を参考にしています。 ?rfImpute .

iris.na <- iris

set.seed(111)
## artificially drop some data values.
for (i in 1:4) iris.na[sample(150, sample(20)), i] <- NA

## impute the dropped values
set.seed(222)
iris.imputed <- rfImpute(Species ~ ., iris.na)

## fit the model
set.seed(333)
iris.rf <- randomForest(Species ~ ., iris.imputed)

# now try to predict for a case where a variable is missing
> predict(iris.rf, iris.na[148, , drop=FALSE])
[1] <NA>
Levels: setosa versicolor virginica

解決方法は?

それから4年、1社...。

rxDForest は、Microsoft R Server/Client に付属する関数で、欠損値を持つケースの予測値を得ることができます。これは rxDForest と同じコードを使用しています。 rxDTree は、単一の決定木のフィッティングのために、後者のサロゲート変数を作成する機能を利用しています。

iris.na <- iris

set.seed(111)
## artificially drop some data values.
for (i in 1:4) iris.na[sample(150, sample(20)), i] <- NA


library(RevoScaleR)

# rxDForest doesn't support dot-notation for formulas
iris.rxf <- rxDForest(Species ~ Petal.Length + Petal.Width + Sepal.Length + Sepal.Width,
    data=iris.na, nTree=100)

pred <- rxPredict(iris.rxf, iris.na)  # not predict()

table(pred)
#    setosa versicolor  virginica 
#        50         48         52 

(@alex keilによる回答は独創的ではありますが、予測を呼び出すたびにモデルを再フィットする必要があるため、実稼働環境ではあまり実用的ではありません。それなりの大きさのデータセットであれば、数分から数時間かかることもある)