如何提取GridSearchCV管道中最优MLPRegressor的n_iter_属性?
如何从包含GridSearchCV的Pipeline中获取MLPRegressor的n_iter_属性?
问题描述
我用Python 3构建了一个包含GridSearchCV的Pipeline,代码如下:
pipeline_steps = [('scaler', StandardScaler()), ('MLPR', MLPRegressor(solver='lbfgs', early_stopping=True, validation_fraction=0.1, max_iter=10000))] MLPR_parameters = {'MLPR__hidden_layer_sizes':[(50,), (100,), (50,50)], 'MLPR__alpha':[0.001, 10, 1000]} MLPR_pipeline = Pipeline(pipeline_steps) gridCV_MLPR = GridSearchCV(MLPR_pipeline, MLPR_parameters, cv=kfold) gridCV_MLPR.fit(X_train, y_train)
目前我可以通过gridCV_MLPR.best_params_获取最优模型的参数:{'MLPR__alpha': 0.001, 'MLPR__hidden_layer_sizes': (50,)},但我想获取该最优模型中MLPRegressor组件的n_iter_属性(即迭代次数),请问该如何实现?
解决方案
这其实很容易实现,你只需要借助GridSearchCV和Pipeline的两个关键属性就能拿到目标值:
- 首先通过
gridCV_MLPR.best_estimator_获取经过交叉验证后训练完成的最优Pipeline实例,这个实例已经用最优参数拟合了训练数据,所有组件的训练后属性都能访问到。 - 然后通过Pipeline的
named_steps字典(以你定义Pipeline时给组件起的名字为键),定位到其中的MLPRegressor组件,再直接访问它的n_iter_属性即可。
具体代码如下:
# 获取训练好的最优Pipeline best_pipeline = gridCV_MLPR.best_estimator_ # 从Pipeline中提取MLPRegressor组件 best_mlpr_model = best_pipeline.named_steps['MLPR'] # 获取迭代次数 training_iterations = best_mlpr_model.n_iter_ print(f"最优MLPRegressor模型的迭代次数: {training_iterations}")
补充说明
best_estimator_是GridSearchCV的核心属性之一,它保存的不是参数字典,而是完整的、训练好的模型/流水线对象,所以能直接访问所有训练后的内部属性。- 如果你需要验证,可以顺便查看一下这个最优模型的参数是否和
best_params_一致:
print(best_mlpr_model.get_params())
你会看到其中的`alpha`和`hidden_layer_sizes`和`best_params_`里的最优参数完全匹配。 内容的提问来源于stack exchange,提问作者rmarion37
相关产品推荐
相关产品推荐

