是什么导致核岭回归中的奇异矩阵错误以及如何解决它?

What causes the singular matrix error in kernel ridge regression and how to fix it?

构建 KTBoost 模型时,我收到以下错误消息:

1402                             K.flat[::K.shape[0] + 1] += self.alphaReg
1403                             self.solve_kernel=linalg.inv(K)
1404  modi = 
KernelRidge(alpha=self.alphaReg,theta=self.theta,kernel_mat=self.kernel_mat,
1405      solve_kernel=self.solve_kernel,kernel=self.kernel,n_neighbors=self.n_neighbors


/data/anaconda3/lib/python3.7/site-packages/scipy/linalg/basic.py in inv(a, overwrite_a, 
check_finite)
977         inv_a, info = getri(lu, piv, lwork=lwork, overwrite_lu=1)
978     if info > 0:
979         raise LinAlgError("singular matrix")
980     if info < 0:
981         raise ValueError('illegal value in %d-th argument of internal '

LinAlgError: singular matrix

我知道这通常是由重复或高度相关的变量引起的,因此在将数据集提供给函数之前排除了这些变量;但是,问题还是出现了。

此外,向数据集添加一个小的 运行dom 噪声也不起作用;但是,如果我创建了一个在 (0, 1) 之间具有 运行dom 数字的虚拟变量并将其附加到数据集,问题就消失了,模型 运行 很好。

有人可以告诉我导致这个问题的原因吗?

奇异矩阵很可能是由于彼此非常接近(或重复)的特征。我假设您已尝试向特征添加噪声,因为向标签添加噪声对此没有帮助。在任何情况下,也可能有重复的特征,但需要使用参数 'alphaReg' 添加一些正则化。该值被添加到内核矩阵的对角线上,从而有助于避免奇异矩阵。

您为正则化参数设置了什么值 'alphaReg'?在 0.1.18 版本之前,默认值被错误地设置为 0 而不是 1,这是文档所说的,也是 scikit-learn 使用的。我现在已经纠正了这一点。请检查使用KTBoost版本> = 0.1.19时是否仍然出现错误?

如果这不能解决问题,能否提供一个最小的工作示例以及数据和代码来重现错误?不然很难说到底是怎么回事。

以后,您也可以在 https://github.com/fabsig/KTBoost 上提出问题。那里会更快得到答复。