Rで決定木分析(rpartによるCARTとrangerによるランダムフォレスト)

2017年6月5日

準備

決定木(decision tree)分析をする際、まず目的変数の種類とアルゴリズムを決定する。

アルゴリズム

  • CART
  • CHAID
  • ID3 / C4.5 / C5.0

目的変数の型

目的変数の型によって扱いが変わる

  • 質的変数(2値変数):分類木→目的変数が0/1, T/Fの場合はas.factor()でfactor型にデータ変換しておく
  • 量的変数:回帰木
  • survivalオブジェクト
  • (生起を表す2カラム)

CARTはすべて対応、C4.5/C5.0は質的変数のみ

ここではCARTアルゴリズムでツリーモデルを生成するrpartと、ランダムフォレストrangerを中心に説明する。

1回限りの決定木

実行

  • 投入するデータテーブルの変数を絞っておくと変数指定が楽
  • プロットしたときのラベルをわかりやすく変換しておくといい
  • 分類木の場合は目的変数をfactor型に変換しておく
  • 重要なパラメータ
    • method(通常は目的変数の型によって自動で最適なものが選択される)
      • ‘class’で分類木(目的変数がfactor型)
      • ‘poisson’で生起(目的変数が2カラムの生起データ)
      • ‘exp’で生存(目的変数がsurvicalオブジェクト)
      • ‘anova’で回帰木(目的変数が上記のいずれでもない)
    • parms: method = 'class'の場合、以下の指標に基づいて分割。method = 'anova'の場合は指定しない
      • parms = list(split='gini')でジニ係数を使う(デフォルト)
      • parms = list(split='information')でエントロピーを使う
    • rpart.control
      • minsplitは1ノードのサイズの下限
      • cpは小さいほど細かく分岐する。あとで粗くできるので最初は細かく分けておくといい

見る

変数の重要度を確認

チューニング(cpを調整)

cpはツリーモデルの複雑さを表すパラメータ。値が小さいものほどモデルが細かくなる。

cpを見る

cpを調整(cpの小さいツリーモデルからcpの大きいツリーモデルへ)

プロット(2通りのライブラリで)

ビルトインのplot

(決定木のプロット例)

ビルトインのplot

ライブラリ{rpart.plot}

(決定木のプロット例)

rpart.plot

ライブラリ{partykit}

(決定木のプロット例)

partyをplot

どれを使ってもいいが、使いやすいものを確保しておくといい。

分類されたノードを元データに紐づける

予測

よくある処理をまとめて

ランダムフォレスト(random forest)

rangerパッケージが便利。
以下の目的変数ごとのツリーモデルをサポートしている。

  • 質的変数(2値変数):分類木→目的変数が0/1, T/Fの場合はas.factor()でfactor型に変換しておく
  • 量的変数:回帰木
  • survivalオブジェクト

実行

ランダムフォレストのハイパーパラメータは

  • num.trees: 試す決定木の数
  • mtry: モデルに採用する変数の数

mtryをグリッドサーチするならcaretでmethod='ranger'を指定する(後述)。

その他の主なパラメータ

  • min.node.sizeでノードサイズの下限を指定できる
  • importanceを与えると変数の重要度を返す。回帰木と分類木では’impurity’を、生存では’permutation’を指定する。

なおデフォルトでは

  • 分類木ではGini係数に基づいて、
  • 回帰木では分散に基づいて、
  • 生存モデルではログランクに基づいて

分割

ハイパーパラメータをグリッドサーチ

  • na.actionはレコードにNAを含む場合の扱いを指定する。デフォルトはna.failで処理に失敗する。NAを含む行を除外して実行する場合はna.omitを指定する。

分類木では(ロジスティック回帰のようなその他のクラス分類においても)metricに’Accuracy’, ‘Kappa’, ‘ROC’を指定できる。ROCを使う場合、trControlの引数にclassProbs = TRUEを加える必要がある。

参考 – rpartに対してtrainすると

cpの値を探索することになる。