thumbnail

カーネルリッジ回帰の数式の導出方法を徹底解説

カーネルリッジ回帰の数式を導出・解説します。流れが詳しくわかるよう、丁寧に式変形するよう心がけております。

概要

ただの線形回帰ではデータが線形分布しているときにしか適用できませんが、高次元空間へ写像して、その空間で線形回帰をすると、元の空間では非線形回帰となります。これから説明するカーネルリッジ回帰も非線形回帰の1つです。

カーネルリッジ回帰を理解するには、リッジ回帰の理解が最低でも必要です。次のページで説明しているため、適宜参考にしてください。

数式

リッジ回帰を非線形に対応させる

データをN次元ベクトルx\mathbf{x}で表す。

元のデータx\mathbf{x}が存在する空間をΩ\Omegaとし、Ω\Omegaから高次元特徴空間HHへの写像をϕ:ΩH\boldsymbol{\phi}:\Omega \to Hとする。
つまり、元のデータxΩ\mathbf{x}\in\Omegaが関数ϕ\boldsymbol{\phi}によって、ϕ(x)H\boldsymbol{\phi}(\mathbf{x})\in{H}に移されるとする。
ここで、ϕ(x)\boldsymbol{\phi}(\mathbf{x})自体もベクトルであることに注意する。

NN個のデータ{xi}i=1N\lbrace\mathbf{x}_i\rbrace_{i=1}^Nが特徴空間HHへ写像されたデータ点{ϕ(xi)}i=1N\lbrace\boldsymbol{\phi}(\mathbf{x}_i)\rbrace_{i=1}^Nを、次の行列でまとめて表示する。

Φ=[ϕ(x1)ϕ(xN)]\boldsymbol{\Phi}=\begin{bmatrix} \boldsymbol{\phi}(\mathbf{x}_1)^\top \\ \vdots \\ \boldsymbol{\phi}(\mathbf{x}_N)^\top \end{bmatrix}

ここで、元の空間Ω\Omegaでの正則化項付きの2乗誤差は、次のとおりであった。詳しくは、リッジ回帰のページを閲覧されたし。

i=1N(yiaxi)2+λa22\sum_{i=1}^N(y_i-\mathbf{a}^\top\mathbf{x}_i)^2+\lambda\|\mathbf{a}\|_2^2\cdots①

そして、これを最小化するaは、次のとおりであった。

a=(XX+λI)1Xy\mathbf{a}=(\mathbf{X}^\top\mathbf{X}+\lambda\mathbf{I})^{-1}\mathbf{X}^\top\mathbf{y}\cdots②

特徴空間H上では、xi\mathbf{x}_iϕ(xi)\boldsymbol{\phi}(\mathbf{x}_i)に、X\mathbf{X}Φ\boldsymbol{\Phi}となるだけなので、①及び②の特徴空間での式は、次の③及び④で表せる。

i=1N(yiaϕ(xi))2+λa22\sum_{i=1}^N(y_i-\mathbf{a}^\top\boldsymbol{\phi}(\mathbf{x}_i))^2+\lambda\|\mathbf{a}\|_2^2\cdots③
a=(ΦΦ+λI)1Φy\mathbf{a}=(\boldsymbol{\Phi}^\top\boldsymbol{\Phi}+\lambda\mathbf{I})^{-1}\boldsymbol{\Phi}^\top\mathbf{y}\cdots④

カーネルに置き換える

式③の内積aϕ(xi)\mathbf{a}^\top\boldsymbol{\phi}(\mathbf{x}_i)において、{ϕ(xi)}i=1N\{\boldsymbol{\phi}(\mathbf{x}_i)\}_{i=1}^Nの張る空間をH0H_0としたとき、H=H0H0H=H_0\oplus{H}_0^\botと分解して、a=a0a(a0H0,aH0)\mathbf{a}=\mathbf{a}_0\oplus\mathbf{a}_\bot(\mathbf{a}_0\in{H}_0, \mathbf{a}_\bot\in{H}_0^\bot)とする。

よってaϕ~(xi)\mathbf{a}_\bot\bot\tilde{\boldsymbol{\phi}}(\mathbf{x}_i)となり、③式の内積計算において、a\mathbf{a}a\mathbf{a}_\bot成分と、それに対応するϕ(xi)\boldsymbol{\phi}(\mathbf{x}_i)の成分の項の積は直行するので内積0となり、③式の評価と関係がなくなる。したがってa\mathbf{a}H0H_0の元として表せれば十分である。
よってϕ(xi)\boldsymbol{\phi}(\mathbf{x}_i)の線型結合で表せれば良いので、

a=i=1Nciϕ(xi)\mathbf{a}=\sum_{i=1}^Nc_i\boldsymbol{\phi}(\mathbf{x}_i)

と表せる。したがって、

aϕ(xi)=j=1Ncjϕ(xj)ϕ(xi)=j=1NcjKi,j\begin{align*} \mathbf{a}^\top\boldsymbol{\phi}(\mathbf{x}_i)&=\sum_{j=1}^Nc_j\boldsymbol{\phi}(\mathbf{x}_j)^\top\boldsymbol{\phi}(\mathbf{x}_i)\\ &=\sum_{j=1}^Nc_jK_{i,j} \end{align*}

ここで、Ki,jK_{i,j}はカーネル行列(グラム行列)の(i,j)(i,j)成分である。

また、

a2=i=1Nciϕ(xi),i=1Nciϕ(xi)=iciϕ(xi)jcjϕ(xj)=i,jciϕ(xj)ϕ(xj)cj=i,jciKi,jcj=cKc\begin{align*}\|\mathbf{a}\|^2&=\Bigg\langle\sum_{i=1}^Nc_i\boldsymbol{\phi}(\mathbf{x}_i),\sum_{i=1}^Nc_i\boldsymbol{\phi}(\mathbf{x}_i)\Bigg\rangle \\ &= \sum_{i}c_i\boldsymbol{\phi}(\mathbf{x}_i)^\top\sum_{j}c_j\boldsymbol{\phi}(\mathbf{x}_j)\\ &= \sum_{i,j}c_i\boldsymbol{\phi}(\mathbf{x}_j)^\top\boldsymbol{\phi}(\mathbf{x}_j)c_j\\&=\sum_{i,j}c_iK_{i,j}c_j \\ &= \mathbf{c}^\top\mathbf{K}\mathbf{c}\end{align*}

よって、③式は次のように書き換えられる。

i=1N(yiaϕ(xi))2+λa22=i=1N(yij=1NcjKi,j)2+λcKc=Kcy2+λcKc\begin{align*}&\sum_{i=1}^N(y_i-\mathbf{a}^\top\boldsymbol{\phi}(\mathbf{x}_i))^2+\lambda\|\mathbf{a}\|_2^2 \\ &=\sum_{i=1}^N(y_i-\sum_{j=1}^Nc_jK_{i,j})^2+\lambda\mathbf{c}^\top\mathbf{K}\mathbf{c}\\ &=\|\mathbf{K}\mathbf{c}-\mathbf{y}\|^2+\lambda\mathbf{c}^\top\mathbf{K}\mathbf{c}\end{align*}

この式をc\mathbf{c}で微分して、0\mathbf{0}と置くと

0=c(Kcy2+λcKc)=2K(Kcy)+2λKc=K(Kcy)+Kλc(K=KK)=K1K(Kcy)+K1Kλc=(Kcy)+λcKcλc=y(KλI)c=yc=(KλI)1y\begin{align*} \mathbf{0}&=\nabla_{\mathbf{c}}(\|\mathbf{K}\mathbf{c}-\mathbf{y}\|^2+\lambda\mathbf{c}^\top\mathbf{K}\mathbf{c}) \\&=2\mathbf{K}^\top(\mathbf{K}\mathbf{c}-\mathbf{y})+2\lambda\mathbf{K}\mathbf{c}\\&=\mathbf{K}(\mathbf{K}\mathbf{c}-\mathbf{y})+\mathbf{K}\lambda\mathbf{c}\quad(\because \mathbf{K}=\mathbf{K}\mathbf{K}^\top)\\&=\mathbf{K}^{-1}\mathbf{K}(\mathbf{K}\mathbf{c}-\mathbf{y})+\mathbf{K}^{-1}\mathbf{K}\lambda\mathbf{c}\\&=(\mathbf{K}\mathbf{c}-\mathbf{y})+\lambda\mathbf{c}\\\mathbf{K}\mathbf{c}-\lambda\mathbf{c}&=\mathbf{y}\\(\mathbf{K}-\lambda\mathbf{I})\mathbf{c}&=\mathbf{y}\\\therefore \mathbf{c}&=(\mathbf{K}-\lambda\mathbf{I})^{-1}\mathbf{y}\end{align*}

なお、行列の微分による式変形がわからない方は、以下の記事を参考にされたし。

予測関数

よって、予測関数は次のようになる

y(x)=aϕ(x)=iciϕ(xi)ϕ(x)=icik(xi,x)=kc=k(KλI)1y\begin{align*} y(\mathbf{x})&=\mathbf{a}^\top\boldsymbol{\phi}(\mathbf{x})\\&=\sum_ic_i\boldsymbol{\phi}(\mathbf{x}_i)^\top\boldsymbol{\phi}(\mathbf{x})\\&=\sum_ic_ik(\mathbf{x}_i,\mathbf{x})\\&=\mathbf{k}^\top\mathbf{c}\\&=\mathbf{k}^\top(\mathbf{K}-\lambda\mathbf{I})^{-1}\mathbf{y} \end{align*}

ただしk(,)k(・,・)はカーネル関数で、それをN個並べたベクトルがk\mathbf{k}である。