我创建了用于岭回归的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吗? 如果是,那么0.909695864130532值是什么意思。
答案 0 :(得分:1)
是的,Ridge回归的score
方法返回您的R平方值(docs)。
如果您不知道CV方法如何工作,它将把您的数据分成5个相等的块。然后,对于每个参数组合,使用每个块一次作为评估集,同时使用其余数据作为训练集,对模型进行五次拟合。选择最佳参数集是给出最高平均分数的参数集。
您的主要问题似乎是为什么您的CV分数的平均值小于对测试集评估的完整培训的分数。这并不一定令人惊讶,因为完整的训练集将大于用于all_accuracies
值的任何CV样本。通常,更多的训练数据将为您提供更准确的模型。
测试集得分(即您的第二个“分数”为0.91 ...)最有可能代表您的模型将如何推广到看不见的数据。这就是您应该引用的模型“分数”。 CV设置的性能存在偏差,因为这是您选择参数所依据的数据。
通常,您的方法看起来正确。似乎有必要使用cross_val_score
来调整岭回归的步骤。一旦您从GridSearchCV
中找到了最佳参数,我便会直接拟合整个训练数据集(就像您在最后所做的那样)。