人工知能で使われる基本的な数学(偏微分、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)式の mm' に名前を変えたものを(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 =