GridsearchCV和Kfold交叉验证

2024-09-28 03:15:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着去理解学习者的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)

我有以下问题:

  1. 在第一次迭代中,n_estimators = 100和{}被选为模型建筑。现在这个模型的score会在10倍交叉验证的帮助下选择吗?在

    • 我对这个过程的理解如下

      • {cd4>将被分割成^集。在
        1. 模型将在9个集合上进行训练,并在剩余的1个集合上进行测试,其分数将存储在一个列表中:比如score_list
        1. 这个过程将再重复9次,这9个分数将被加到score_list中,得到10分
        1. 最后,将取得分列表的平均值来给出带有参数的模型的最终得分:n_estimators = 100和{}
    • b.上述过程将与n_estimatorsmax_depth的所有其他可能组合重复,每次我们都将获得该模型的最终得分

    • c.最佳模型是最终得分最高的模型,我们将通过CV_rfc.best_params_

      得到相应的“n_估计量”和“最大深度”的最佳值

我对GridSearchCV的理解正确吗?在

  1. 现在假设我得到的最佳模型参数为{'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))

或者两者都是正确的


Tags: 模型param过程rfctrain交叉cvmax
1条回答
网友
1楼 · 发布于 2024-09-28 03:15:15

关于(1),你的理解确实是正确的;原则上要更正的措辞细节是“更好final_score”,而不是“更高”,因为有几个性能指标(所有测量误差的东西,如MSE、MAE等)是-越低越好的。在

现在,步骤(2)更棘手;它需要后退一步来检查整个过程。。。在

首先,CV通常用于参数调整(您的步骤1)或模型评估(即,您在步骤2中尝试做什么),这确实是不同的事情。从一开始就将数据分割成训练和测试集,然后按顺序执行步骤1(参数调整)和2b(未查看数据中的模型评估)可以说是原则上最“正确”的程序(至于您在评论中注意到的偏差,这是我们必须接受的,因为默认情况下,我们所有的拟合模型都“偏向”用于训练的数据,这是无法避免的)。在

尽管如此,从业者们早就在想,他们是否可以避免仅仅为了测试(模型评估)的目的而“牺牲”一部分宝贵的数据,并试图看看他们是否真的可以跳过模型评估部分(以及测试集本身),将参数调整过程(步骤1)中获得的最佳结果用作模型评估。这显然是在偷工减料,但和往常一样,问题是实际结果会有多差?它还会有意义吗?

同样,在《理论》中,维韦克·库马尔在他的linked answer中所写的是正确的:

If you use the whole data into GridSearchCV, then there would be leakage of test data into parameter tuning and then the final model may not perform that well on newer unseen data.

但以下是(强烈推荐)这本书的相关节选(第78页):

enter image description here

简而言之:如果您在步骤1中使用整个X,并将调整的结果视为模型评估,那么确实会存在偏差/泄漏,但它通常很小,至少对于中等规模的训练集来说是这样的。。。在


收尾:

  • 理论上“最正确”的程序实际上是第一步和第二步的结合
  • 您可以尝试省事,在步骤1中使用整个训练集X,而且很可能您仍然在模型评估的可接受范围内。在

相关问题 更多 >

    热门问题