gpt4 book ai didi

python - GridSearchCV 对平均绝对误差进行评分

转载 作者:行者123 更新时间:2023-12-01 09:12:37 26 4
gpt4 key购买 nike

我正在尝试设置 GridSearchCV 的实例来确定哪一组超参数将产生最低的平均绝对误差。 This scikit documentation表示分数指标可以在创建 GridSearchCV 时传递到网格中(如下)。

param_grid = {
'hidden_layer_sizes' : [(20,),(21,),(22,),(23,),(24,),(25,),(26,),(27,),(28,),(29,),(30,),(31,),(32,),(33,),(34,),(35,),(36,),(37,),(38,),(39,),(40,)],
'activation' : ['relu'],
'random_state' : [0]
}
gs = GridSearchCV(model, param_grid, scoring='neg_mean_absolute_error')
gs.fit(X_train, y_train)
print(gs.scorer_)

[1] make_scorer(mean_absolute_error, greater_is_better=False)

但是,网格搜索并未选择平均绝对误差方面表现最佳的模型

model = gs.best_estimator_.fit(X_train, y_train)
print(metrics.mean_squared_error(y_test, model.predict(X_test)))
print(gs.best_params_)

[2] 125.0
[3] Best parameters found by grid search are: {'hidden_layer_sizes': (28,), 'learning_rate': 'constant', 'learning_rate_init': 0.01, 'random_state': 0, 'solver': 'lbfgs'}

运行上述代码并确定所谓的“最佳参数”后,我删除了 gs.best_params_ 中找到的值之一,发现再次运行我的程序时,均方误差有时会减小。

param_grid = {
'hidden_layer_sizes' : [(20,),(21,),(22,),(23,),(24,),(25,),(26,),(31,),(32,),(33,),(34,),(35,),(36,),(37,),(38,),(39,),(40,)],
'activation' : ['relu'],
'random_state' : [0]
}

[4] 122.0
[5] Best parameters found by grid search are: {'hidden_layer_sizes': (23,), 'learning_rate': 'constant', 'learning_rate_init': 0.01, 'random_state': 0, 'solver': 'lbfgs'}

为了澄清,我更改了输入到网格搜索中的设置,以便它不包含选择隐藏层大小 28 的选项,当进行更改时,我再次运行代码,这次它选择了隐藏层大小为 23 并且平均绝对误差减小(即使从一开始就可以使用 23 的大小),如果它正在评估平均绝对误差,为什么不从一开始就选择这个选项? p>

最佳答案

网格搜索和模型拟合本质上取决于不同目的的随机数生成器。在 scikit-learn 中,这是由参数 random_state 控制的。请参阅我的其他答案来了解它:

现在,就您的情况而言,我可以想到随机数生成影响训练的这些事情:

1) GridSearchCV 默认情况下将使用 3 倍的 KFold 进行回归任务,这可能会在不同的运行中以不同的方式分割数据。两个网格搜索过程中发生的分割可能不同,因此分数也不同。

2) 您正在使用单独的测试数据来计算 GridSearchCV 无法访问的 mse。因此,它将找到适合所提供数据的参数,这些参数对于单独的数据集可能完全有效,也可能不完全有效。

更新:

我现在看到您已在模型的参数网格中使用了random_state,因此第 3 点现在不适用。

3) 您尚未显示您使用的是哪种型号。但是,如果模型在训练期间使用数据子样本(例如选择较少数量的特征,或较少数量的迭代行,或针对不同的内部估计器),那么您也需要修复该问题以获得相同的分数。您需要首先修复该问题来检查结果。

推荐示例

您可以从这个示例中获取想法:

# Define a custom kfold
from sklearn.model_selection import KFold
kf = KFold(n_splits=3, random_state=0)

# Check if the model you chose support random_state
model = WhateEverYouChoseClassifier(..., random_state=0, ...)

# Pass these to grid-search
gs = GridSearchCV(model, param_grid, scoring='neg_mean_absolute_error', cv = kf)

然后再次通过更改参数网格进行两个实验。

关于python - GridSearchCV 对平均绝对误差进行评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com