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