多项式内核不是PSD?

时间:2018-11-08 04:06:38

标签: python machine-learning svm kernel-methods

我目前正在低级学习各种机器学习方法。由于多项式内核

  

K(x,z)=(1 + x ^ T * z)^ d

是更常用的内核之一,我假设该内核必须为一组固定的数据{x1,...,xn}生成一个正(半)定矩阵。 但是,在我的实现中,情况似乎并非如此,如以下示例所示:

charArray[0] = (char) index;

输出应为

import numpy as np    
np.random.seed(93)
x=np.random.uniform(0,1,5)
#Assuming d=1
kernel=(1+x[:,None]@x.T[None,:])
np.linalg.eigvals(kernel)

我也得到了d> 2的负特征值。 我在这里完全误解了吗?还是多项式内核根本不是PSD?

编辑:在以前的版本中,我使用[ 6.9463439e+00 1.6070016e-01 9.5388039e-08 -1.5821310e-08 -3.7724433e-08] 来减少计算时间,这会导致更多的负特征值(我相信是由于数值不稳定性,如@ user2357112所述)。我想这是一个很好的例子,精度很重要吗?由于即使对于float64精度,特征值仍然会出现负值,因此接下来的问题将是如何避免这种数值不稳定性?

0 个答案:

没有答案