スポンサーリンク
スポンサーリンク

カーネル化

カーネル法 カーネル法

既存手法をカーネル法にする手法の事をカーネル化と呼びます。
この手法では既存手法の計算を流用して、表現力の高いモデルを作ることが出来ます。カーネル化において自分がやる必要があることは、カーネルの設計だけだけです。
カーネル化を理解するための例として、ロジスティック回帰とリッジ回帰を使います。
カーネル化した手法で、カーネルを変えるとモデルがどう変わるか実験してみます。
カーネル法の入門記事があるので読んでみてください。カーネルとはそもそも何か、についての記事もあるのでどうぞ。

カーネル法入門
カーネル法の入門記事です。カーネル法を使うメリットデメリットを、回帰分析、カーネル回帰、カーネルリッジ回帰を例に出して簡単に、分かりやすく解説します。。
カーネルの正体
カーネル法では、カーネルという魔法の道具と、カーネルトリックという技でモデルの表現力を劇的に上げる事が出来ます。しかし、カーネルとは一体何なのでしょうか。その疑問を正定値性、再生核ヒルベルト空間という概念で解決します
スポンサーリンク

リッジ回帰のカーネル化

リッジ回帰分析の復習はこちらからどうぞ。

リッジ回帰分析
リッジ回帰の解説をします。重回帰分析にペナルティを課すモデルです。これによって、パラメーター全体が大きくなることが抑えられ、データ自体のバラツキを無視してくれるようになります。さよなら過学習。

未知のデータの組を\( (y, x ) \)として、既に持っているデータを行列\( X \)と \(\vec{y} \)とします。リッジ回帰のモデルと誤差関数は以下です。
$$\begin{eqnarray}
y&=&\vec{\beta} \cdot \vec{x} \\
S &=& \|\vec{y}- X \vec{\beta} \|^2 +\lambda \| \vec{\beta} \| ^2
\end{eqnarray} $$
Sを最小化するパラメーター\( \vec{\beta} \)を求めることで予測式をたてました。
カーネルを \( K=\{ k_{ij} \} = k (\vec{x_i} , \vec{x_j}) , \vec{k}(x)_i = k(x, x_i ) \) で表します。カーネルリッジ回帰のモデルと誤差関数は以下の式です。
$$\begin{eqnarray}
y_K &=& \vec{\alpha} \cdot \vec{k}(x)\\
S_k &=& \|\vec{y}- K \vec{\alpha} \|^2 +\lambda \vec{\alpha} ^{T} K \vec{\alpha}
\end{eqnarray} $$
リッジ回帰とカーネルリッジ回帰の式を比べます。初めにモデルを見ましょう。
モデルの違いは、未知データ\(\vec{x} \)をそのまま使うか、カーネルによるベクトル \(\vec{k} (x) \) を使うかの違いです。
誤差項の部分を見ましょう。
2乗誤差の部分は、モデルの違いだけです。 \( L^2 \)項によるペナルティは、 このままでは良く分かりません。内積は、計量と呼ばれる行列で書けた事を思い出しましょう。
\begin{eqnarray}
\ \| \vec{\beta} \| ^2&=& \vec{\beta } ^{T} I \vec{\beta } \\
\| \vec{\alpha} \| _K ^2 &=& \vec{\alpha } ^{T} K \vec{\alpha }
\end{eqnarray}
上の式を比べると、リッジ回帰の場合は計量として単位行列を使い、カーネル化した時は、計量としてカーネルを使っていることが分かります。
行列を使って定義する事が出来たことを忘れた方はこちらの記事をどうぞ。

リッジ回帰をカーネル化することで、見かけ上は誤差関数やモデル式が大きく変わったように見えます。しかし、カーネル化するというのは、以下の2つの事を行うだけです。

  • データを使って計算している部分は、カーネル行列、ベクトルに変える
  • 内積は、計量 1 をカーネル行列に変える。

この議論を踏まえて、ロジスティック回帰をカーネル化してみましょう。ロジスティック回帰の復習をしておきたい人はこちらを先にどうぞ。

ロジスティック回帰
予測したい値が連続値でなく、離散的な値だったり名前だったりすることがままあります。そのような問題を分類問題と言います。分類問題の手法を紹介します。ロジスティック回帰とはロジスティック回帰は説明変数から0か1を出力する手法で...

ロジスティック回帰のカーネル化

ロジスティック回帰のモデルは、以下の式でした。
$$\begin{eqnarray}
y &=& \sigma( \vec{w} \cdot \vec{x} ) \\
L &=& -\sum ( y_i \ln \sigma( \vec{w} \cdot \vec{x_i} ) + (1-y_i)\ln ( 1- \sigma( \vec{w} \cdot \vec{x_i} ) )
\end{eqnarray}$$
ただし
$$\begin{eqnarray}
\sigma(x) = \frac{1}{1+\exp(-x) }
\end{eqnarray}$$
このモデルをカーネル化するにはどうしたら良いでしょう?
注目すべきは、全データX と全ラベル\( \vec{y} \)に対しては、モデルは次のようになる事です。
$$\begin{eqnarray}
\vec{y} &=& \sigma( X \vec{w} )
\end{eqnarray}$$
ベクトルを指数関数にいれると、ベクトルの成分毎の指数関数とが出てくるいう事にしてください。カーネル化したかったらXとKを入れ替えろという事で、カーネル化したモデルは以下のようになります。
$$\begin{eqnarray}
\vec{y} &=& \sigma( K \vec{w} )
\end{eqnarray}$$
i番目のデータの予測式は、Kのi列目のベクトル2 を\(\vec{K_i} \)として、
$$\begin{eqnarray}
y_i &=& \sigma( \vec{K_i} \cdot \vec{w} )
\end{eqnarray}$$
です。これをロジスティック回帰の誤差関数にいれて、カーネルロジスティック回帰のモデルは以下になります。
$$\begin{eqnarray}
\vec{y} &=& \sigma(K \vec{w} ) \\
L &=& -\sum ( y_i \ln \sigma( \vec{w} \cdot \vec{K_i} ) + (1-y_i)\ln ( 1- \sigma( \vec{w} \cdot \vec{K_i} ) )
\end{eqnarray}$$
パラメーターの勾配の計算に関して言えば、カーネル化の前後で計算方法は全く変わりません。全データXを選んできたカーネルKに変えるだけです。
お手軽にカーネルを取り換えて計算できるので、数種類のカーネルで実験してみましょう。カーネルのパラメーターの調整は適当なので、それぞれのカーネルのベストな結果を出しているわけではありませんのでご注意を。

カーネル化の実験

おなじみのtitanic 号データで実験してみましょう。ロジスティック回帰の精度を基準値として、カーネルロジスティック回帰が効果ありなのか判断してみましょう。
初めに、使うカーネルを紹介しておきます。

1.線形カーネル
$$\begin{eqnarray}
k(x,y) =x \cdot y
\end{eqnarray}$$
2.RBFカーネル(ガウシアンカーネル)
$$\begin{eqnarray}
k(x,y) =\exp(\gamma \| x-y \|^2 )
\end{eqnarray}$$
3.フィッシャーカーネル
$$\begin{eqnarray}
k(x,y) = s(x|\theta) \cdot s(y|\theta)
\end{eqnarray}$$
ただし、\( s(x|\theta ) \) はFisher スコア 3

Fisher スコアを知らない人はこちらをどうぞ。統計量の推定の精度に関する大事な量です。

Fisher情報量(Fisher情報行列)
Fisher 情報量(Fisher 情報行列)の定義と、その役割について解説します。統計量の推定をした時、推定量の分散の大きさについての情報を与えてくれるのがFisher 情報量(Fisher 情報行列)です。

結果を貼ってしまいます。

lロジスティック回帰
Linea カーネル
RBF カーネル
Fisher カーネル

行列の対角成分が大きい程正確な予測をしているわけですが、ロジスティック回帰が一番駄目です。カーネル法は大体似たり寄ったりな感じになっています。パラメーターをしっかり調整すればそれぞれのカーネルの個性が表れてくるでしょう。正直、Fisher カーネルはどうなるのか全く予想できなかったので、案外良い結果で驚いています。

まとめ

  • 既存手法をカーネル化出来る。
  • カーネル化とは、生データをカーネル行列やベクトルに置き換える作業の事。
  • カーネル化することで、モデルの表現力が向上する、
  • 使うカーネルは、自分で選ぶ必要がある。

次に読むべき記事はこちらです。

https://masamunetogetoge.com/kernel

  1. カーネルは、定義から半正定値対称行列なので、計量として使えます。
  2. Kは対称なので、列でも行でもいいんですが。
  3. Fisher カーネルを作るには、確率分布が必要ですが、多次元の正規分布をつかいました。自由度はtitanic データの説明変数の数で、平均は説明変数の平均、分散はデータ全体の共分散行列です。多次元正規分布に関しては、別の記事で触れます。
タイトルとURLをコピーしました