データサイエンスがやりたいSEの備忘録

機械学習とかPythonに興味があります。アウトプットをどうしようか悩んでとりあえず試験的に始めてみた。

第2章:識別規則と学習法の概要_02

学習データとテストデータの作り方

No 手法 説明 その他
1 ホールドアウト法 手元のデータを2分割し、一方を学習(PLで表す)に使い、もう一方をテスト(PTで表す)のために取り置いておく方法。
学習データセットを多くする:学習精度は良くなるが、性能評価の精度は悪くなる
テストデータセットを多くする:学習制度は悪くなるが、性能評価は良くなる
誤り率はホールドアウト誤り率と呼ばれ、真の誤り率との間には下記関係が成り立つことが知られている。
学習データセット{ε(PL, PL)} ≦ ε(P, P) ≦ テストデータセット{ε(PL, PT)}
2 交差確認法 データセットをm個に分割する。
m-1個のデータセットで学習を行い。i番目の1つのデータセットで性能評価を行う。
これをm回繰り返す。
イメージ図 f:id:fenruru:20190211195756j:plain
3 一つ抜き法 交差確認法において、データの数とグループの数を等しくした場合を指す。1回実施すればよい。 別名ジャックナイフ法とも呼ばれている。
4 ブートストラップ法 N個のデータからN回復元抽出を行いブースストラップサンプルを作成する。
このブースストラップサンプルを学習データにもテストデータにも利用する。
クラスが複数ある場合、それぞれのクラスでブースストラップサンプルを作成するのが一般的。
再代入誤り率の補正のために利用される
イメージ図 f:id:fenruru:20190211195939j:plain

※真の誤り率 ・・・ 真の分布p従う学習データを用いて設計し、真の分布pに従うテストデータを用いてテストしたときの誤り率
※再代入誤り率・・・ 学習データを母集団からサンプルし、テストにも同じデータを用いて測定した誤り率

モデル選択

モデル選択とは、テストデータに対する誤り率がもっとも小さくなるようパラメータを調整すること
以下に回帰(関数近似)の例を記述する。

関数近似によるモデル選択の例

区間[0,1]内で等間隔にサンプルされた11個のサンプルデータから信号成分h(x)を検出することを考える。
信号成分h(x)との近似の良さは平均2乗誤差を用いる。
f:id:fenruru:20190211200108p:plain

※関数の重みは学習データセットが決まれば、一意になるため、y(x;D)と表現している。
※y(x;D)→関数近似で算出した特定のデータ、 h(x)→実際のデータの解釈でOK

1つのデータセットで評価することは危険であるため、通常は複数のデータセットを用いて平均2乗誤差を評価し、期待値をとる。
f:id:fenruru:20190211200140p:plain

下記の図は3つの学習データセットに対してそれぞれ1次、3次、6次、10次の多項式で近似した例である。

1次式で近似した場合はデータから大きく外れているが、近似した3本の直線はほとんど同じでばらつきは小さい。(バイアスは大きいが、分散は小さい=アンダーフィッティング)

10次式で近似した場合はデータには近似するが、近似した3本の直線はのばらつきは大きい。(バイアスは小さいが、分散は大きい=オーバーフィッティング)

これらの現象を『バイアス・分散トレードオフと呼び、汎化能力を決める大きな要因となる。
f:id:fenruru:20190211200235j:plain

バイアス項と分散項は(y(x;D) - h(x))^2のデータセットによる期待値Ed{}をとれば、下記の計算式で求めることができる。
f:id:fenruru:20190211200315p:plain

上記バイアス・分散トレードオフと汎化能力の関係を図に示すと下記のようになる。
誤差を確認すると3次式以降から徐々に増加しており、ここからも過学習を引き起こしていることが分かる。
f:id:fenruru:20190211200340j:plain

今回はモデル選択を説明する際に多項式の次数選択を例に説明したが、識別関数の構成でも同様である。

識別関数は、y = f(x;w) と表すことができる。f() の形やwの要素の数が識別関数の複雑さを決めるため、これらを変えながら交差確認法やブーストラップ法により汎化誤差を推定すればよい。

データの分布に統計モデルを仮定する場合には、解析的に汎化誤差を評価でき、その結果を用いてモデル選択が可能となる。

そのような手法に、赤池の情報量基準、ベイズ情報量基準、最小距離基準などがある。