拟合sklearn GridSearchCV模型



我正试图借助随机森林回归器解决波士顿数据集上的回归问题。我使用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}

在最大深度:10,n_expectors: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

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

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

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

这确实是一个值得关注的问题。

问题1

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

问题2

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

问题3

你已经验证的是你训练模型的方式(即,你已经验证了你发现的超参数是正确的,并且训练对你所拥有的数据起到了预期的作用(。

最新更新