プログラミング

カーネル法ってなんぞや?

非線形な関係性を線形な手法を用いて表現できるのがカーネル法です。

カーネル法と言われてもピンとこないため、その意味を噛み砕いてみます。[逐次更新]

まずは高次元空間に写像する

データがプロットされた2次元平面を紙に例えます。

紙をくしゃっとして、紙面に対して垂直な方向に凹凸が生じたものを作ります。こうすることで、紙にのっていたプロットは3次元の座標を持つようになります。

紙をくしゃっとするため、紙面に平行なx, y軸の値は少し変わりますし、紙面に垂直なz軸方向に新たに値をもつことになります。こうやって、2次元のデータを3次元空間に移すことができます。

そして、くしゃっとした後の形状によっては、3次元空間でデータを平らな平面で切ってうまく分離できるようになります。

繰り返しになりますが、紙をくしゃっとするともともとの2次元平面にあるデータ1つ1つの座標が変わります。例えば、もともと(1, 2)という座標だったデータが、紙をくしゃっとすることで(2, 1, 3)という座標に変わります。

紙をくしゃっとした後の形状が変われば、座標も変わります。

このように別の空間に座標を移すことを写像といい、紙をどんな感じにくしゃっとするかを写像関数と言います。例えば、もとの空間で(x, y)という座標があったとしたら、紙をくしゃっとしたあとは(2x, 0.5y, x+y)という座標に変わる、といったものです。

移る前のデータがX、紙をどんな感じにくしゃっとしたかをΦとすると、移った後のデータはΦ(X)で表されます。X=(1, 2)なら、Φ(X)=(2*1, 0.5*2, 1+2)=(2, 1, 3)となります。

今回は2次元空間→3次元空間でしたが、もちろん20次元空間→21次元空間、2次元→4次元といった写像も可能です。

データをうまく分離できる境界を引く

データが10個あって、それぞれΦ(X1)、・・・Φ(X10)とし、これらをうまく分離できる平面を引きます。

平面でうまく分離することができるように、写像関数Φの中身をチューニングするイメージです。どんな感じに紙をくしゃっとしたら良いかを計算します。

もし、うまく分離できる境界面が引けたら、その平面をもとの2次元空間に戻します。つまり、くしゃっとした紙を真っ平らに戻すのと同じ動きを平面にも施します。

これにより、もとの2次元空間でデータをうまく分離できる曲線が得られることになります。

カーネルトリック

カーネル法ではパラメータを決めません。モデルをつくるトレインデータが10個あり([X1, y1], ・・・[X10, y10])、そこへyが未知のテストデータ(X11)がきたら、y11 = (X1とX11の近さ)x y1 + ・・・+ (X10とX11の近さ)x y10と。プロットが近いやつのyを多めに取り込んでテストデータのyを予測する。XnとX11の近さを表す関数がカーネル関数。

%d人のブロガーが「いいね」をつけました。