Transcript Document

決定木分析
データマイニング、機械学習にてよ
く使うモデル
Zheng Tianyu
決定木
• 直感のイメージ
ノード(node)
葉(leaf)
決定木が何?
・目的変数と説明変数のトレニングデータから木構造
の分類器(カテゴリのどれに属すかを決定する装置)
・トップダウンに、再帰的にデータを分割していく
・新しいデータを構築した分類器に入力し、結果を予
測する。
つまり,決定木はデータを分類し、予測する。
🌾分類木、回帰木
決定木の歴史
• ID3 (Iterative Dichotomiser) : 1970年代の後
半から、1980年代の前半
• C4.5:ID3の後輩
• CART (Classification and Regression
Trees):1984年から
• Random Forest:木を複数構築
• その他
ID3(Iterative Dichotomiser)
⭕️説明変数 – ノード
• ノードごとに、分割用属性(以降、属性と呼
ぶ)が一対一
- 枝ごとに、その属性に答える値が一対一
⭕️目的変数 – 葉
• 葉は、分類結果。決定木が止まるところ
ノードの決め方
平均情報量が一番大きい属性をノードとす
る
• エントロピー(entropy)の導入
-平均情報量取得(information gain)を図
る
ノードが決まったら、その属性に答えるす
べての値が枝にする
決定木生成の手順
• 学習用のデータを用意
• 説明変数の中で一番よく分類を行えるかを決める(平均情報
量取得が一番多いほう)
• 各分岐の先で同様な条件を見つける作業を繰り返す(木の成
長)
• 分岐の操作が停止条件を満たすと処理を止める
- ノード内のデータがすべて同じ値
- 分割用属性がなくなった時点
- 学習用のデータがなくなった時点
- 木の深さがユーザが指定した設定値を超える
- 分岐によって分かれた先のノードのデータ数が、ユーザ指
定した設定値以下になる
決定木分析の流れ
データの用意
決定木モデルの生成
モデルの検証
ID3による決定木生成アルゴリズム
・Step 1:根ノードである全てのデータ集合をCとする。
・Step 2:停止条件を満たすと処理を止める。それ以外な
ら、属性選択基準により一つの属性Aを選んで判別ノード
を作る。
・Step 3:属性Aの属性値によりCを部分集合C1,C2,...,Cn
に分けてノードを作り、属性値の枝をはる。
・Step 4:それぞれのノードCi(1≦i≦n)について、このア
ルゴリズ
ムを再帰的に適用する(Step2に戻る) 。
ID3による属性選択基準
属性の選択
• 平均情報量取得(information gain)
- 一番多い平均情報量を持っている属性を選択
エントロピー:熱力学第二法則
Claude Elwood Shannon:情報理論のエントロピー
データ分割Dから、n個のクラスを分割する場合、
対数(log)の復習
x = log a b,
a =b
x
log 2 1 = 0,
log 2 2 = 1,
log 2 2 = 2,
2
...
log 2 2 n = n
1
log 2 = -1,
2
1
log 2 = -2,
4
1
log 2 = -3,
8
...
n
æ1ö
log 2 ç ÷ = -n
è2ø
log 2 3 » 1.58,
log 2 5 » 2.32
決定木構築における情報利得
⭕️属性Aを選択する場合
①Aのエントロピーを計算
D j :データ分割Dの中、Aで分岐するクラスごとの内訳
⇨データ個数
②Aで分岐することによって得られる情報量(相互情報量)を計算
⭕️すべての属性をAと同じように相互情報量を計算
分割用属性の選択
・Gain(A)で、Aでどの位の情報量を取得できる
かが分かる。
・「相互情報量」が一番大きい属性を、分割用
属性とする。
・このとき、属性Aの「エントロピー不純度」は最
小、最優分割とも言う。
さて、理論を見てもイマイチ分からない
でしょうから、例をあげて、決定木のアル
ゴリズムで計算してみましょう。
ID
年齢
年収
学生か
信用格付度
Macbook Proを買ったか
1
<=30
高
いいえ
中
買わなかった
2
<=30
高
いいえ
高
買わなかった
3
31〜40
高
いいえ
中
買った
4
>40
中
いいえ
中
買った
5
>40
低
はい
中
買った
6
>40
低
はい
高
買わなかった
7
31〜40
低
はい
高
買った
8
<=30
中
いいえ
中
買わなかった
9
<=30
低
はい
中
買った
10
>40
中
はい
中
買った
11
<=30
中
はい
高
買った
12
31〜40
中
いいえ
高
買った
13
31〜40
高
はい
中
買った
14
>40
中
いいえ
高
買わなかった
全体のエントロピーを計算
結果から見ると、
• Macbook Proを買った:9
• Macbook Proを買わなかった:5
全体のエントロピー:
Entropy(D)
=Info(D)
=-9/14*log2(9/14)-5/14*log2(5/14)
=0.940
すべての属性のエントロピーを計算
①年齢属性
年齢
買った
買わなかった
エントロピー
<=30
2
3
2/5*log2(2/5)3/5*log2(3/5)=
0.971
31〜40
4
0
0
>40
3
2
2/5*log2(2/5)3/5*log2(3/5)=
0.971
Entropy(年齢)
= 5/14*0.971 + 4/14*0 + 5/14*0.971
= 0.694
すべての属性のエントロピーを計算
②年収属性
年収
買った
買わなかった
エントロピー
高
2
2
1/2*log2(1/2)1/2*log2(1/2)=
1
中
4
2
2/3*log2(2/3)1/3*log2(1/3)=
0.918
低
3
1
3/4*log2(3/4)1/4*log2(1/4)=
0.811
Entropy(年収)
= 4/14*1 + 6/14*0.918 + 4/14*0.811
= 0.911
すべての属性のエントロピーを計算
③学生か属性
学生か
買った
買わなかった
エントロピー
はい
6
1
6/7*log2(6/7)1/7*log2(1/7)=
0.592
いいえ
3
4
3/7*log2(3/7)4/7*log2(4/7)=
0.985
Entropy(学生か)
= 7/14*0.592 + 7/14*0.985
= 0.788
すべての属性のエントロピーを計算
④信用格付度属性
信用格付度
買った
買わなかった
エントロピー
高
6
2
3/4*log2(3/4)1/4*log2(1/4)=
0.811
中
3
3
1/2*log2(1/2)1/2*log2(1/2)=
1
Entropy(信用格付度)
= 8/14*0.811 + 6/14*1
= 0.892
すべての属性の相互情報量を計算
相互情報量
値
Gain(年齢)
0.940 - 0.694 = 0.246
Gain(年収)
0.940 – 0.911 = 0.029
Gain(学生か)
0.940 – 0.788 = 0.152
Gain(信用格付度)
0.940 – 0.892 = 0.048
したがって、「年齢」で分割する方法が一番情報量基準で
良いので、これで分割する。
年齢で分割した状態
年齢
<=30
31〜40
買った
>40
第2の分岐条件(<=30)
年齢<=30のデータ:そもそも年収、学生か、信用格
付度を繰り返し分析する必要はある。
年収
学生か
信用格付度
Macbook Proを買ったか
高
いいえ
中
買わなかった
高
いいえ
高
買わなかった
中
いいえ
中
買わなかった
低
はい
中
買った
中
はい
高
買った
しかし、この場合、学生かの分割が目標変数と一致
するので、Gainが最大となる。計算不要。
年齢
<=30
学生か
学生
買った
31〜40
買った
学生でない
買わな
かった
>40
第3の分岐条件(>40)
年齢>40のデータ:そもそも年収、学生か、信用格付
度を繰り返し分析する必要はある。
年収
学生か
信用格付度
Macbook Proを買ったか
中
いいえ
中
買った
低
はい
中
買った
低
はい
高
買わなかった
中
はい
中
買った
中
いいえ
高
買わなかった
しかし、この場合、信用格付度の分割が目標変数と
一致するので、Gainが最大となる。計算不要。
出来上がり!
年齢
<=30
31〜40
ID={1,2,8,9,11}
ID={3,7,12,13}
ID={4,5,6,10,14}
買った
信用格付度
学生か
学生
ID={9,11}
買った
学生でない
ID={1,2,8}
買わな
かった
>40
中
ID={4,5,10}
買った
高
ID={6,14}
買わな
かった
念頭に入れること
機械学習の本来の目的
・未知の入力を正しく分類すること
・学習事例を正しく分類することではない
(!)
C4.5について
C4.5 は ID3 をもとに改良されたプログラムである。
①ID3 と同様にエントロピーを用いて計算する。
②Split Info(X) でその Gain(X) を割り規格化を行う。
ID3の問題点とC4.5での改善
• 多くの枝に分離する属性ほど、エントロピー
減少が
大きくなる傾向がある。
– 比率を利用する。
• 数値属性を処理することができない。
– 数値属性を離散化する。
• 欠損値を取り扱えない。
– 重み付きデータで取り扱う。
• ツリーが大きくなりすぎる傾向がある。
– 枝切りを行う。
枝切りのアルゴリズム
• 枝刈り(Pruning)を行って過学習を防ぐ
• どのノードを刈る?
• 分類精度が悪化しないノードを刈る
• Validation set を利用して分類精度を推定
• Greedy にノードを刈っていき、推定精度が悪
化する直前で枝刈りを止める
分類精度が悪化しないノードを刈る
・細かく分類しすぎた部分を削ること
1.デ
ィシジョンツリーを完成させる
2.すべての末端の部分木に対して、可能な
枝切りについてすべて調査して、エラー数
(推定)の減少する部分木については枝切り
を実施する。
3.枝切りできる部分木が無くなるまで2を繰
り返す。
Validation set
• 学習データの一部を性能評価用にまわす
Training set
Training set
Validation set
Test set
• 学習データが少なくなってしまう
Test set
ご清聴、ありがとうございました。