Обычно функция является допустимой функцией ядра (в смысле трюка ядра), если она удовлетворяет двум ключевым свойствам:k(x,y)
симметрия: k(x,y)=k(y,x)
положительная полуопределенность.
Ссылка: страница 4 из http://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf
Проверка симметрии обычно не вызывает затруднений при осмотре. Проверка положительной полуопределенности аналитически может иногда быть довольно волосатой. Я могу придумать две стратегии для проверки этого факта:
- (1) Проверка представления «внутреннего продукта»
Рассмотрим . Можем ли мы найти некоторые такие, что ? Небольшая математика показывает, что , поэтому пусть и все готово. ϕ ( 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) Проверка положительной определенности путем случайного моделирования.
Рассмотрим функцию на дим-векторах , где каждый вектор должен быть неотрицательным и иметь сумму, равную единице. Это действительное ядро?Dk(x⃗ ,y⃗ )=∑Dd=1min(xd,yd)x⃗ ,y⃗
Мы можем проверить это с помощью симуляции. Нарисуйте набор из случайных векторов и постройте матрицу Грама где . Затем проверьте, является ли положительным (полу) определенным.N{x⃗ i}Ni=1KKij=k(x⃗ i,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) ) );
Это очень простой тест, но будьте осторожны . Если тест не пройден, то вы можете быть уверены , что ядро не действует, но если она проходит ядро еще не может быть действительным.
Я обнаружил, что независимо от того, сколько случайных матриц я генерирую и независимо от и , это ядро проходит тест, поэтому оно, вероятно, является положительным полуопределенным (на самом деле это хорошо известное ядро пересечения гистограммы , и оно было доказано действует).ND
Однако один и тот же тест для не удался при каждой попытке, которую я дал (не менее 20) , Так что это, безусловно, неверно, и довольно легко проверить.k(x⃗ ,y⃗ )=∑Dd=1max(xd,yd)
Мне очень нравится этот второй вариант, потому что он довольно быстрый и намного легче отлаживается, чем собранные формальные доказательства. Согласно слайду 19 Джитендры Малик , ядро пересечения было введено в 1991 году, но до 2005 года не было проверено. Формальные доказательства могут быть очень сложными!