7.6 デシジョン・ツリー
ore.odmDT関数は、条件付き確率に基づいたデータベース内デシジョン・ツリー・アルゴリズムを使用します。
               
デシジョン・ツリー・モデルは分類モデルです。デシジョン・ツリーはルールを生成します。ルールは、ユーザーが容易に理解でき、レコード・セットを識別するためにデータベース内で使用できる条件文です。
デシジョン・ツリーは、一連の質問を問うことによってターゲット値を予測します。各段階で問われる質問はそれぞれ、直前の質問に対する回答によって決まります。最終的に特定のターゲット値を一意に識別できるような質問を重ねていきます。図形的には、このプロセスがツリー構造を形成します。
デシジョン・ツリー・アルゴリズムは、トレーニング・プロセスにおいて、ケース(レコード)のセットを2つの子ノードに分割する最も効率的な方法を繰り返し見つける必要があります。ore.odmDT関数では、この分岐の計算用に2つの同種メトリック(giniおよびentropy)を使用できます。デフォルトのメトリックはジニです。
                  
ore.odmDT関数の引数の詳細は、help(ore.odmDT)をコールしてください。
                  
デシジョン・ツリー・モデルの設定
次の表は、デシジョン・ツリー・モデルに適用される設定のリストです。
表7-5 デシジョン・ツリー・モデルの設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| 
 | 
 
 | デシジョン・ツリーのツリー不純メトリック。 ツリー・アルゴリズムでは、各ノードでのデータの分岐に最適なテスト質問が検索されます。最適な分岐および分岐値は、ノードのエンティティに対するターゲット値の同質性(純度)が最大限に高くなるものです。純度はメトリックによるものです。デシジョン・ツリーでは、純度メトリックとしてジニ( | 
| 
 | デシジョン・ツリーの場合: 
 ランダム・フォレストの場合: 
 | 分岐の条件: ツリーの最大深度(ルート・ノードとリーフ・ノードとの間(リーフ・ノードを含む)の最大ノード数)。 デシジョン・ツリーの場合、デフォルトは ランダム・フォレストの場合、デフォルトは | 
| 
 | 
 | トレーニング・データ内の行の割合として表現されたノード内のトレーニング行の最小数。 デフォルトは | 
| 
 | 
 | トレーニング行の割合として表現された、ノードの分割を検討するために必要な行の最小数。 デフォルトは | 
| 
 | 
 | ノード内の行の最小数。 デフォルトは | 
| 
 | 
 | 分岐の条件: 値として表現される親ノードのレコードの最小数。レコード数がこの値よりも少ない場合、分岐は試行されません。 デフォルトは | 
例7-5 ore.odmDT関数の使用方法
この例では、入力ore.frameを作成し、モデルを構築して、予測を行い、混同マトリクスを生成します。
                  
m <- mtcars m$gear <- as.factor(m$gear) m$cyl <- as.factor(m$cyl) m$vs <- as.factor(m$vs) m$ID <- 1:nrow(m) mtcars_of <- ore.push(m) row.names(mtcars_of) <- mtcars_of # Build the model. dt.mod <- ore.odmDT(gear ~ ., mtcars_of) summary(dt.mod) # Make predictions and generate a confusion matrix. dt.res <- predict (dt.mod, mtcars_of, "gear") with(dt.res, table(gear, PREDICTION))
この例のリスト
R> m <- mtcars
R> m$gear <- as.factor(m$gear)
R> m$cyl  <- as.factor(m$cyl)
R> m$vs   <- as.factor(m$vs)
R> m$ID   <- 1:nrow(m)
R> mtcars_of <- ore.push(m)
R> row.names(mtcars_of) <- mtcars_of
R> # Build the model.
R> dt.mod  <- ore.odmDT(gear ~ ., mtcars_of)
R> summary(dt.mod)
 
Call:
ore.odmDT(formula = gear ~ ., data = mtcars_of)
 
  n =  32 
 
Nodes:
  parent node.id row.count prediction                         split
1     NA       0        32          3                          <NA>
2      0       1        16          4 (disp <= 196.299999999999995)
3      0       2        16          3  (disp > 196.299999999999995)
            surrogate                   full.splits
1                <NA>                          <NA>
2 (cyl in ("4" "6" )) (disp <= 196.299999999999995)
3     (cyl in ("8" ))  (disp > 196.299999999999995)
 
Settings: 
                          value
prep.auto                    on
impurity.metric   impurity.gini
term.max.depth                7
term.minpct.node           0.05
term.minpct.split           0.1
term.minrec.node             10
term.minrec.split            20
R> # Make predictions and generate a confusion matrix.
R> dt.res  <- predict (dt.mod, mtcars_of, "gear")
R> with(dt.res, table(gear, PREDICTION)) 
    PREDICTION
gear  3  4
   3 14  1
   4  0 12
   5  2  3