フリーソフトではじめる機械学習入門 (第2版) 第4章

477 Views

September 29, 23

スライド概要

profile-image

機械学習や音声認識に関する書籍を執筆しています。

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

4. 識別 ー統計的手法ー play outlook temperature humidity windy 4.1 統計的識別とは 4.2 カテゴリ特徴に対するベイズ識別 4.3 ベイジアンネットワーク 荒木雅弘: 『フリーソフトではじめる機械 学習入門(第2版)』 (森北出版,2018年) スライドとJupyter notebook サポートページ

2.

4. 識別 ー統計的手法ー 第3章(決定木):正解を表現する概念を得る(説明性が高い) 第4章(統計):識別結果の確率を得る(意思決定に役立つ) 機械学習 教師あり学習 教師なし学習 中間的学習 識別 回帰 ・カテゴリ特徴 天候=晴 気温=低 湿度=中 ⾵=なし play=yes

3.

weather.nominalデータ No outlook temperature humidity windy play 1 sunny hot high FALSE no 2 sunny hot high TRUE no 3 overcast hot high FALSE yes 4 rainy mild high FALSE yes 5 rainy cool normal FALSE yes 6 rainy cool normal TRUE no 7 vercast cool normal TRUE yes 8 sunny mild high FALSE no 9 sunny cool normal FALSE yes 10 rainy mild normal FALSE yes 11 sunny mild normal TRUE yes 12 overcast mild high TRUE yes 13 overcast hot normal FALSE yes 14 rainy mild high TRUE no outlook(天候) sunny, overcast, rainy temperature(気温) hot, mild, cool humidity(湿度) high, normal windy(風) TRUE, FALSE play(=クラス) yes, no

4.

4.1 統計的識別とは (1/4) 特徴ベクトル 事前確率 x が観測されていないとき P (yes), P (no) だけから判断するしかない 特徴ベクトル 事後確率 x 観測後 P (yes∣x), P (no∣x) の大きい方に判定 多クラス (ωi ​ : i = 1, … , c) に一般化 最大事後確率則による識別(ベイズ識別) CM AP = arg max P (ωi ∣x) ​ ​ i ​

5.

4.1 統計的識別とは (2/4) 事後確率の求め方 単純な方法: 特徴ベクトルが完全に一致する事例を大量に集めて、その正解ラベルの割合 を求める 例) x = (晴, 高, 中, TRUE) 100事例中yes : 70, no : 30 → P(yes∣(晴, 高, 中, TRUE)) = 0.7 しかし、上記の推定が行えるようなデータセットが得られることはほとんどない そのため、事後確率に対して式変形・近似を行って、現実の規模のデータセットから確率を 推定できるようにする

6.

4.1 統計的識別とは (3/4) ベイズの定理 P (A∣B) = P (B∣A)P (A) P (B) ​ 事後確率を尤度と事前確率の積に変形する手順 事後確率にベイズの定理を適用 最大値を求める際に無関係な分母を払う CM AP = arg max P (ωi ∣x) = arg max ​ ​ i ​ i P (x∣ωi )P (ωi ) = arg max P (x∣ωi )P (ωi ) P (x) i ​ ​ ​ 尤度:特定のクラスから、ある特徴ベクトルが出現する尤もらしさ ​ ​ ​ ​

7.

4.1 統計的識別とは (4/4) ベイズ統計とは 結果から原因を求める 通常の統計学は原因から結果を予測する ベイズ識別 観測結果 x から、それが生じた原因 ωi を求める(事後確率) ​ 通常、確率が与えられるのは 原因→結果(尤度) ベイズ識別では、事前分布 えることができる P (ωi ) が、観測 x によって事後分布 P (ωi ∣x) に変化したと考 ​ ​

8.

4.2 カテゴリ特徴に対するベイズ識別 事前確率:P (ωi ) ​ 特徴ベクトルを観測する前の各クラスの起きやすさ 事前確率の最尤推定 学習データ中のクラスの割合から推定する N : 全データ数、 ni : クラス ωi のデータ数 ​ ​ P (ωi ) = ​ ni N ​

9.

4.2.1 学習データの対数尤度 (1/3) 尤度の導出 特徴ベクトル x を生成するモデルを考え、そのモデルが(クラスごとの)パラメータ θ j に従 ​ ってデータを生成していると仮定 P (x∣ωj ; θ j ) ​ ​ これらはクラス毎のデータから推定することになるので、以後、1クラス分のデータを全デー タD とみなして ωj を省略し、θ j を θ と表記 ​ ​ i.i.d. (independent and identically distributed)を仮定 全データ D は、各データが同じ分布から独立に生成されていると仮定して尤度を計算 N P (D∣θ) = ∏ P (xi ∣θ) ​ i=1 ​

10.

4.2.1 学習データの対数尤度 (2/3) 対数尤度: L(D) 確率の積のアンダーフローを避けるため、尤度を対数で計算 N L(D) = log P (D∣θ) = ∑ log P (xi ∣θ) ​ ​ i=1 尤度関数の仮定の例 特徴ベクトルが1次元、値0 or 1で、ベルヌーイ分布に従うと仮定 θ で値1、確率 1 − θ で値0をとる分布 ベルヌーイ分布:確率 N N N L(D) = ∑ log θxi (1 − θ)(1−xi ) = ∑ xi log θ + (N − ∑ xi ) log(1 − θ) ​ ​ ​ i=1 ​ i=1 ​ ​ i=1 ​

11.

4.2.1 学習データの対数尤度 (3/3) 対数尤度を最大にするパラメータ:θ^ ∂L(D) ∂θ ​ = 0 の解である θ^ を求める N N ∂L(D) 1 1 = ∑ xi + (N − ∑ xi ) ∂θ θ 1−θ i=1 i=1 ​ ​ ​ ​ ​ ​ ​ N N 1 {(1 − θ) ∑ xi − θ(N − ∑ xi )} = 0 = θ(1 − θ) i=1 i=1 ​ ​ ​ ​ ​ N 1 ^ θ= ∑ xi N i=1 ​ ​ ​ 値1がでる確率の最尤推定値として、値1がでた回数を全データ数 れた N で割ったものが得ら

12.

4.2.2 ナイーブベイス識別 (1/5) 多次元ベクトルの尤度関数を求める 特徴値のすべての組合せがデータセット中に何度も出てくる必要があるが、これも非現実的 ナイーブベイズの近似 すべての特徴が独立であると仮定 d P (x∣ωi ) = P (x1 , … , xd ∣ωi ) ≈ ∏ P (xk ∣ωi ) ​ ​ ​ ​ ​ ​ play ​ k=1 d CNB = arg max P (ωi ) ∏ P (xk ∣ωi ) ​ ​ i ​ ​ k=1 ​ ​ outlook temperature humidity windy

13.

4.2.2 ナイーブベイス識別 (2/5) 尤度の最尤推定 nj : クラス ωj のデータ数 nk : クラス ωj のデータのうち、k 次元目の値が xk であるデータ数 ​ ​ ​ ​ ​ P (xk ∣ ωj ) = ​ ゼロ頻度問題: ​ nk nj ​ ​ ​ nk が0の場合、確率の推定値も0となってしまう ​ 解決法 → スムージング m 種類の k 次元目の値が、事前に α 回ずつ生じていたと仮定する α = 1 のときをラプラス推定とよぶ P (xk ∣ ωj ) = ​ ​ nk + α nj + αm ​ ​ ​

14.

4.2.2 ナイーブベイス識別 (3/5) scikit-learnのナイーブベイズ識別 カテゴリ特徴は `OrdinalEncoder` で整数値に置き換える 変換情報 enc = OrdinalEncoder() X_en = enc.fit_transform(X) enc.categories_ [array(['overcast', 'rainy', 'sunny'], dtype=object), array(['cool', 'hot', 'mild'], dtype=object), array(['high', 'normal'], dtype=object), array([False, True], dtype=object)] 変換例 ['sunny', 'hot', ‘high’, False] → [2, 1, 0, 0] 異なる値に異なる整数値を割り当てているだけであって、数値の近さが概念の近さを表し ているのではないことに注意

15.

4.2.2 ナイーブベイス識別 (4/5) scikit-learnのナイーブベイズ識別 正解のラベルは `LabelEncoder` で整数値に置き換える le = LabelEncoder() y_en = le.fit_transform(y) le.classes_ array(['no', 'yes'], dtype=object) no → 0, yes → 1

16.

4.2.2 ナイーブベイス識別 (5/5) scikit-learnのナイーブベイズ識別 カテゴリ特徴に対するナイーブベイズ識別は `CategoricalNB` を用いる 識別器のパラメータ `arpha` : 事前に仮定するサンプル数。教科書の mp に対応 `fit_prior` : 事前確率を学習の対象とするかどうか `class_prior` : 事前確率を別途与えるときに用いる 典型的なコード clf = CategoricalNB() clf.fit(X, y) clf.predict_proba(X_test[1])

17.

4.3 ベイジアンネットワーク (1/7) ベイジアンネットワークの仮定: 変数の部分集合が、ある分類値のもとで独立である P arents(Xk ) は値 xk をとるノードの親ノード集合の値 ​ ​ d P (x1 , … , xd ) ≈ ∏ P (xk ∣P arents(Xk )) ​ ​ ​ ​ ​ k=1 条件付き確率のベイジアンネットワークによる表現 play Rain humidity Wet grass outlook temperature windy

18.

4.3 ベイジアンネットワーク (2/7) 変数間の独立性を表す基本パターン Head-to-tail Tail-to-tail Head-to-head

19.

4.3 ベイジアンネットワーク (3/7) Head-to-tail 真ん中のノードの値が与えられると、左右のノードは独立 Cloudy Rain Wet grass

20.

4.3 ベイジアンネットワーク (4/7) Tail-to-tail 親ノードの値が与えられると、子ノードどうしは独立 Cloudy Sprinkler Rain

21.

4.3 ベイジアンネットワーク (5/7) Head-to-head 子ノードの値が与えられると、親ノードどうしが独立でなくなる Sprinkler Rain Wet grass

22.

4.3 ベイジアンネットワーク (6/7) 確率計算 正確な計算:周辺化によって、すべての値に対する確率を合計する 近似計算:乱数を用いてベイジアンネットワークの確率分布に従った事例を生成し、確率を 推定する C(y, x1 , … , xd ) P (y∣x1 , … , xd ) ≈ C(x1 , … , xd ) ​ ​ ​ ​ ​ ​ ​

23.

4.3 ベイジアンネットワーク (7/7) ベイジアンネットワークの学習 ノードの順番を決める(通常はクラスを表す特徴を最初に) repeat for n in Node: for n' in n+1以降のノード: if (n から n' へのアークを追加することにより対数尤度が増加} n から n' へアークを追加 ノードの順番を変える until 対数尤度が変化しない return 学習されたベイジアンネットワーク

24.

4.4 まとめ カテゴリ特徴の識別問題に対する統計的識別 ベイズ識別 事後確率 P (ωi ∣x) を最大とするクラス ωi を求める ​ ​ 事後確率をデータから推定するのは難しいので、ベイズの定理を用いて尤度 P (x∣ωi ) と事前確率 ​ P (ωi ) の積に分解 ​ ナイーブベイズ法 特徴のすべての次元が独立であると仮定して、尤度をそれぞれの次元の確率の積に分解 確率が0となることを避けるためにスムージングを行う ベイジアンネットワーク 変数の部分集合が、ある分類値のもとで独立であるとして構造を推定