決定木の学習 決定木とは?

決定木の学習
対象クラスの決定木
1
決定木とは?
• 対象の属性値とそれが属するクラスの対であるデータから,そ
れぞれデータをクラスに分類する木を決定木(クラス分類の一
般化規則)と呼ぶ
– 中間ノードがテストされる属性(重量,価格など)を表す → 判別ノード
– 枝がその属性値(多い・少ない,高い・低いなど)を表す
– 葉ノードがクラス(+・ー,A・B・Cなど任意のID)を表す → クラスノード
重量
重い
多い,重い,高い:-
多い,重い,安い:-
少ない,重い,安い:-
軽い
多い,軽い,安い:+
多い,軽い,普通:+
普通
価格
普通
少ない,普通,普通:-
多い,普通,普通:-
安い
少ない,普通,安い:+
2
属性・属性値と決定木の例
laptop PC 購入の条件
インストールソフト
重量
価格
クラス
少ない
普通
安い
+
多い
重い
高い
-
多い
重い
安い
-
多い
軽い
安い
+
少ない
重い
安い
-
多い
軽い
普通
+
少ない
普通
普通
-
多い
普通
普通
-
重量
重い
多い,重い,高い:-
多い,重い,安い:-
少ない,重い,安い:-
軽い
多い,軽い,安い:+
多い,軽い,普通:+
普通
価格
安い
普通
少ない,普通,普通:-
多い,普通,普通:-
少ない,普通,安い:+
3
決定木の応用例
• Akinator [1] (?)
[1] http://jp.akinator.com/
4
ID3による決定木の生成
• 入力
– 属性値と属性の対の集合
• 出力
– 決定木
• 分類効率のよい決定木作り
• 空の決定木から始まって,すべてのデータが正
しく分類できるような決定木が得られるまでノー
ドを付け加えていく
• データを正しく分類する決定木は,複数種類あり
える
– 分類の効率や決定木の一般性を考えて,できるだけ
単純な決定木を生成する
5
ID3による決定木生成アルゴリズム
• Step0
– 根ノードである全てのデータ集合をCとする
• Step1
– 集合C中のすべてのデータが同一クラスに属するなら,そ
のクラスノードを作り停止する.それ以外なら,属性の基
準判断により一つの属性Aを選んで判別ノードを作る
• どの属性をまず選んで分岐を行ったほうが,効率の良いクラス分
類のための決定木が作れるか?
• Step2
– 属性Aの属性値によりCを部分集合C1,C2,…,Cnに分
けてノードを作り,属性値の枝をはる
• Step3
– それぞれのノードCi(1≦i≦n)について,このアルゴリズ
ムを再帰的に適用する(Step1に戻る)
6
属性の選択基準 1/4
• ID3では,情報理論的基準を用いて分類におけるテスト
回数をできるだけ少なくする
– ここにおける情報理論の利用法は?
• 決定木は,質問(分岐)による分類によってデータ集合
をよりランダムさの少ない集合に分割していくと考える:
分岐を繰り返すたびに,クラスが絞りこまれていく
→ もちろん,早い段階で(少ない分岐回数で一つに絞り
込みたい)
• ランダムさを測る基準として情報量(エントロピー,単位
はbit)を用いて,もっともランダムさを減少させる質問を
Step1で選択する
7
属性の選択基準 2/4
• +と-の2つのクラスだけを考え,それぞれの事前確率(各
クラスに属しているデータの割合で近似)をp+,p-とすると,
その情報量の期待値は
M(C) = –p+log2p+ – p-log2p-
※-∑クラス数px(C)logクラス数px(C)
• データ集合Cの決定木の情報量の期待値をM(C)とし,次に
テストすべき属性(子ノード)としてAが選択されたとすると,
属性Aの値ai(1≦i≦n)は互いに排他的なので,属性Aでテ
ストした場合の情報量の期待値は以下となる
– B(C, A) = Σ{(属性Aがaiをとる確率)×M(ai)}
• ランダム性(情報量)を減少させる属性をまず選ぶのが好ま
しい
→ M(C) - B(C,A) (情報利得)を最大にする属性Aを選択
属性A
a1
A1
a2
A2
an
An
8
属性の選択基準 3/4
• クラス+と-のデータ数は3と5なので,p+=3/8 , p-=5/8
• M(C) = -(3/8 log2 3/8) – (5/8 log2 5/8) = 0.954 bit
• 属性「インストールソフト」をAとして選びテストした場合
– 多い : -(2/5 log2 2/5) – (3/5 log2 3/5) = 0.971 bit
– 少ない: -(1/3 log2 1/3) – (2/3 log2 2/3) = 0.919 bit
• 属性「インストールソフト」により得られる情報量の期待値は,
– B(C,インストールソフト) =
(「インストールソフト」が多い確率×M(多い)) +
(「インストールソフト」が少ない確率×M(少ない))
= 5/8 × 0.971 + 3/8 × 0.919 = 0.952 bit
• M(C) – B(C,インストールソフト) = 0.954 – 0.952 = 0.002 bit
インストールソフト
重量
価格
クラス
少ない
普通
安い
+
少ない
重い
安い
-
多い
重い
高い
-
多い
軽い
普通
+
多い
重い
安い
-
少ない
普通
普通
-
多い
軽い
安い
+
多い
普通
普通
-
10
演習1
• 属性「重量」「価格」についても同様に
– M(C) – B(C,重量)
– M(C) – B(C,価格)
を計算せよ(計算の途中経過を示すこと)
11
属性の選択基準 4/4
• 評価値が最大の属性「重量」を選ぶ
• 部分集合のクラスが確定すれば葉ノード確定
(Step1)
• クラスが確定していなければアルゴリズムを再
帰的に適用する
重量
重い
多い,重い,高い:-
多い,重い,安い:-
少ない,重い,安い:-
クラス確定
軽い
多い,軽い,安い:+
多い,軽い,普通:+
クラス確定
普通
少ない,普通,普通:-
多い,普通,普通:-
少ない,普通,安い:+
クラス未確定
再帰的に分割
13
決定木生成アルゴリズムの改良
• 紹介したアルゴリズムでは,データはすべて正しく,
誤ったクラス分けはされていない(すなわち,属性値
とクラスの対応付けがすべて正しい)という前提が
ある
→ 多少の間違ったデータを含む,つまりノイズを含
むデータへの対応
• すべての学習データが与えられた時点で決定木が
作成される
→ バッチ的にデータを一度にまとめて与えるのでは
なく,少しずつ与えて徐々に学習
14
決定木生成アルゴリズムの改良例
•
ID3
– John Ross Quinlan, “Introduction of decision trees,” Machine Learning, 1986.
•
C4.5 (ID3からデータ欠損,誤差,などへの対応がなされる)
– John Ross Quinlan, “C4.5: Programs for Machine Learning,” 1993.
• CART
– L. Breiman, J. Friedman, R. Olshen, C. Stone, “Classification and regression trees,” 1984
ID3
C4.5
学習データの属性欠損
欠損学習データの入力不可能
該当データの欠損属性を除い
て木生成
離散値(整数,実数など)
属性
使用不可能
閾値で分岐
属性値のバリエーションに
応じた属性重み
属性重み考慮なし
情報利得を分割情報量で割
る: Σ(1/N)log2(1/N)
過学習への対応
対応なし
サンプルにおいてエラー率を
上昇させる分岐を消す
15
更なる決定木の拡張
• Random Forest
– 木を複数作成し,属性値の多い(入力ベクトルが
多次元),または,外れ値を多く含むサンプルか
らの頑健な学習を実現
• 多数のサンプルからランダムに,学習サンプルを抽出
して,各木を学習
• 多数の属性値からランダムに,木の分岐決定におい
て参照する属性値を選択して,各木を学習
16
Random Forest
(…)
(…)
(…)
(…)
学習サンプル
2クラス識別
+
+
ー +
+
ー
ー +
多数決
多クラス識別
2
1
3
1
1
4
多数決
2
2
多クラス識別
1234
1234
1234
1234
1234
平均値の最大
17
決定木の学習のまとめ
• 対象の属性値とそれが属するクラスの対であ
るデータから,それぞれデータをクラスに分類
する木(決定木)を生成する
• 代表的なアルゴリズム ID3, C4.5 では,情報
理論を利用して,早い段階でランダム性を減
少させる(クラスの絞り込みを早める)ような
決定木を生成する
• より複雑・巨大な問題に対するため,Random Forestのように多数の決定木を組み合わせる
方法も有効
18
演習2
• 決定木が確定するまでID3アルゴリズムを再帰的に
適用せよ
– 情報量を計算し,次の分岐に参照する属性を決定せよ
– 下図中の?の分岐属性を決定する際の集合Cは?
重量
重い
多い,重い,高い:-
多い,重い,安い:-
少ない,重い,安い:-
クラス確定
軽い
多い,軽い,安い:+
多い,軽い,普通:+
普通
?
クラス確定
19
演習 1/4
• Matlab による決定木生成
– Matlab は個人常用計算機から実行可能
• Matlab から load できる carsmall をクラス分類
– carsmall に含まれる属性(および属性値の例)
• Acceleration(14.0, 19.6), Cylinders(4, 6, 8), Displacement(91, 360), Horsepower(63, 120), MPG(13, 31), Model(honda civic), Model_Year(70, 82), Origin(Japan, USA), Weight(1965, 3870)
• 決定木は関数 classregtree により生成
演習 2/4
•
演習1
•
演習2
•
演習3
– 属性 Cylinders, Model_Year により,Origin をクラス分類せよ
– 属性 Cylinders, Model_Year, MPG により,Origin をクラス分類せよ
– 属性 Cylinders, Model_Year, MPG により,Origin をクラス分類せよ
– ただし,MPG は離散カテゴリ値ではなく連続値として扱う
•
演習4
– 属性 Cylinders, Model_Year, MPG, Weightにより,Origin をクラス分類せよ
– ただし,1000ポンド台,2000ポンド台,3000ポンド台,4000ポンド台を離散カテゴリ値と
する(これを指定するオプションが関数 classregtree にあるわけではない)
– MPG は連続値として扱う
•
•
全ての演習結果はコードと出力の決定木を可視化した結果(関数 view を使用す
る)を合わせて提出すること
関数 classregtree には多くのオプションがあるが,各演習で指定した以外のポイ
ントについてはどのようなオプションを用いても良い.ただし,各オプションの意味
(どのような決定木が生成されることを期待するか)をコード中にコメントとして残
すこと
演習3/4
• Akinator を作ってみよう
– 自分で「名前」「属性の集合」の組み合わせを学習データ
として用意する
• 学習データに含まれる推定対象数と属性数は,それぞれ15以上
,4以上とする
• 推定対象は自由に決めてよい
– スポーツ選手でも,動物でも,車でも....
– 事前に用意した学習データに対して動作すれば,課題は
満点
– さらに推定失敗した際に,推定失敗対象を学習データに
組み込むプログラムを書けば,加点
22
演習 4/4
• 提出先
– endo.tamotsu.em7@is – 全ての提出物を zip で添付
– 期限
• 6/29 (mon), 24:00