手帳と試行

学んだことをアウトプットしていきます。 日々、ノートあるのみ。

線形回帰とカーネル法

線形回帰に「カーネル法」を導入する。

尤度関数の書き換え

特徴量へのマッピングを伴う線形回帰モデルの尤度関数は次のようなものであった。

p(yX,v)=Nd(yΦv,σ2Id)exp(12σ2yΦv22)\begin{aligned} p(\bm y | \bm X, \bm v) &= \mathcal N_d (\bm y | \bm \Phi \bm v, \sigma^2 \bm I_d) \\ &\propto \exp \left( -\frac{1}{2 \sigma^2} \|\bm y - \bm \Phi \bm v \|_2^2 \right) \end{aligned}

このときのパラメータ vRp\bm v \in \mathbb R^p を、y\bm y と同じ形状のベクトル uRd\bm u \in \mathbb R^d を用いて、次のように書き換えてみよう。

v=ΦTuRp\begin{aligned} \bm v = \bm \Phi^\mathsf{T} \bm u \in \mathbb R^p \end{aligned}

すると尤度関数は次式に変化する。

p(yX,u)=Nd(yΦΦTu,σ2Id)exp(12σ2yΦΦTu22)\begin{aligned} p(\bm y | \bm X, \bm u) &= \mathcal N_d (\bm y | \bm \Phi \bm \Phi^\mathsf{T} \bm u, \sigma^2 \bm I_d) \\ &\propto \exp \left( -\frac{1}{2 \sigma^2} \|\bm y - \bm \Phi \bm \Phi^\mathsf{T} \bm u \|_2^2 \right) \end{aligned}

新たに出現した行列 ΦΦT\bm \Phi \bm \Phi^\mathsf{T} は、(i,j)(i,j) 成分が ϕi\bm \phi_iϕj\bm \phi_j の内積であるような行列であり、Φ\bm \Phiグラム行列 (Gram matrix) と呼ばれる。

ΦΦT=[ϕ1Tϕ2TϕdT][ϕ1ϕ2ϕd]Rd×d[ΦΦT]ij=ϕiTϕj\begin{gathered} & \bm \Phi \bm \Phi^\mathsf{T} = \begin{bmatrix} \bm \phi_1^\mathsf{T} \\ \bm \phi_2^\mathsf{T} \\ \vdots \\ \bm \phi_d^\mathsf{T} \end{bmatrix} \begin{bmatrix} \bm \phi_1 & \bm \phi_2 & \cdots & \bm \phi_d \end{bmatrix} \in \mathbb R^{d \times d} \\ \therefore& [\bm \Phi \bm \Phi^\mathsf{T}]_{ij} = \bm \phi_i^\mathsf{T} \bm \phi_j \end{gathered}

カーネル関数の導入

この ϕi\bm \phi_iϕj\bm \phi_j は、入力データ xi\bm x_ixj\bm x_j を特徴量にマッピングしたものである。

ϕiϕ(xi)ϕjϕ(xj)\begin{aligned} \bm \phi_i &\coloneqq \bm \phi(\bm x_i) \\ \bm \phi_j &\coloneqq \bm \phi(\bm x_j) \\ \end{aligned}

したがって、内積 ϕiϕj\bm \phi_i \bm \phi_jxi\bm x_ixj\bm x_j を入力とする関数とみなすことができる。これを k(xi,xj)k(\bm x_i, \bm x_j) と書くと、行列 ΦΦT\bm \Phi \bm \Phi^\mathsf{T}(i,j)(i,j) 成分は次のように書ける。

[ΦΦT]ij=ϕiTϕj=k(xi,xj)\begin{aligned} [\bm \Phi \bm \Phi^\mathsf{T}]_{ij} = \bm \phi_i^\mathsf{T} \bm \phi_j = k(\bm x_i, \bm x_j) \end{aligned}

ここで思い切ったことをする。

関数 k:Rd×RdRk: \mathbb R^d \times \mathbb R^d \to \mathbb R として、特徴量同士の内積のみならず、もっと一般に xi\bm x_ixj\bm x_j を入力とする関数を許すのである。これにより、わざわざ特徴量へのマッピングを経て内積計算を行なうことなく、非常に表現力の高い回帰モデルを作成できる。

この関数 kkカーネル関数 (kernel function) という。

カーネル行列

カーネル関数 k(xi,xj)k(\bm x_i, \bm x_j)(i,j)(i,j) 成分に持つ行列は、もはや内積を成分に持つという意味のグラム行列ではない。そこで ΦΦT\bm \Phi \bm \Phi^\mathsf{T} の代わりに K\bm K と書き、カーネル行列 (kernel matrix) という。

[K]ij=k(xi,xj)\begin{aligned} [\bm K]_{ij} = k(\bm x_i, \bm x_j) \end{aligned}

どのような関数でもカーネル関数として許されるわけではなく、カーネル行列 K\bm K半正定値行列 (semi-definite matrix) であるような関数でなくてはならない。

  • KT=K\bm K^\mathsf{T} = \bm K
  • uTKu0uR\bm u^\mathsf{T} \bm K \bm u \ge 0 \quad {}^\forall \bm u \in \mathbb R

これを満たすような関数 k:Rd×RdRk: \mathbb R^d \times \mathbb R^d \to \mathbb R半正定値関数 (positive semi-definite function) という。すなわちカーネル関数は半正定値関数でなくてはならない。

パラメータの推定

カーネル行列を用いると、尤度関数は次式のように書ける。

p(yX,u)=Nd(yKu,σ2Id)exp(12σ2yKu22)\begin{aligned} p(\bm y | \bm X, \bm u) ={}& \mathcal N_d (\bm y | \bm K \bm u, \sigma^2 \bm I_d) \\ \propto{}& \exp \left( -\frac{1}{2 \sigma^2} \|\bm y - \bm K \bm u \|_2^2 \right) \end{aligned}

ここにおいてパラメータは uRd \bm u \in \R^d であり、あとはこれを何らかの方法で推定するのが問題となる。