rによるデータサイエンス13「樹木モデル」
TRANSCRIPT
Rによるデータサイエンス第13章 「樹木モデル」
テキスト「Rによるデータサイエンス」に沿って Rでの樹木モデルの扱い方を解説します。
2011年10月22日 第18回R勉強会@東京 @takemikami
樹木モデルとは
• 説明変数を何らかの基準をもとに分岐させて構築した判別・予測のモデル
• 分岐の過程を木構造で示すことが出来る
• 問題に応じた呼び方 – 判別分析:分類木・決定木 – 回帰分析:回帰木
13.1 樹木モデルとは
判別分析の例 アヤメの品種分類
• がく片の大きさから アヤメの品種を判別する分析
• 説明変数:がく片の大きさ • 目的変数:アヤメの品種
setosa vergicolor virginica
13.1 樹木モデルとは
判別分析の例 アヤメの品種分類
13.1 樹木モデルとは
• がく片の大きさとアヤメの品種を木構造で判断
回帰分析の例 自動車の速度と停止に要する距離
• 自動車の速度から ブレーキから停止までにかかる距離の予測
• 説明変数:自動車の速度 • 目的変数:停止までにかかる距離
速度
停止までにかかる距離
13.1 樹木モデルとは
回帰分析の例 自動車の速度と停止に要する距離
13.1 樹木モデルとは
• 自動車の速度と止まるまでの距離を木構造で分析
樹木モデルの基礎
13.2 樹木モデルの基礎
• 樹木モデルのアルゴリズム – 生成・生長:分岐の方法 – 剪定:モデルの簡潔化
アルゴリズム 分岐・剪定の方法
CHAID カイ2乗統計量、F統計量
C4.5/C5.0/See5 利得比
CART ジニ多様性指標、情報利得
今日用いられているアルゴリズム
生成・生長
剪定
具体例 夏休み海水浴に行く・行かない①
No 風 気温 海水浴
1 弱 高 行く
2 弱 低 行かない
3 弱 高 行く
4 弱 中 行く
5 弱 低 行かない
6 弱 高 行かない
7 強 高 行かない
8 強 低 行かない
9 強 中 行かない
10 強 高 行く
13.2 樹木モデルの基礎
気温:高 気温:中 気温:低
風:弱 行く 行く 行かない
風:強 行かない 行かない 行かない
• 風・気温から海水浴に行くかを判断
目的変数:海水浴行く・行かない 説明変数:風・気温
これを樹木モデルに 当てはめて考えてみる
元データ 行動パターン判断結果
具体例 夏休み海水浴に行く・行かない②
13.2 樹木モデルの基礎
• ジニ係数(Gini Index)を用いて分岐点を計算
• 分布の不純度の尺度 値が大きいほど、不純度が高い(データがばらついている)
t:ノード数 i:クラス p:比率
具体例 夏休み海水浴に行く・行かない③
13.2 樹木モデルの基礎
• 分岐前の状態のジニ係数を算出
No 風 気温 海水浴
1 弱 高 行く
2 弱 低 行かない
3 弱 高 行く
4 弱 中 行く
5 弱 低 行かない
6 弱 高 行かない
7 強 高 行かない
8 強 低 行かない
9 強 中 行かない
10 強 高 行く
GI(分岐前) = 1-‐[(4/10)2 + (6/10)2] = 0.48
具体例 夏休み海水浴に行く・行かない④
13.2 樹木モデルの基礎
• 風の強弱を分岐点とするジニ係数を算出
No 風 気温 海水浴
1 弱 高 行く
2 弱 低 行かない
3 弱 高 行く
4 弱 中 行く
5 弱 低 行かない
6 弱 高 行かない
7 強 高 行かない
8 強 低 行かない
9 強 中 行かない
10 強 高 行く
GI(風=弱) = 1-‐[(3/6)2 + (3/6)2] = 0.5
GI(風=強) = 1-‐[(1/4)2 + (3/4)2] = 0.375
GI(風=強・弱) = GI分岐前 – 6/10GI(風=弱) -‐ 4/10(風=強) = 0.032
具体例 夏休み海水浴に行く・行かない⑤
13.2 樹木モデルの基礎
• 気温の高中低を分岐点とするジニ係数算出
No 風 気温 海水浴
1 弱 高 行く
2 弱 低 行かない
3 弱 高 行く
4 弱 中 行く
5 弱 低 行かない
6 弱 高 行かない
7 強 高 行かない
8 強 低 行かない
9 強 中 行かない
10 強 高 行く
GI(気温=高) = 1-‐[(2/5)2 + (3/5)2] = 0.48 GI(気温=中低) = 1-‐[(4/5)2 + (1/5)2] = 0.32 GI(気温=高・中低) = GI(分岐前) -‐ GI(気温=高)-‐GI(気温=中低) = 0.08 同様に、 GI(気温=中・高低)=0.05 GI(気温=低・高中)=0.137
具体例 夏休み海水浴に行く・行かない⑥
13.2 樹木モデルの基礎
• (最も大きい)ジニ係数から分岐点を決める
GI(風=強・弱) = 0.032 GI(気温=高・中低) = 0.08 GI(気温=中・高低) = 0.05 GI(気温=低・高中) = 0.137
気温:高 気温:中 気温:低
風:弱 行かない 行かない 行かない
風:強 行く 行く 行かない
①
②
①
②
第1ノードは気温の高中・低で分岐。 同様にして第2ノード以降も求めていく
分類木で使用するデータ
13.3.2 分類木
• がく片の大きさとアヤメの品種の対応データ
(目的変数) アヤメの品種
(説明変数) がく片の大きさ
アヤメの品種種別 データ50件づつ
分類木 (1)木の生成①
• がく片の大きさからアヤメの品種を判別する分類木を生成
13.3.2 分類木
分類木 (1)木の生成②
13.3.2 分類木
乱数の初期化 ※後述する交差確認法の
結果を固定するため
ライブラリ読込。事前にinstall.packages(“mvpart”)
の実行が必要
分類木の生成 入力データ:iris
目的変数:SpeciesC
分類条件
ノードのデータ数
非該当 データ数
該当値 構成比
分類木 (1)木の生成③
13.3.2 分類木
分類木の描画
ラベル・グラフの描画
1)
2) 3)
6) 7)
12) 13)
分類木 (2)木の剪定①
• 交差確認法(cross valida[on)の結果から、剪定基準を判断
13.3.2 分類木
交差確認法の結果
→0.10+0.030551 = 0.130551
Min+1SE法: xerror最小値を中心とした標準偏差の1倍範囲内の最大error値を基準
目安の複雑度
基準のxerror値
分類木 (2)木の剪定②
• 目安の複雑度を用いて剪定
13.3.2 分類木
目安の複雑度で剪定
分類木描画(下)
複雑度描画(右)
分類木 (3)判別①
• (未知データの判別を想定して、)モデル作成に用いていないデータを用意し、予測する – 奇数行データ:学習用→モデル作成に使用 – 偶数行データ:テスト用→判別に使用
13.3.2 分類木
分類木 (3)判別②
13.3.2 分類木
偶数行・奇数行でデータ分割
学習データで 分類木生成 複雑度を表示(右)
剪定の必要なしと判断
予測・判別を実施
回帰木で使用するデータ
• 自動車の速度とブレーキから停止までにかかる距離のデータ
13.3.3 回帰木
(目的変数) 停止までの距離
(説明変数) 速度
回帰木 (1)回帰木の生成①
13.3.3 回帰木
• 自動車の速度からブレーキから停止までにかかる距離の予測
回帰木 (1)回帰木の生成②
13.3.3 回帰木
分類条件 ノードのデータ数
尤離度 実測値
回帰木の生成 目的変数:dist
回帰木 (2)回帰木の剪定①
13.3.3 回帰木
• 選定基準の判断および剪定 目安の複雑度を確認(右)
目安の 複雑度で剪定
多変量回帰木で使用するデータ
• 「蜘蛛の種類」と「蜘蛛狩りの環境」の分布データ
13.3.4 多変量回帰木
(目的変数) 蜘蛛の種類と数
(説明変数) 蜘蛛狩りの環境
多変量回帰木 (2)解析と結果①
13.3.4 多変量回帰木
多変量回帰木: 目的変数が複数ある回帰木 説明変数:蜘蛛狩りの環境 目的変数:蜘蛛の種類の分布 として多変量回帰木を生成
多変量回帰木 (2)解析と結果①
13.3.4 多変量回帰木
目的変数の主成分分析
パッケージ:tree①
13.4 補遺
折れ線回帰図
折れ線回帰図の描画
事前に install.packages(”tree”);
の実行が必要
パッケージ:tree②
13.4 補遺
分割分類図
分割分類図の描画
パッケージ:Rweka①
13.4 補遺
事前に install.packages("RWeka", dependencies=TRUE);
の実行が必要
C4.5のアルゴリズムによる 分類木の生成
パッケージ:Rweka②
13.4 補遺
事前に install.packages(”party", dependencies=TRUE); library(party)
の実行が必要
パッケージ:Rweka③
13.4 補遺
箱ひげ図の描画(左)
棒グラフの描画(右)