デジタル・デザイン・ラボラトリーな日々

アラフィフプログラマーが数学と物理と英語を基礎からやり直す。https://qiita.com/yaju

機械学習に使われる微分の数式を理解してみる(多項式回帰)

はじめに

前回の記事の続きとなります。
yaju3d.hatenablog.jp

最終的な更新式を求めたところまでやりました。
パラメータ  \theta_0 \theta_1 の更新式は、最終的に下記のようになります。

\displaystyle \theta_0 := \theta_0 - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)

\displaystyle \theta_1 := \theta_1 - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)x^{(i)}

参考

やる夫で学ぶ機械学習 - 多項式回帰と重回帰 - · けんごのお屋敷

多項式回帰

プロットしたデータにフィットさせる際に1次関数の場合は形が直線にしかなりません。
しかし、場合によっては曲線の方がプロットしたデータにフィットする。
f:id:Yaju3D:20190413234724p:plain

これは関数 f_\theta(x) を2次関数として定義することで実現できる。

f_\theta(x) = \theta_0 + \theta_1x + \theta_2 x^{2}

もっと大きな次数にすることも出来る。その場合はより複雑な曲線に対応できるようになる。

f_\theta(x) = \theta_0 + \theta_1x + \theta_2 x^{2} + \theta_3 x^{3} + \cdot + \theta_n x^{n}

しかし、次数を増やせば増やすほどいい感じになるわけではない。確かにフィットするようにはなるけど、過学習と呼ばれる別の問題が発生するようになる。

更新式を求める

前回と同じように v\theta_2偏微分して更新式を求めます。
\theta_0\theta_1 x は計算対象外なので除外します。残った \theta_2 x^{2}微分して x^{2} になります。

\displaystyle \frac{\partial v}{\partial \theta_2} = \frac{\partial}{\partial \theta_2} \left(\theta_0 + \theta_1 x + \theta_2 x^{2} \right) = x^{2}

最終的な更新式

最終的なパラメーターの更新式は下記のようになります。

\displaystyle \theta_0 := \theta_0 - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)

\displaystyle \theta_1 := \theta_1 - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)x^{(i)}

\displaystyle \theta_2 := \theta_2 - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)x^{(i)^{2}}

これはパラメーターが、 \theta_3\theta_4\cdot と増えていっても同じような更新式になります。
ということは、j 番目のパラメーターの更新式は下記のようにできる。
x^{0} = 1 となることを利用する。

\displaystyle \theta_j := \theta_j - \eta \sum_{i=1}^n \Biggl(f_{\theta}(x^{(i)})-y^{(i)}\Biggr)x^{(i)^{j}}

このように多項式の次数を増やした関数を使うものは、多項式回帰と呼びます。

※誤解されないように説明しておくと、x^{(i)}y^{(i)}i 乗という意味ではなくて、i 番目の学習用データを参照する意味である。

最後に

今回はここまで、次回は重回帰となります。