4

我试图创建一个循环来找出装有 Ridge 回归模型的波士顿住房数据集的训练集和测试集的准确度分数的变化。

这是 for 循环:

for i in range(1,20):
        Ridge(alpha = 1/(10**i)).fit(X_train,y_train)

它显示从 i=13 开始的警告。

警告是:

LinAlgWarning: Ill-conditioned matrix (rcond=6.45912e-17): result may not be accurate.
  overwrite_a=True).T

这个警告的含义是什么?有可能摆脱它吗?

我检查了没有循环单独执行它,仍然没有帮助。

#importing libraries and packages

import mglearn
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge

#importing boston housing dataset from mglearn
X,y = mglearn.datasets.load_extended_boston()

#Splitting the dataset
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=0)

#Fitting the training data using Ridge model with alpha = 1/(10**13)
rd = Ridge(alpha = 1/(10**13)).fit(X_train,y_train)

对于 i 的任何值,不应显示上述警告。

4

2 回答 2

7

尝试使用标准化拟合您的 Ridge 模型Ridge(normalize=True):我遇到了和你一样的错误,这是因为我的特征包括非常大和非常小的值,这导致用于拟合模型的底层线性代数求解器出现问题。

于 2020-04-07T11:16:51.750 回答
1

在岭回归中,您在内核矩阵中构建,其中包含所有训练标签之间的相似性。岭回归拟合的参数可以从这个核矩阵和你的训练标签中找到。例如,如果您有两个极其相似的样本,则要求解的矩阵将被过度确定。为了解决这个问题,可以在对角线上添加一个小值,这个值就是alpha你给的参数。所以发生的情况是,当您的alpha值接近 0 时,矩阵更有可能被过度确定(但取决于您的数据的性质)。但这应该显示为较差的交叉验证准确性,因此您不必担心太多。

所以总而言之,如果你保持alpha高于警告阈值,你会没事的,并且在交叉验证过程中,alpha无论如何,该值可能会被选择为高于此阈值。

于 2019-10-15T11:26:54.637 回答