はじめてのパターン認識

2章

Created by 2GMon

話の流れ

  • 識別規則と学習法の概要
  • 汎化能力を推定する方法

識別規則は、入力データ${\bf x}$からクラス$C_i \in \Omega = \{ C_1, \cdots , C_K \}$への写像であり、 写像の方法は識別規則によって、関数値の正負・ダミー変数表現・事後確率の最大値・決定木の終端ノードなど様々である

事後確率による方法

  • 特徴空間に確率分布を仮定し、事後確率が最大のクラスに分類する
  • 確率分布のパラメータを推定する
  • 代表例はベイズの最大事後確率法

距離による方法

  • 入力ベクトル${\bf x}$と各クラスの代表ベクトルとの距離を計算し、一番近い代表ベクトルのクラスに分類する
  • 代表例は最近傍法

関数値による方法

  • 関数$f({\bf x})$の正負、あるいは最大値でクラスを決める
  • 関数$f({\bf x})$を識別関数という
  • 代表例はパーセプトロン・SVM

決定木による方法

  • 識別規則の真偽に応じて次の識別規則を順次適用し、決定木の形でクラスを決める

教師あり学習

入力データからクラスへの写像$y=f({\bf x})$を決めることが識別規則の学習である

2クラス問題の線形識別関数の場合、識別規則は以下のようにパラメータ${\bf w}$と入力ベクトル${\bf x}$の線形関数を用いて表現される $$y = f({\bf x}; {\bf w}) = w_1 x_1 + \cdots + w_d x_d = {\bf w}^T {\bf x}$$

識別クラスを関数値$y$の正負で決めるとすると、学習の目的は入力データが正しいクラスに対応する関数値を出力するように パラメータ${\bf w}$を調整することである

学習には、入力ベクトルとそのクラスを対にした教師データが必要になる

2クラスの場合は正負に対応した値$t \in \{-1, +1 \}$で表し、3クラス以上の場合はダミー変数表現を用いて ${\bf t} = (0, 1, 0, 0)^T$のように表す

学習に用いられる対、全ての集合$({\bf x_i}, {\bf t_i})\ \ (i = 1, \cdots , N)$を学習データといい、以降では$D_L$で表す

学習に使用しなかった対の集合をテストデータといい、以降では$D_T$で表す

回帰

教師入力として2値ではなく、任意の関数値が与えられる場合は、 識別関数は入力${\bf x}$に対して与えられた関数値を出力するように学習され、このような問題を回帰という

識別関数$f({\bf x})$は与えられた関数値を近似できるだけの能力を持つ必要があり、 この能力は識別関数の複雑さに対応する

教師なし学習

教師データがない学習もあり、入力データ間の距離や類似度、統計的な性質に基づいてクラスタリングすることが主目的になる

大量のデータに教師データを付与することはコストがかかるので、一部のデータのみ教師データを付与し、 他は教師データなしで学習を行う形質導入学習(transductive learning)とう方法も提案されている

汎化能力

学習データに対する識別関数の出力値と教師データとの誤差が最小になるように、 識別関数のパラメータを調整することが学習の目的だが、未知データに対しても上手く働くという保証はない

学習した識別規則の、未知データに対する識別能力を汎化能力といい、誤差を汎化誤差という

学習データ$D_L$に含まれる特徴ベクトルの$d$次元空間内での分布を$p_L$、 テストデータ$D_T$に含まれる特徴ベクトルの$d$次元空間内での分布を$p_T$と表す

このとき、$D_L$で学習し$D_T$でテストした時の誤り率を$\epsilon (p_L, p_T)$で表すとする

$\epsilon(p, p)$を真の誤り率、$\epsilon(p_L, p_L)$を再代入誤り率という

手元にあるデータを学習用とテスト用に分割する代表的な方法がいくつかある

  • holdout
  • cross validation(交差検定法)
  • levave-one-out
  • bootstrap

holdout

データを2つに分けて、一方を学習に使い、もう一方をテストに使う

$\epsilon(p_L, p_T)$をholdout errorといい、以下が成り立つ $$ E_{D_L} \{ \epsilon(p_L, p_L) \} \leq \epsilon (p, p) \leq E_{D_T}\{ \epsilon (p_L, p_T) \} $$

学習データを多くするとテストデータが減るので、性能評価の精度が悪くなり、 テストデータを多くすると学習データが減るので、学習の精度が悪くなる

cross validation

holdoutの欠点を補うためによく使用される

データをそれぞれ$m$個のグループに分割し、$m-1$個のグループを用いて学習、残りのグループでテストを行う。 これを$m$繰り返し、誤り率の平均を性能の推定値とする

すべてのデータを学習とテストに利用するので良い推定ができるが、 分割によって偏りが生じる可能性があるので分割を変えてcross validationを行うとよい

levave-one-out

cross validationにおいてデータ数$N$とグループ数$m$を等しくした場合

levave-one-outの場合は、組み合わせが1つなのでcross validationのように分割を変えて繰り返す必要はない

bootstrap

$N$個のデータから$N$回復元抽出を行って作ったブートストラップサンプル$N'$を用いて再代入誤り率のバイアス(真の識別率との差) を推定する

復元抽出を行うため、複数回抽出されるデータや抽出されないデータなどが生じるが、 $N$回の復元抽出で少なくとも一度サンプルされる確率は$p' = 1 - (1 - \frac{1}{N})^N \approx 1 - e^{-1} = 0.632$である

$bias = \epsilon(N', N') - \epsilon(N', N)$とし、50個以上のbiasの平均値をバイアスを推定値とすると、 誤識別率の予測値は以下で与えられる $$\epsilon = \epsilon(N, N) - \overline{bias} $$

汎化能力の評価

識別関数を評価した性能が悪い場合は、線形識別関数から非線形識別関数に変えたり、パラメータの次数を変えたりする

パラメータの次数を変え、テストデータに対する誤り率がもっとも小さくなるパラメータを選択する方法をモデル選択という

近似曲線を$y(x;D)$とすると信号成分$h(x)$との近似の良さは平均2乗誤差(MSE)で評価できる $$MSE=\int (y(x;D) - h(x))^2 p(x) dx = E \{ (y(x;D) - h(x))^2 \}$$

1つのデータセットで近似の良さを評価するのは危険なので、複数のデータセットを用いて、それらの平均で評価する $$MSE_D = E_D \{(y(x;D) - h(x))^2\}$$

ノイズの乗ったサインカーブを1次、3次、6次、10次の多項式で近似することを考える

  • 1次で近似すると、データから大きく外れる(バイアスが大きい)が、近似した直線同士の分散は小さい
  • 3次で近似した場合、よく近似でき、バイアスも分散も小さい
  • 6次で近似すると、ノイズを近似しはじめる
  • 10次で近似すると、信号成分よりもノイズを近似してしまい、バイアスは小さいが分散は大きい

バイアスと分散の成分は$MSE_D = E_D \{(y(x;D) - h(x))^2\}$から求められる $$(y(x;D) - h(x))^2 = (y(x;D) - E_D \{y(x;D)\} + E_D \{y(x;D)\} - h(x))^2 \\ = (y(x;D) - E_D \{y(x;D)\})^2 + (E_D \{y(x;D)\} - h(x))^2 \\ + 2(y(x;D) - E_D \{y(x;D)\})(E_D \{y(x;D)\} - h(x)) $$

$E_D\{(y(x;D) - E_D \{ y(x;D) \})\} = E_D\{y(x;D)\} - E_D\{y(x;D)\} = 0$なので $$E_D\{(y(x;D) - h(x))^2\} = (E_D\{y(x;D) - h(x)\})^2 + E_D\{(y(x;D) - E_D\{y(x;D)\})^2\}$$

$(E_D\{y(x;D) - h(x)\})^2$がバイアス項で$E_D\{(y(x;D) - E_D\{y(x;D)\})^2\}$が分散項

学習データの誤差が減少し、テストデータの誤差が増加するような減少を過学習という

汎化能力が高いモデルはバイアスと分散がバランスしているといえる

識別関数を$y=f({\bf x};{\bf w})$とした場合、$f()$の形や${\bf w}$の次元数が識別関数の複雑さを決定するので、 これらを変えながら汎化誤差を推定する

データの分布に統計モデルをを仮定した場合は、AIC・BIC・MDLなどで解析的に汎化誤差を評価できる