6.6 ランダム・フォレスト・モデルの構築
ore.randomForest
関数は、ore.frame
オブジェクト内のデータを分類するためのアンサンブル学習手法を提供します。
関数ore.randomForest
は、データベース・サーバーで並行してツリーを成長させることにより、ランダム・フォレスト・モデルを構築します。これは、多数のデシジョン・ツリーを構築し、個々のツリーのクラスのモードであるクラスを出力します。この関数では、デシジョン・ツリーの一般的な問題であるオーバーフィットが回避されます。
Leo BreimanとAdele Cutlerによって開発されたランダム・フォレスト・アルゴリズムでは、バギングの概念と変数のランダムな選択を組み合せることにより、分散が制御されたデシジョン・ツリーの集合が生成されます。ランダム・フォレスト・アルゴリズムは高い精度を備えていますが、大規模なデータセットについては、パフォーマンスとスケーラビリティが問題になることがあります。
関数ore.randomForest
は、モデルの構築およびスコアリングのために並行して実行されます。パラレル実行は、Oracle R Distribution (ORD)のrandomForest
パッケージを使用している場合にも、オープン・ソースのrandomForest
パッケージ4.6-10を使用している場合にも、発生することがあります。ore.randomForest
およびORDを使用すると、オープン・ソースのパッケージとともにore.randomForest
を使用するよりも、必要なメモリーが少なくなる可能性があります。オープン・ソースのrandomForest
パッケージを使用すると、Oracle Machine Learning for Rでは警告が発行されます。
関数ore.randomForest
は、グローバル・オプションore.parallel
を使用して、採用する並列度を決定します。この関数は、ore.randomForest
オブジェクトを返します。
ore.randomForest
オブジェクトに対するスコアリング・メソッドpredict
の呼出しも、データベース・サーバーで並行して実行されます。cache.model
引数では、予測中にランダム・フォレスト・モデル全体をメモリーにキャッシュするかどうかを指定します。使用可能なメモリーが十分ある場合は、パフォーマンスを向上させるために、cache.model
のデフォルト値であるTRUE
を使用してください。
grabTree
メソッドは、指定されたツリーに関する情報を格納するore.frame
オブジェクトを返します。ore.frame
の各行は、ツリーの1つのノードを表します。
ノート:
関数ore.randomForest
は、並行して実行されている各埋込みRセッションのトレーニング・データのコピーをロードします。大規模なデータセットの場合、これは、使用可能なメモリーの量を超えることがあります。パラレル・プロセスの数および使用可能なメモリーの量を適宜調整することをお薦めします。グローバル・オプションore.parallel
で、パラレル・プロセスの数を指定します。埋込みRの実行プロセスで使用されるメモリーの量を制御する方法の詳細は、『Oracle Machine Learning for Rインストレーションおよび管理ガイド』の埋込みRが使用するメモリーの制御に関する項を参照してください。
例6-7 ore.randomForestの使用方法
# Using the iris dataset
IRIS <- ore.push(iris)
mod <- ore.randomForest(Species~., IRIS)
tree10 <- grabTree(mod, k = 10, labelVar = TRUE)
ans <- predict(mod, IRIS, type="all", supplemental.cols="Species")
table(ans$Species, ans$prediction)
# Using the infert dataset
INFERT <- ore.push(infert)
formula <- case ~ age + parity + education + spontaneous + induced
rfMod <- ore.randomForest(formula, INFERT, ntree=1000, nodesize = 2)
tree <- grabTree(rfMod, k = 500)
rfPred <- predict(rfMod, INFERT, supplemental.cols = "case")
confusion.matrix <- with(rfPred, table(case, prediction))
confusion.matrix
この例のリスト
R> # Using the iris dataset
R> IRIS <- ore.push(iris)
R> mod <- ore.randomForest(Species~., IRIS)
R> tree10 <- grabTree(mod, k = 10, labelVar = TRUE)
R> ans <- predict(mod, IRIS, type="all", supplemental.cols="Species")
R> table(ans$Species, ans$prediction)
setosa versicolor virginica
setosa 50 0 0
versicolor 0 50 0
virginica 0 0 50
# Using the infert dataset
R> INFERT <- ore.push(infert)
R> formula <- case ~ age + parity + education + spontaneous + induced
R>
R> rfMod <- ore.randomForest(formula, INFERT, ntree=1000, nodesize = 2)
R> tree <- grabTree(rfMod, k = 500)
R>
R> rfPred <- predict(rfMod, INFERT, supplemental.cols = "case")
R>
R> confusion.matrix <- with(rfPred, table(case, prediction))
R> confusion.matrix
prediction
case 0 1
0 154 11
1 27 56