Як правило, функція є дійсною функцією ядра (у значенні хитрості ядра), якщо вона задовольняє двом ключовим властивостям:k ( x , y)
симетрія: k ( x , y) = k ( у, х )
позитивна напіввизначеність.
Довідка: Сторінка 4 з http://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf
Перевірка симетрії зазвичай проста шляхом огляду. Перевірка позитивної напіввизначеності аналітично може бути часом досить волохатою. Я можу придумати дві стратегії перевірки цього факту:
- (1) Перевірка на предмет представлення "внутрішнього продукту"
Розглянемо . Чи можемо ми знайти деяку таку, що ? Маленька математика показує, що , тому нехай і ми закінчили.k ( x , y) = ех + уϕ ( a )k(x,y)=ϕ(x)Tϕ(y)ex+y=exeyϕ(a)=ea
Якщо вам пощастить, ваш буде придатний до цього аналізу. Якщо ні, ви можете вдатися до варіанту (2):k()
- (2) Перевірка позитивної визначеності за допомогою випадкового моделювання.
Розглянемо функцію на -dim векторах , де кожен вектор має бути невід’ємним та дорівнювати одиниці. Це дійсне ядро?k ( → x , → y ) = ∑ D d = 1 хв ( x d , y d ) → x , → yDk(x⃗ ,y⃗ )=∑Dd=1min(xd,yd)x⃗ ,y⃗
Ми можемо перевірити це за допомогою моделювання. Накресліть набір з випадкових векторів та побудуйте матрицю Грама де . Потім перевірте, чи позитивний (напів-) визначений.{ → x i } N i = 1 K K i j = k ( → x i , → x j ) KN{x⃗ i}Ni=1KKij=k(x⃗ i,x⃗ j)K
Найкращий спосіб зробити це чисельно - це знайти власні значення матриці (використовуючи хороші існуючі числові бібліотеки, такі як scipy чи matlab), і переконатися, що найменше власне значення більше або дорівнює 0 . Якщо так, то матриця ОСЧС В іншому випадку, ви НЕ маєте дійсне ядро.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=1max(xd,yd)
Мені дуже подобається цей другий варіант, тому що це досить швидко та набагато простіше налагодження, ніж складені офіційні докази. Згідно слайду 19 Джітндри Малік , ядро перехрестя було введено в 1991 році, але до 2005 року воно не було правильним. Офіційні докази можуть бути дуже складними!