ゼッタノート

ゼッタが勉強したことをまとめたノート代わりのブログ。たまに日記になるかも。

パターン認識【第1回】

 お久しぶりのブログ更新です。ここのところTOEICの勉強のために機械学習に全く触れられておらず、そのためブログの更新も完全に止まっていました。挫折したわけじゃないよ!

 さて、本日から故あって平井有三氏のはじめてのパターン認識を勉強することになりました。これまで通りアウトプットと今後の見直しのために、この本を読んで自分なりにまとめたものを書いていきます。

 ※注意!この記事は機械学習入門者が独自に調べ独自に解釈した内容により構成されているため、誤った記述が含まれている可能性があります。

パターン認識ってどんなことをするの?

 そもそもパターン認識とはどういうことをするのでしょうか。それは、本書に挙げられている通り、硬貨の識別(券売機に入れられた硬貨が10円なのか、50円なのか、はたまた100円なのか)や、音声認識、顔認識などです。つまり、なんらかの形をいくつかのクラスに分けることパターン認識と呼びます。音声も波形の分類と考えれば形の分類と呼んでよいでしょう。
 分類するために、例えば10円硬貨の特徴すべてを把握するのは困難を極めるでしょう。それが日本で流通している硬貨すべてとなると、情報量は膨大になるはずです。そこで、特徴抽出を行います。単語から推測できるように、それぞれの硬貨の代表的な特徴を取り上げるのです。例えば、材質・大きさ・穴の有無など。各硬貨の全ての情報を利用せずとも、区別する際に効果的な特徴のみを利用することで、制作レベルをぐっと下げることができます。そして、それらの特徴を基にどのように分類するかを決めたものが、識別規則となります。

教師付き学習・教師なし学習

 識別規則とは今回では関数の形をしています。あるデータ\boldsymbol{x}を入力としたy=f(\boldsymbol{x})という関数です。学習の目的は、正しい結果yを出力するような関数f()を求めることです。教師あり学習では、各データに正解となるラベルを付与したものを入力データとします。これによって1個のデータを学習するごとに、パラメータ\boldsymbol{w}を正解ラベルに近づくように修正していきながら学習を進めることができます。
 しかし、データ数が増えれば増えるほど、正解ラベルを付けていくのは大変になります。そこで、データ間の類似度に応じて自動で分類していく教師なし学習というものがあります。また、入力データの一部にのみ正解ラベルを付与した形質導入学習というものもあるようです。

バイアス・再代入誤り率

 機械学習を勉強しているとよく出てくるバイアスという言葉、今までよくわかっていなかったのですが、標本(学習データ)は母集団からランダムに取ってきたものであり、その各特徴量の平均や分散は母集団と同じになるわけではなく、その差をバイアス、というようです。
 学習データと同じデータを用いて検証を行った場合の誤り率を再代入誤り率と言います。テストデータで検証を行う前に、そもそも学習データに対して良い値を返すか確認、という感じなのでしょうか。

様々な検証法

ホールドアウト法

 ホールドアウト法とは、データを学習用とテスト用に分割し、学習用データを用いて学習を行った後テストデータを用いてテストを行うものです。しかし、この方法は学習用データを多くとれば学習精度は上がるが評価精度が落ち、評価用データを多くとれば評価精度は上がるが学習精度が落ちるというトレードオフが存在します。大量のデータを所持していなければ使えない方法と言えるでしょう。

交差確認法

 以前LinerSVCの記事で説明したK分割交差検証のことですね。また、この方法は、何回も同じことを繰り返した後、最後に平均をとるのですがそれにはちゃんと理由がありました。1回だけだと、分割に偏りが生じてしまう可能性があるため、分割数分繰り返して平均をとるようです。

一つ抜き法

 交差確認法はデータを分割する際Kに好きな数字を入れることができましたが、一つ抜き法ではデータ数と分割数を同じにしたものです。

ブートストラップ法

 以下のサイトを参考にしました。
ブートストラップ | Shimodaira Lab
 これは再代入誤り率のバイアスを補正するために利用されるそうです。手元のN個のデータ(標本)から重複を許してN回復元抽出を行いサンプルを作ります。ここで復元抽出とは、1度データを取ってきた後、元に戻し、また取り直す、ということです。確率の問題でよくある「くじを引いて元に戻しまた引く」っていうやつですね。こうしてできた新たな標本をブートストラップサンプルと言います。バイアスは今作ったブートストラップサンプルの再代入誤り率から、ブートストラップサンプルで学習した後、元の標本でテストした際の誤り率を引くことで求まります。式で表すと以下のようになります。

bias=ε(N*, N*)-ε(N*, N)

 ここでε(X, Y)とは、Xで学習した後Yでテストした際の誤り率を表します。このように何回もブートストラップサンプルを作ってはbiasを計算して...ということを繰り返して、最後にbiasの平均をとります。これがバイアスの推定値となります。最後に元の標本の再代入誤り率からバイアスの推定値を引くと、母集団の誤識別率の予測値が求まります。

汎化能力の評価法とモデル選択

 手持ちのデータで学習させても、世に出すと学習データに含まれなかった入力が行われる可能性があります。このようなデータに対応するために、汎化能力の高さが求められます。ではその能力はどのように測ればよいのか。ここでは平均2乗誤差を挙げています。本書には以下のような式が書いてあります。

\int\ (y(x;D)-h(x))^{2}p(x)dx = E\{(y(x;D)-h(x))^{2}\}

 yは\boldsymbol{a}をパラメータとするp次多項式の近似曲線なのですが、データセットDを決めれば一意に決まるため、y(x;D)と表しています。h(x)は検出したい関数です。ここでは区間[0, 1]の話として、確率密度関数として扱っていますが、[0, 1]内で一様に分布しているためp(x)=1積分範囲は[0, 1]となります。ここでも1つのデータセットのみでなく、複数のデータセットを使って評価します。
 近似曲線の次数を少なくすると、近似曲線同士の分散は小さくなるが、データから大きく外れます(バイアスが大きい、という)。一方近似曲線の次数を多くすると、近似曲線同士の分散は大きくなるが、バイアスは小さくなります。そして次数を大きくしすぎると、バイアスが小さくなりすぎて過学習の原因になります。近似曲線同士の分散が小さいと、どのようなデータを与えられても変わらない値を出す、という意味で汎化能力が高いことを示す一因になる、ということでしょうか。


今回は以上となります。最初ということもあり、以前の2記事で調べたことと重複する箇所が多々ありました。復習にもなって良かったです。今後も本書を読み進めていくごとに記事を書いていこうと思います。それでは。