我试着去理解学习者的GridSearchCV。关于交叉验证在GridsearchCV中的使用,我几乎没有什么基本问题,那么我应该如何进一步使用GridsearchCV的建议
假设我声明了一个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
和{score
会在10倍交叉验证的帮助下选择吗?在
我对这个过程的理解如下
score_list
score_list
中,得到10分n_estimators = 100
和{b.上述过程将与n_estimators
和max_depth
的所有其他可能组合重复,每次我们都将获得该模型的最终得分
c.最佳模型是最终得分最高的模型,我们将通过CV_rfc.best_params_
我对GridSearchCV
的理解正确吗?在
{'max_depth': 10, 'n_estimators': 100}
。我宣布该型号的有效期如下RFReg_best = RandomForestRegressor(n_estimators = 100, max_depth = 10, random_state = 1)
我现在有两个选择,哪一个是正确的,这是我想知道的
a.对整个数据集使用交叉验证来查看模型的执行情况,如下所示
^{pr2}$b.将模型装配在X轴、y轴上,然后在X轴试验、y轴试验中进行试验
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),你的理解确实是正确的;原则上要更正的措辞细节是“更好
final_score
”,而不是“更高”,因为有几个性能指标(所有测量误差的东西,如MSE、MAE等)是-越低越好的。在现在,步骤(2)更棘手;它需要后退一步来检查整个过程。。。在
首先,CV通常用于参数调整(您的步骤1)或模型评估(即,您在步骤2中尝试做什么),这确实是不同的事情。从一开始就将数据分割成训练和测试集,然后按顺序执行步骤1(参数调整)和2b(未查看数据中的模型评估)可以说是原则上最“正确”的程序(至于您在评论中注意到的偏差,这是我们必须接受的,因为默认情况下,我们所有的拟合模型都“偏向”用于训练的数据,这是无法避免的)。在
尽管如此,从业者们早就在想,他们是否可以避免仅仅为了测试(模型评估)的目的而“牺牲”一部分宝贵的数据,并试图看看他们是否真的可以跳过模型评估部分(以及测试集本身),将参数调整过程(步骤1)中获得的最佳结果用作模型评估。这显然是在偷工减料,但和往常一样,问题是实际结果会有多差?它还会有意义吗?
同样,在《理论》中,维韦克·库马尔在他的linked answer中所写的是正确的:
但以下是(强烈推荐)这本书的相关节选(第78页):
简而言之:如果您在步骤1中使用整个
X
,并将调整的结果视为模型评估,那么确实会存在偏差/泄漏,但它通常很小,至少对于中等规模的训练集来说是这样的。。。在收尾:
X
,而且很可能您仍然在模型评估的可接受范围内。在相关问题 更多 >
编程相关推荐