是什么导致核岭回归中的奇异矩阵错误以及如何解决它?
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 上提出问题。那里会更快得到答复。
构建 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 上提出问题。那里会更快得到答复。