機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

カーネル回帰分析(1)

カーネル法による正則化最小二乗法(1)で、正則化最小二乗法の誤差関数からカーネル関数を導きました。今回は、別のアプローチで回帰分析を行ってもやはりカーネル関数が導かれることを見ていきます。

与えられた訓練データ(\mathbf{x}_n,t_n)をもとに、分布p(\mathbf{x},t)を推定することを考えます。カーネル密度推定法を用い、密度関数(カーネル密度推定法におけるカーネル関数)をf(\mathbf{x},t)とすれば、カーネル密度推定法の式(13)より、


\displaystyle p(\mathbf{x},t) = \frac{1}{N}\sum_{n=1}^{N} f(\mathbf{x}-\mathbf{x}_n,t-t_{n}) \tag{1}

と書けます。

さて、求めたいものは新たな入力に対する予測値yです。ここで\mathbf{x}を固定したときのtの分布p(t|\mathbf{x})を考えれば、p(t|\mathbf{x})の平均値を予測値とすれば良さそうです。よってyの値は、


\begin{eqnarray*}
y(\mathbf{x}) &=& \mathbb{E}[t | \mathbf{x}] \tag{2} \\
&=& \int_{-\infty}^{\infty} t p(t|\mathbf{x})dt   \tag{3}
\end{eqnarray*}

です。式(3)は確率密度関数に対する期待値の計算を定義どおりに行っているだけです。

条件付き確率、同時確率、周辺確率の式(1)より


\displaystyle P(X|Y) = \frac{P(X,Y)}{P(Y)} \tag{4}

ですから、式(3)は


\displaystyle  y(\mathbf{x}) = \frac{1}{p(\mathbf{x})} \int_{-\infty}^{\infty} t p(\mathbf{x},t)dt  \tag{5}

です。ここで条件付き確率、同時確率、周辺確率の式(10)より


\displaystyle p(\mathbf{x}) = \int_{-\infty}^{\infty}p(\mathbf{x},t)dt \tag{6}

ですから、式(5)に代入すれば


\displaystyle y(\mathbf{x}) = \frac{\displaystyle \int_{-\infty}^{\infty} t p(\mathbf{x},t)dt }{\displaystyle \int_{-\infty}^{\infty}p(\mathbf{x},t)dt} \tag{7}

となります。さらに式(1)を式(7)に代入すれば、


\displaystyle y(\mathbf{x}) = \frac{\displaystyle \sum_{n=1}^{N} \int_{-\infty}^{\infty} t  f(\mathbf{x}-\mathbf{x}_n,t-t_{n})dt }{\displaystyle \sum_{n=1}^{N} \int_{-\infty}^{\infty} f(\mathbf{x}-\mathbf{x}_n,t-t_{n})dt} \tag{8}

となります。積分の演算の線形性より、\sumは積分の外に出せます。

さて、ここで任意の\mathbf{x}に対して


\displaystyle \int t f(\mathbf{x}, t) dt = 0 \tag{9}

が成り立つとします。式(9)は平均値の計算です。用いた密度関数f(\mathbf{x},t)を中心0の正規分布と考えれば、とりあえずイメージが湧きそうです。で、式(9)が成り立つとき、tt-t_n\mathbf{x}\mathbf{x}-\mathbf{x}_nを代入すれば、


\begin{eqnarray*}
\displaystyle \int_{-\infty}^{\infty} (t-t_n)f(\mathbf{x}-\mathbf{x}_n, t-t_n)dt &=& 0 \tag{10} \\
\displaystyle \int_{-\infty}^{\infty} tf(\mathbf{x}-\mathbf{x}_n, t-t_n)dt  &=& t_n \int_{-\infty}^{\infty} f(\mathbf{x}-\mathbf{x}_n, t-t_n)dt  \tag{11}
\end{eqnarray*}

となり、式(11)を式(8)に代入すると、


\displaystyle y(\mathbf{x}) = \frac{\displaystyle \sum_{n=1}^{N} t_n \int_{-\infty}^{\infty} f(\mathbf{x}-\mathbf{x}_n, t-t_n)dt }{\displaystyle \sum_{n=1}^{N} \int_{-\infty}^{\infty} f(\mathbf{x}-\mathbf{x}_n,t-t_{n})dt} \tag{12}

となります。ここで


\displaystyle g(\mathbf{x}) = \int  f(\mathbf{x}, t) dt  \tag{13}

と書くことにすれば、


\displaystyle y(\mathbf{x}) = \frac{\displaystyle \sum_{n=1}^{N} g(\mathbf{x}-\mathbf{x}_n)t_n  }{\displaystyle \sum_{n=1}^{N} g(\mathbf{x}-\mathbf{x}_n)} \tag{14}

と書けます。さらに、カーネル関数を


k(\mathbf{x},\mathbf{x}^{\prime}) = \frac{\displaystyle g(\mathbf{x}-\mathbf{x}^{\prime}) }{\displaystyle \sum_{n=1}^{N} g(\mathbf{x}-\mathbf{x}_n)} \tag{15}

とおけば、


\displaystyle y(\mathbf{x}) = \sum_{n=1}^{N}k(\mathbf{x}, \mathbf{x}_n)t_n \tag{16}

となり、推定値yはカーネル関数\times定数で表されることがわかります。別のアプローチでも正則化最小二乗法からの導出と同じ結果となりました。で、式(16)を用いた回帰分析をカーネル回帰、またはNadaraya-Watsonモデルと呼ぶようです。

最後のほうはなんか騙されたような気になっちゃったんですが。例えばカーネル関数って内積として定義したんじゃなかったっけ、式(15)はカーネル関数とみなせるのか?とか(参考:カーネル法)。自分なりには、例えばg(\mathbf{x}-\mathbf{x}^{\prime})がカーネル関数なら何らかの内積として表せるはずで、それが(a_1, \cdots, a_M)^{T}(b_1, \cdots, b_M)と書けるなら、式(15)は分母をh(\mathbf{x})と書けば (\frac{a_1}{\sqrt{h(\mathbf{x})}}, \cdots, \frac{a_M}{\sqrt{h(\mathbf{x})}})^{T}(\frac{b_1}{\sqrt{h(\mathbf{x})}}, \cdots, \frac{b_M}{\sqrt{h(\mathbf{x})}})  となるはずだから、やっぱりカーネル関数、という理解をしました。合ってるのかな?あんまり自信がない。

まあ式変形はいろいろあるんですが、カーネル密度推定法で分布p(\mathbf{x},t)を推定し、\mathbf{x}を固定したときの分布の平均値を予測値とするというだけです。

次回プログラムを書いて実験してみたいと思います。 → カーネル回帰分析(2)実験結果

この実験結果を見てからのほうが、この記事でやっていることのイメージが湧きやすいかもしれません。