人工知能で使われる基本的な数学(偏微分、m-次フィッティング)についてまとめて、JavaScriptで計算しようという試みです。とりあえず基本的な知識から記述していきます。
目的関数Fを
\begin{equation}
F(n) = \omega_{0}n^{0} + \omega_{1}n^{1} + \omega_{2}n^{2} + \omega_{3}n^{3} ... + \omega_{m}n^{m} = \sum_{m} \omega_{m}n^{m} \tag{1}
\end{equation}
のように定義します。既知のデータを tn と置くと、標準偏差Eは
\begin{equation}
E = \frac{1}{2} \sum_{n} \left(\sum_{m} \omega_{m}n^{m} - t_{n}\right)^2 \tag{2}
\end{equation}
となります。標準偏差(誤差)が0になればよいので、偏微分
\begin{equation}
\frac{\partial E}{\partial \omega_{m}} = 0 \tag{3}
\end{equation}
を満たす F を求めます。ここで、m は 0, 1, 2, 3, ... のいずれかが入ります(ローカル変数として束縛されています)。よって、(3)式の m と(2)式の m は別物です。
そこで(2)式の m を m' に名前を変えたものを(3)式に代入します。
\begin{equation}
\frac{\partial}{\partial \omega_{m}} \frac{1}{2} \sum_{n}\left(\sum_{m'} \omega_{m'} n^{m'} - t_{n}\right)^{2} = 0 \tag{4}
\end{equation}
ここで左辺の括弧の中身を関数 fn(ωm) として定義します。
\begin{equation}
f_{n}(\omega_{m}) = \sum_{m'} \omega_{m'} n^{m'} - t_{n} \tag{5}
\end{equation}
(5)式を(4)式に代入すると
\begin{equation}
\frac{\partial}{\partial \omega_{m}} \frac{1}{2} \sum_{n}\{f_{n}(\omega_{m})\}^{2} = 0
\end{equation}
ここで下の合成関数の微分の公式を利用します。
\begin{equation}
\frac{\partial}{\partial \omega_{m}} \frac{1}{2} \{f_{n}(\omega_{m})\}^{2} = \frac{d}{df_{n}}\left(\frac{1}{2} f_{n}^{2}\right) \times \frac{df(\omega_{m})}{d\omega_{m}}
\end{equation}
高校で習った公式と同じですね。以上により
\begin{equation}
\sum_{n} f_{n} \times n^{m} = 0
\end{equation}
となります。これに(5)式を代入すると
\begin{equation}
\sum_{n} \left\{\left(\sum_{m'} \omega_{m'} n^{m'} - t_{n} \right) n^{m}\right\} = 0 \tag{6}
\end{equation}
[]×nm を展開すると
\begin{equation}
\sum_{n} \left\{\sum_{m'} \omega_{m'} n^{m'} n^{m} - t_{n} n^{m} \right\} = 0 \tag{7}
\end{equation}
2つのΣが可換であることを考慮すると
\begin{equation}
\sum_{m'} \omega_{m'} \sum_{n} n^{m'}n^{m} - \sum_{n} t_{n} n^{m} = 0 \tag{8}
\end{equation}
3つのΣを行列で表すと
\[
\rm{w}^{\mathrm{T}} \rm{\Phi}^{\mathrm{T}} \rm{\Phi} - \rm{t}^{\mathrm{T}} \rm{\Phi} = 0 \tag{9}
\]
ここで
\begin{equation}
\rm{w} =
\begin{pmatrix}
\omega_0 \\
\omega_1 \\
\omega_2 \\
\vdots \\
\omega_m
\end{pmatrix}
, \rm{t} =
\begin{pmatrix}
t_1 \\
t_2 \\
t_3 \\
\vdots \\
t_n
\end{pmatrix}
, \rm{\Phi} =
\begin{pmatrix}
1^0 & 1^1 & \cdots & 1^m \\
2^0 & 2^1 & \cdots & 2^m \\
\vdots & \vdots & \ddots & \vdots \\
n^0 & n^1 & \cdots & n^m
\end{pmatrix}
\end{equation}
転置行列の公式 (AB)T = BT AT を利用すれば(9)式は
\begin{equation}
\left(\rm{\Phi}^{\mathrm{T}} \rm{\Phi}\right)\rm{w} = \rm{\Phi}^{\mathrm{T}} \rm{t} \tag{10}
\end{equation}
ΦTΦの逆行列を左からかければ
\begin{equation}
\rm{w} = \left(\rm{\Phi}^{\mathrm{T}}\rm{\Phi}\right)^{-1} \rm{\Phi}^{\mathrm{T}} \rm{t} \tag{11}
\end{equation}
これが答えです。下のフォームにパラメータを入力してcalc()をクリックすれば計算できます。初期値は月ごとの大阪府の平均気温です。
Todo: ベジェクリッピングによる多項式のベジェ曲線への変換
n =
t =
m =
w =
RMS =
RMS =