一般的に、関数は、2つの重要な特性を満たす場合、(カーネルトリックの意味で有効なカーネル関数です。k(x,y)
対称性: k(x,y)=k(y,x)
正の半正定性。
参照:http ://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdfの4ページ
通常、対称性の検査は検査によって簡単です。肯定的な半正定性を分析的に検証することは、時には非常に困難です。この事実を確認するための2つの戦略を考えることができます。
考えます。ようなを見つけることができますか?ちょっとした計算でであるため、で完了です。 ϕ (a )k (x 、y )= ϕ (x )T ϕ (y )e x + y = e x e y ϕ (a )= e ak(x,y)=ex+yϕ(a)k(x,y)=ϕ(x)Tϕ(y)ex+y=exeyϕ(a)=ea
運がよければ、はこの分析に適しています。そうでない場合は、オプション(2)を使用できます。k()
- (2)ランダムシミュレーションによる正定性の確認。
上の機能を考慮して -dimベクトル各ベクトル、は非負で、合計が1でなければなりません。これは有効なカーネルですか?k (→ x、→ y)= ∑ D d = 1 min (x d、y d)→ x、→ yDk (x⃗ 、y⃗ )= ∑Dd= 1分(xd、yd)バツ⃗ 、y⃗
これはシミュレーションで確認できます。一連の描画ランダムベクトルをおよびグラムマトリックス構築。次に、が正(半)定であることを確認します。{ → x i } N i = 1 K K i j = k (→ x i、→ x j)KN{ x⃗ 私}Ni = 1KK私はj= k (x⃗ 私、x⃗ j)K
これを数値的に行う最良の方法は、(scipyやmatlabのような既存の優れた数値ライブラリを使用して)行列の固有値を見つけ、最小の固有値が0以上であることを確認することです。はいの場合、行列はpsd です。それ以外の場合、有効なカーネルがありません。K
サンプルのMATLAB / Octaveコード:
D=5;
N=100;
X = zeros(N,D);
for n = 1:N
xcur = rand(1,D);
X(n,:) = xcur/sum(xcur);
end
K = zeros(N,N);
for n = 1:N; for m = 1:N
K(n,m) = sum( min( X(n,:), X(m,:) ) );
end; end;
disp( min( eig(K) ) );
これは非常に簡単なテストですが、注意してください。テストが失敗した場合、カーネルが無効であることを確認できますが、合格した場合でもカーネルは有効ではない可能性があります。
と関係なく、生成するランダム行列の数に関係なく、このカーネルはテストに合格するため、おそらく半正定値であることがわかります(実際、これはよく知られているヒストグラム交差カーネルであり、証明されています有効)。DND
ただし、したすべての試行で失敗します(少なくとも20) 。したがって、それは間違いなく無効であり、検証するのは非常に簡単です。k (x⃗ 、y⃗ )= ∑Dd= 1m a x (xd、yd)
この2番目のオプションは、コンパイルされた形式的な証明よりも非常に高速でデバッグがはるかに簡単なので、本当に気に入っています。Jitendra Malikのスライド19によると、交差カーネルは1991年に導入されましたが、2005年まで正しいことが証明されていませんでした。形式的な証明は非常に難しい場合があります。