Vin*_*nay 4 python scikit-learn linearmodels
我试图创建一个循环来找出装有 Ridge 回归模型的波士顿住房数据集的训练集和测试集的准确度分数的变化。
这是 for 循环:
for i in range(1,20):
Ridge(alpha = 1/(10**i)).fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)
它显示了从 i=13 开始的警告。
警告是:
LinAlgWarning: Ill-conditioned matrix (rcond=6.45912e-17): result may not be accurate.
overwrite_a=True).T
Run Code Online (Sandbox Code Playgroud)
这个警告是什么意思?有可能摆脱它吗?
我检查没有循环单独执行它,仍然没有帮助。
#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)
Run Code Online (Sandbox Code Playgroud)
不应为 i 的任何值显示上述警告。
尝试用标准化配件的型号岭:Ridge(normalize=True)。我遇到了和你一样的错误,这是因为我的特征包括极大和极小的值,这导致用于拟合模型的底层线性代数求解器出现问题。
在岭回归中,您构建内核矩阵,其中包含所有训练标签之间的相似性。岭回归拟合的参数可从此核矩阵和训练标签中找到。例如,如果您有两个极其相似的样本,则要求解的矩阵将被过度确定。为了解决这个问题,可以在对角线上添加一个小值,该值就是alpha您给出的参数。因此,当您的alpha值接近 0 时,矩阵更有可能被过度确定(但取决于数据的性质)。但这应该显示为交叉验证准确性较差,因此您不必对此过于担心。
因此,总而言之,如果您保持alpha高于警告阈值,那就没问题,并且在交叉验证过程中,该alpha值可能会被选择为高于此阈值。