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