首页 > 解决方案 > 使用交叉验证技术和网格搜索技术的岭回归模型

问题描述

我为岭回归创建了 python 代码。为此,我将交叉验证和网格搜索技术结合使用。我得到了输出结果。我想检查我的回归模型构建步骤是否正确?有人可以解释一下吗?

from sklearn.linear_model import Ridge
ridge_reg = Ridge()
from sklearn.model_selection import GridSearchCV
params_Ridge = {'alpha': [1,0.1,0.01,0.001,0.0001,0] , "fit_intercept": [True, False], "solver": ['svd', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga']}
Ridge_GS = GridSearchCV(ridge_reg, param_grid=params_Ridge, n_jobs=-1)
Ridge_GS.fit(x_train,y_train)
Ridge_GS.best_params_

输出 - {'alpha': 1, 'fit_intercept': True, 'solver': 'cholesky'}

Ridgeregression = Ridge(random_state=3, **Ridge_GS.best_params_)
from sklearn.model_selection import cross_val_score
all_accuracies = cross_val_score(estimator=Ridgeregression, X=x_train, y=y_train, cv=5)
all_accuracies

输出 - 数组([0.93335508, 0.8984485, 0.91529146, 0.89309012, 0.90829416])

print(all_accuracies.mean())

输出 - 0.909695864130532

Ridgeregression.fit(x_train,y_train)
Ridgeregression.score(x_test,y_test)

输出 - 0.9113458623386644

是 0.9113458623386644 我的岭回归精度(R sqred)吗?如果是,那么 0.909695864130532 值的含义是什么。

标签: pythonmachine-learningregressioncross-validationgrid-search

解决方案


是的,score来自 Ridge 回归的方法会返回您的 R 平方值(文档)。

如果您不知道 CV 方法的工作原理,它会将您的数据分成 5 个相等的块。然后对于每个参数组合,它使用每个块一次作为评估集来拟合模型五次,同时使用其余数据作为训练集。最佳参数集被选择为给出最高平均分数的集。

您的主要问题似乎是为什么您的 CV 分数的平均值低于在测试集上评估的完整训练的分数。这并不一定令人惊讶,因为完整的训练集将大于用于all_accuracies值的任何 CV 样本。更多的训练数据通常会给你一个更准确的模型。

测试集分数(即您的第二个“分数”,0.91...)最有可能代表您的模型将如何推广到看不见的数据。这就是您应该引用的模型的“分数”。CV 集的性能是有偏差的,因为这是您选择参数的基础数据。

一般来说,您的方法看起来是正确的。使用重新拟合岭回归的步骤cross_val_score似乎是必要的。一旦你从GridSearchCV我那里找到了你最好的参数,就会直接去拟合完整的训练数据集(就像你最后所做的那样)。


推荐阅读