拟合 sklearn GridSearchCV 模型

Posted

技术标签:

【中文标题】拟合 sklearn GridSearchCV 模型【英文标题】:Fitting sklearn GridSearchCV model 【发布时间】:2019-04-26 05:20:27 【问题描述】:

我正在尝试在random forest regressor 的帮助下解决Boston Dataset 上的回归问题。我使用GridSearchCV 来选择最佳超参数。

问题 1

我是否应该在一些X_train, y_train 上拟合GridSearchCV,然后获得最佳参数。

我应该把它放在X, y 上以获得最佳参数吗?(X,y = 整个数据集)

问题 2

说如果我把它放在X, y 上并获得最佳参数,然后在这些最佳参数上建立一个新模型。 现在我应该如何训练这个新模型?

我应该在 X_train, y_trainX, y. 上训练新模型

问题 3

如果我在 X,y 上训练新模型,那么我将如何验证结果?

到目前为止我的代码

   #Dataframes
    feature_cols = ['CRIM','ZN','INDUS','NOX','RM','AGE','DIS','TAX','PTRATIO','B','LSTAT']

    X = boston_data[feature_cols]
    y = boston_data['PRICE']

数据的训练测试拆分

from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 1)

网格搜索以获得最佳超参数

from sklearn.grid_search import GridSearchCV
param_grid =  
    'n_estimators': [100, 500, 1000, 1500],
    'max_depth' : [4,5,6,7,8,9,10]


CV_rfc = GridSearchCV(estimator=RFReg, param_grid=param_grid, cv= 10)
CV_rfc.fit(X_train, y_train)

CV_rfc.best_params_ 
#'max_depth': 10, 'n_estimators': 100

在 max_depth:10,n_estimators:100 上训练模型

RFReg = RandomForestRegressor(max_depth = 10, n_estimators = 100, random_state = 1)
RFReg.fit(X_train, y_train)
y_pred = RFReg.predict(X_test)
y_pred_train = RFReg.predict(X_train)

RMSE:2.8139766730629394

我只是想要一些关于正确步骤的指导

【问题讨论】:

这是一个关于方法的问题,而不是编程问题,因此更适合Cross Validated(可以说这里是题外话)。 【参考方案1】:

一般来说,要调整超参数,您应该始终在 X_train 上训练您的模型,并使用 X_test 检查结果。您必须根据X_test 获得的结果调整参数。

您永远不应该在整个数据集上调整超参数,因为它会破坏测试/训练拆分的目的(正如您在 问题 3 中正确提出的)。

【讨论】:

但是得到的超参数会因X_train中存在的样本而产生偏差 Rookie_123,你有一个合理的担忧,但任何模型/超参数都会固有地偏向于训练集。如果它偏向于测试集,那么从技术上讲,您一开始就不能谈论测试集。【参考方案2】:

这确实是一个合理的担忧。

问题 1

GridSearchCV 确实进行了交叉验证以找到合适的超参数集。但是您仍然应该有一个验证集,以确保最优的参数集对其来说是合理的(这样就可以在最后给出训练、测试、验证集)。

问题 2

GridSearchCV 已经为您提供了最好的估算器,您无需训练新的估算器。但实际上 CV 只是为了检查建筑物是否完好,然后您可以在完整的数据集上进行训练(请参阅https://stats.stackexchange.com/questions/11602/training-with-the-full-dataset-after-cross-validation 以获得完整的详细讨论)。

问题 3

您已经验证的是您训练模型的方式(即您已经验证了您找到的超参数是合理的,并且对于您拥有的数据,训练按预期工作)。

【讨论】:

这是关于您对问题1的回答的澄清:当您说GridsearchCV 进行交叉验证时,其交叉验证仍将限于X_trainy_train,如果我错了,请纠正我 这是关于您对问题 3 的回答的澄清:因此无需使用GridsearchCV 获得的最佳参数来验证在整个数据集上创建的模型吗? 当然,CV会在train dataset上做。然后您可以在测试数据集上验证 CV(最佳估计器)。 事实上,您可以使用整个数据集进行最终训练,如数据科学问题所示。 @MatthieuBrucher 如果您知道这个***.com/questions/55604668/…的答案,请告诉我,谢谢:)

以上是关于拟合 sklearn GridSearchCV 模型的主要内容,如果未能解决你的问题,请参考以下文章

sklearn GridSearchCV 与管道

XGBoost 与 GridSearchCV、缩放、PCA 和 sklearn 管道中的 Early-Stopping

GridSearchCV(sklearn)中的多个估计器

GridsearchCV sklearn 中的错误

你能从 sklearn 网格搜索 (GridSearchCV) 中获得所有估计器吗?

无法使用 sklearn 的 GridSearchCV 运行 tflearn