拟合sklearn GridSearchCV模型

时间:2018-11-23 15:28:33

标签: python machine-learning scikit-learn random-forest grid-search

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

问题1

我应该将GridSearchCV放在某些X_train, y_train上,然后获得最佳参数。

OR

我应该将其放在X, y上以获得最佳参数。(X,y =整个数据集)

问题2

说如果我适合X, y并获取最佳参数,然后根据这些最佳参数构建新模型。 现在我应该如何训练这个新模型?

我应该在X_train, y_train还是X, 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_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

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

2 个答案:

答案 0 :(得分:2)

这确实是一个令人担忧的问题。

问题1

GridSearchCV确实进行了交叉验证,以找到适当的超参数集。但是,您仍然应该有一个验证集,以确保对它而言最优的参数集是合理的(这样可以提供最终的训练,测试和验证集)。

问题2

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

问题3

您已经验证的是模型的训练方式(即,您已经验证了找到的超参数是正确的,并且训练对所拥有的数据按预期进行)。

答案 1 :(得分:1)

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

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

相关问题