在机器学习和模式识别的上下文中,有一个称为Kernel Trick的概念。在要求我确定一个函数是否可以是内核函数的问题面前,应该怎么做?我是否应该首先检查它们是否为多项式,RBF和高斯等三或四个内核函数的形式?那我该怎么办?我应该证明它是肯定的吗?有人可以解决一个示例,以显示针对此类问题的分步解决方案吗?例如像,是内核函数(假设我们不知道它是一个高斯内核)?
在机器学习和模式识别的上下文中,有一个称为Kernel Trick的概念。在要求我确定一个函数是否可以是内核函数的问题面前,应该怎么做?我是否应该首先检查它们是否为多项式,RBF和高斯等三或四个内核函数的形式?那我该怎么办?我应该证明它是肯定的吗?有人可以解决一个示例,以显示针对此类问题的分步解决方案吗?例如像,是内核函数(假设我们不知道它是一个高斯内核)?
Answers:
通常,函数)如果满足两个关键属性,则它是有效的内核函数(就内核技巧而言):
对称性:
正半定性。
参考:http://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf的第4页
通过检查通常可以很容易地检查对称性。有时,分析验证正半定性可能会非常麻烦。我可以想到两种策略来检查这一事实:
考虑。我们可以找到一些使得吗?一点数学运算表明,所以让完成。 ϕ (a )k (x ,y )= ϕ (x )T ϕ (y )e x + y = e x e y ϕ (a )= e a
如果幸运的话,您的将适合此分析。如果不是,则可以采用选项(2):
考虑维矢量,其中每个矢量必须为非负数且总和为1。这是有效的内核吗?k (→ x,→ y)= ∑ D d = 1分钟(x d,y d)→ x,→ y
我们可以通过仿真检查。绘制一组随机向量并建立一个Gram矩阵,其中。然后检查是否为正(半)定值。{ → x i } N i = 1 K K i j = k (→ x i,→ x j)
最好的数字方式是找到矩阵的特征值(使用现有的良好数值库,例如scipy或matlab),并验证最小特征值是否大于或等于0。如果是,则矩阵为psd。否则,您没有有效的内核。
示例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) ) );
这是一个非常简单的测试,但要小心。如果测试失败,你可以肯定的内核是不是有效的,但如果它通过内核仍然可能不会有效。
我发现无论我生成多少个随机矩阵且无论和为何,该内核都可以通过测试,因此它很可能是正半定的(实际上,这是众所周知的直方图相交内核,并且已被证明)有效)。
但是,对的相同测试在我尝试的每次尝试中都失败了(至少20次) 。因此,它绝对是无效的,并且很容易验证。
我真的很喜欢第二种选择,因为它比编译的形式证明相当快速且易于调试。根据Jitendra Malik的第19张幻灯片,交集内核于1991年引入,但直到2005年才被证明是正确的。形式证明可能非常具有挑战性!