了解 K 折交叉验证、模型训练和 R² 分数

问题描述 投票:0回答:1

我正在网格搜索设置中使用 K 折交叉验证来进行超参数调整。我有几个关于如何训练和评估模型的问题:

  1. 当我使用

    GridSearchCV
    时,模型会通过多个折叠(假设为 10 个)进行评估。对于每个超参数组合,模型在 ( K-1 ) 次折叠上进行训练,并在剩余的折叠上进行验证。当我在网格搜索后获得
    best_grid
    模型时,该模型是在哪些特定训练数据(即哪些折叠)上进行训练的?

  2. 当我调用

    best_grid.predict(X_test)
    时,该模型在哪个数据集上进行预测?网格搜索后是否在整个数据集上进行了训练,或者仍然基于交叉验证期间使用的折叠?

  3. 如果

    best_grid
    模型尚未在整个数据集上进行训练,我是否需要在进行预测之前再次显式地将其拟合到完整数据集?

  4. 我想获得 R² 训练分数,但我对使用以下代码时收到的分数感到困惑:

    param_grid = {f'regressor__regressor__{param}': values for param, values in model_info['params'].items()}
         grid_search = GridSearchCV(full_pipeline, param_grid, cv=stratified_kf.split(X, y_binned), scoring="r2", n_jobs=4, return_train_score=True)
    
         grid_search.fit(X,y)
    
         if grid_search.best_score_ > best_score:
             best_score = grid_search.best_score_
             best_model = model_name
             best_grid = grid_search
    
    
     mean_train_score = best_grid.cv_results_['mean_train_score'][best_grid.best_index_] #
     print(mean_train_score) # THIS THING HERE
    
machine-learning cross-validation grid-search gridsearchcv k-fold
1个回答
0
投票

您拥有的代码返回训练集上的 R2 分数。它存在于

cv_results_
,如
mean_train_score

意识到

grid_search
对象会为您跟踪最佳分数和最佳参数,您不需要
if
块。

grid_search
对象是一个估计器,最终会与您提供的所有数据上的最佳参数(根据折叠网格搜索)进行拟合(在您的情况下是X
y
)。 
这是因为默认情况下,refit=True
因此,当您执行
predict
时,您将获得由网格搜索确定的最佳模型。 (此型号也可用作 
grid_search.best_estimator_
。)

如果您这样做

grid_search.predict(X_test)

 那么您正在预测 
X_test
。所以希望这些数据不是 
X
 的一部分。

请记住在生产中使用之前将您的最佳模型重新调整为

绝对所有您的数据! (也就是说,结合 X

X_test
 来拟合最佳模型。)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.