python - 使用交叉验证技术和网格搜索技术的岭回归模型
问题描述
我为岭回归创建了 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 值的含义是什么。
解决方案
是的,score
来自 Ridge 回归的方法会返回您的 R 平方值(文档)。
如果您不知道 CV 方法的工作原理,它会将您的数据分成 5 个相等的块。然后对于每个参数组合,它使用每个块一次作为评估集来拟合模型五次,同时使用其余数据作为训练集。最佳参数集被选择为给出最高平均分数的集。
您的主要问题似乎是为什么您的 CV 分数的平均值低于在测试集上评估的完整训练的分数。这并不一定令人惊讶,因为完整的训练集将大于用于all_accuracies
值的任何 CV 样本。更多的训练数据通常会给你一个更准确的模型。
测试集分数(即您的第二个“分数”,0.91...)最有可能代表您的模型将如何推广到看不见的数据。这就是您应该引用的模型的“分数”。CV 集的性能是有偏差的,因为这是您选择参数的基础数据。
一般来说,您的方法看起来是正确的。使用重新拟合岭回归的步骤cross_val_score
似乎是必要的。一旦你从GridSearchCV
我那里找到了你最好的参数,就会直接去拟合完整的训练数据集(就像你最后所做的那样)。
推荐阅读
- json - 使用 JQ 在树状 json 对象中沿每条路径收集所有根到叶值
- javascript - 有没有办法在创建侦听器时记录索引的值,以便在调用侦听器函数时使用相同的值?
- here-api - 获取路径链接的形状
- java - 为什么我的堆栈代码中的 pop 方法不执行?
- java - 如何在 Java 中获取 @param 文本?
- c++ - 如何连接到“wss”上的特定端点 [IBM Watson]
- php - 如何在邮件功能php中添加密件抄送
- python-3.x - Python3 命令永远在 Airflow 中运行
- react-native - IOS 设备不支持 KeyboardAvoidingView
- php - 在选定像素上创建词云