パターン認識と機械学習 : 多項式曲線フィッティング
多項式フィッティング
ビショップ本で最初に取り扱っている多項式曲線フィッティングについての備忘録です. (ビショップ本では、この単純な回帰から多くの重要な概念を説明したいらしい.)
多項式フィッテイングとは
まず、実数値の入力変数から、実数値の目的変数を予測することを考えます.
今回は人工的に生成したデータを使って例で考え、後で実装を試みます.
ここで訓練データとしてN個のを並べた、とそれぞれに対する観測値であるが与えられたとします.
例えば、個のデータからなる訓練集合をプロットしたものを以下に載せます.
ただし、ここでは関数にランダムなノイズを加えて生成したものをプロットしています.
この訓練データを用いて、新たな入力変数に対する観測値を予測することが目標です.
そのためのアプローチの一つに曲線フィッティングがあります. (ビショップ本ではあまり形式ばらない形で話を進めています. )
ここでは以下のような多項式を使ってフィッティングすることを考えましょう.
ただし、は多項式の次数です.
この多項式がに関して線形であることから、線形モデルと呼ばれています. (3章、4章で詳しく議論しているのでそこらへんはまたの機会に)
多項式フィッテイングについてもう少し詳しく
フィッティングでは訓練データを多項式に当てはめて係数の値、つまりを求めます.
これは、をランダムに固定したときの多項式の値と、訓練データの目的変数の値との差を最小化することで達成することができます.
全ての訓練データの入力変数と目的変数との差が小さくなるように作られた曲線が求めるべき曲線ということになるので直感的にも理解しやすいですね.
誤差関数にも色々ありますが、今回は単純で広く用いられている、二乗和誤差で考えることにします.
これを最小にするを求めるのが目標なので、で偏微分して0と置き、方程式を解くことになります. (微分動作の時に降りてくる指数部の2と相殺させるために係数を1/2にしていることに留意しましょう.)
誤差関数をで偏微分すると次のようになります(演習問題となっている).
この式をに関して解けば良いです. 求まった係数をとすると、結果としてが求まった多項式として表されます.
あとは、次数を幾つに選択すれば良いかという問題が残っていますが、この問題をモデル選択と呼びます.
例として、に対してフィッテイングした結果を以下に示します. (ソースコードは記事の最後参照)
上の図を見るとのときが最もよく再現できているように見えます.
次数をにした場合、全ての点を通っているのでになっていますが曲線は元の形からは程遠いですね.
このような振る舞いを過学習と呼びます. 訓練データに対してはうまく表現できていても、新しいデータに対しては全く使い物にならない、汎用性がないことを意味しています.
さて、この汎化性能との関係を定量的に評価したいときの指標として平均二乗平方根誤差(Root Mean Square error; RMS)というものがあります.
平均をとることで、サイズが異なるデータに対して比較ができます.
訓練データとテストデータのRMSをグラフ化したものを以下に載せておきます. が小さい時は、誤差がかなり大きく、対応する多項式は柔軟性に欠け、元の関数をうまく表現できていません.
が3から7の間では誤差が小さくうまく表現できているように見えます.
が8を超えると訓練データとの誤差は0に限りなく近くなるがテストデータとの誤差は極端に増えています.
したがって、が大きければ良いわけではないことが確認できました. 今回の場合はで十分であると言えます. (直感的に、テイラー展開などの級数展開を思い浮かべると次数を増やすほど良い結果が得られると期待してしまうから困ってしまいます...)
また、訓練データ数を増やしたときの結果を以下に示します.
図の通り、訓練データ数が多いほど過学習が起きにくいです.
また、過学習を避けるためにベイズ的アプローチを採用すれば良いのですがこの話は3章の内容なのでまた今度...
正則化について
この章では、過学習を抑制するためのテクニックとして正則化を紹介しています. 誤差関数に対し罰金項を付加することで、係数が大きな値になることを防ごうとしています.
罰金項のうち最も単純なものは係数の2乗和ですので、それを紹介します.
二乗和は、
で表されます.
係数は罰金項と二乗誤差の和の項との相対的な重要度を調節しています. この場合も先ほどと同様にで偏微分して0と置いて方程式を解けばが閉じた形で求まります.
統計学の分野では縮小推定、ニューラルネットワークでは荷重減衰と呼ばれていますのでその時々で言葉を使い分けると良いでしょう.
は交差検定などを行なって決定すると良いです. (交差検定についての記事を書いたのでそちらも是非)
http://linearml.hatenablog.com/entry/2017/09/23/040549linearml.hatenablog.com