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 R Enterpriseでは警告が発行されます。
関数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 R Enterpriseインストレーションおよび管理ガイド』を参照してください。
例4-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
例4-7のリスト
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