はじめに
前回、D次元の線形回帰モデルを解きました。
話を1次元に戻します。線形回帰モデルを解くとイメージとしては下図のようになります。
の形ですね。しかしこの分布を見ているとこのようにも見えると思います。
汚くてすみません!!
このように、直線よりも曲線を用いた方がより分布に合っています。基底関数を用いてこのような曲線の関数を導出することが線形基底関数モデルの考え方です。
基底関数
まず基底関数について説明します。読んで字の如く関数を表現するためのベース、つまり基底となる関数です。もっとざっくり言うとグニャグニャしている線(曲線)を基底関数を組み合わせて表現しよう!といった感じです。…???同じことを言ったような気がしますが次第にわかると思います。
ガウス基底
引用元:ガウス関数
ただのガウス関数(正規分布)ですね。は分散のようなイメージでいいと思います。つまり大きくするとそれだけ広範囲に影響が出ます(=グラフの山が潰れて広がるイメージ)。広範囲に影響を及ぼすことはよろしくないので小さい方が望ましいと思います。小さすぎるのもアレだけど。。。はガウス関数の中心位置ですね(山のテッペンの位置)。ともに設計者が決めるパラメータで変数は当然のみです。
多項式基底
つまりとなるわけです。こちらの方が馴染みがあるので扱いやすいかもしれません。
解いてみよう
まず、今回解く対象である線形基底関数モデルを明記します。
ここで、は対象となるデータを何分割して基底関数を使うかを示しています。そしては重みを表しています。つまり、M=3であるとしたら対象のデータをx軸方向に3分割して分割したそれぞれに適した重みwを計算します。そして導出した最適な重みを先ほど述べた基底関数に掛けることで曲線を実現させます。当然分割した各々は干渉し合います。
…わかりにくいですね。図示します。
フリーハンドですみません…。このように、M=3であるため3つのガウス基底で表現を試みます。この3つ各々に重みwを掛けて"いい感じ"にします。最後の項は係数のための処理です。
それでは、重みの最適解を求めていきましょう。タイトルの通り平均二乗誤差Jを使います。
この形、どこかで見覚えがありませんか???そう、線形回帰モデルと同じ形をしています。
へ変わっただけですね。なのでほとんどの処理は線形回帰モデルのものを応用できそうです。
- 1次元データに変換
- に対して線形回帰モデルを解く
以上のようにすることで線形回帰モデルと同様に処理することが可能であると考えられます。
つまりの最適解は
となります。但し、
このような基底関数をN行M列に並べたものを計画行列(デザイン行列)と言います。
今回はxを一次元入力としましたが、仮にxが多次元であってもとすることで同様に扱うことができます。
参考文献
Pythonで「線形回帰」と"確率版の線形回帰"である「ベイズ線形回帰」 - Qiita
第9回 線形回帰[後編]:機械学習 はじめよう|gihyo.jp … 技術評論社
計画行列(デザイン行列)とは何か:PRML編 - 北野坂備忘録
おわり。
もしよければ↓ぽちっと↓お願いします。