Généralement, une fonction k ( x , y) est une fonction noyau valide (au sens de l'astuce noyau) si elle satisfait deux propriétés clés:
symétrie: k ( x , y) = k ( y, x )
semi-définitif positif.
Référence: page 4 de http://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf
La vérification de la symétrie est généralement simple par inspection. La vérification analytique de la semi-définition positive peut parfois être assez velue. Je peux penser à deux stratégies pour vérifier ce fait:
- (1) Recherche d'une représentation "produit intérieur"
Considérons . Peut - on trouver un φ ( a ) de telle sorte que k ( x , y ) = φ ( x ) T φ ( y ) ? Un peu de calcul montre que e x + y = e x e y , alors laissez ϕ ( a ) = e a et nous avons terminé.k ( x , y) = ex+yϕ(a)k(x,y)=ϕ(x)Tϕ(y)ex+y=exeyϕ(a)=ea
Si vous avez de la chance, votre prêtera à cette analyse. Sinon, vous pouvez recourir à l'option (2):k()
- (2) Vérification de la définition positive par simulation aléatoire.
Considérons la fonction sur les vecteurs -dim k ( → x , → y ) = ∑ D d = 1 min ( x d , y d ) , où chaque vecteur → x , → y doit être non négatif et somme à un. Est-ce un noyau valide?Dk(x⃗ ,y⃗ )=∑Dd=1min(xd,yd)x⃗ ,y⃗
Nous pouvons vérifier cela par simulation. Dessinez un ensemble de vecteurs aléatoires { → x i } N i = 1 et construisez une matrice de Gram K où K i j = k ( → x i , → x j ) . Vérifiez ensuite si K est positif (semi-) défini.N{x⃗ i}Ni=1KKij=k(x⃗ i,x⃗ j)K
La meilleure façon de le faire numériquement est de trouver les valeurs propres de la matrice (en utilisant de bonnes bibliothèques numériques existantes comme scipy ou matlab), et de vérifier que la plus petite valeur propre est supérieure ou égale à 0 . Si oui, la matrice est psd Sinon, vous n'avez pas de noyau valide.K
Exemple de code 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) ) );
Il s'agit d'un test très simple, mais soyez prudent . Si le test échoue, vous pouvez être sûr que le noyau n'est pas valide, mais s'il réussit, le noyau pourrait ne pas être valide.
Je trouve que peu importe le nombre de matrices aléatoires que je génère et indépendamment de etND , ce noyau passe le test, il est donc probablement semi-défini positif (en fait, il s'agit du noyau d'intersection d'histogramme bien connu , et il a été prouvé valide).
Cependant, le même test sur k(x⃗ ,y⃗ )=∑Dd=1max(xd,yd) échoue à chaque essai que je lui ai donné (au moins 20) . Il est donc très certainement invalide et assez facile à vérifier.
J'aime vraiment cette deuxième option car elle est assez rapide et beaucoup plus facile à déboguer que les preuves formelles compilées. Selon la diapositive 19 de Jitendra Malik , le noyau d'intersection a été introduit en 1991 mais n'a pas été vérifié avant 2005. Les preuves formelles peuvent être très difficiles!