【发布时间】:2019-04-28 02:41:28
【问题描述】:
我试图了解 sklearn 的 GridSearchCV。我对在 GridsearchCV 中使用交叉验证有几个基本问题,然后我应该如何进一步使用 GridsearchCV 的 recommendations
假设我声明一个 GridsearchCV 实例如下
from sklearn.grid_search import GridSearchCV
RFReg = RandomForestRegressor(random_state = 1)
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)
我有以下问题:
-
说在第一次迭代中
n_estimators = 100和max_depth = 4被选择用于模型构建。现在将在10 折交叉验证的帮助下选择此模型的score吗?-
一个。我对流程的理解如下
- 1.
X_train和y_train将分成10组。 - 模型将在 9 个集合上进行训练,并在剩余的 1 个集合上进行测试,其分数将存储在一个列表中:例如
score_list
- 模型将在 9 个集合上进行训练,并在剩余的 1 个集合上进行测试,其分数将存储在一个列表中:例如
- 此过程将再重复 9 次,这 9 个分数中的每一个都将添加到
score_list中,总共得到 10 分
- 此过程将再重复 9 次,这 9 个分数中的每一个都将添加到
- 最后将取 score_list 的平均值,为具有参数的模型提供 final_score:
n_estimators = 100和max_depth = 4
- 最后将取 score_list 的平均值,为具有参数的模型提供 final_score:
- 1.
b.上述过程将重复使用
n_estimators和max_depth的所有其他可能组合,每次我们都会获得该模型的final_scorec。最佳模型将是具有最高 final_score 的模型,我们将通过
CV_rfc.best_params_ 获得相应的最佳值 'n_estimators' 和 'max_depth'
-
我对@987654336@的理解正确吗?
- 现在说我得到了最好的模型参数
{'max_depth': 10, 'n_estimators': 100}。我声明模型的实例如下
RFReg_best = RandomForestRegressor(n_estimators = 100, max_depth = 10, random_state = 1)
我现在有两个选项,哪个是正确的,是我想知道的
一个。对整个数据集使用交叉验证来查看模型的执行情况,如下所示
scores = cross_val_score(RFReg_best , X, y, cv = 10, scoring = 'mean_squared_error')
rm_score = -scores
rm_score = np.sqrt(rm_score)
b.在 X_train、y_train 上拟合模型,然后在 X_test、y_test 上进行测试
RFReg_best.fit(X_train, y_train)
y_pred = RFReg.predict(X_test)
rm_score = np.sqrt(mean_squared_error(y_test, y_pred))
或者两者都是正确的
【问题讨论】:
-
1.是的,你的理解是正确的。 2. 我会更多地依赖
b,尽管您并没有真正对模型进行更多测试。绝对不是a,因为在你找到最好的模型之后再做简历是没有意义的。使用整个训练集上的最佳模型进行训练,并在 X_test 上进行预测。 -
我有一个答案(以及该答案中的其他答案)来解释这个here。
-
@VivekKumar 你的解释确实很棒。谢谢!!
-
@Scratch'N'Purr 但是如果我选择 2 个
b,那么最好的模型不会只在X_train和y_train上进行训练。模型系数不会偏向X_train。如果我的理解有误,请见谅。机器学习领域的新成员 -
@Scratch'N'Purr 请注意,我正在考虑在 2 中使用
X, y而不是X_train、y_train
标签: python machine-learning scikit-learn cross-validation grid-search