如何获取所有调优参数及其对应的训练集与验证集分数?
问题解决:参数调优结果的DataFrame构建错误
错误原因
GridSearchCV会对传入的参数列表做笛卡尔积组合,你的参数组合数是2(rate)*3(l2)*3(size)=18组,所以result_tr和result_va的长度都是18。但你直接用原参数列表(长度分别为2、3、3)去构建DataFrame,必然出现长度不匹配的错误。
解决方案
直接从grid.cv_results_中提取对应参数的取值列,这些列的长度和训练/验证分数列完全一致。
修正后的完整代码
from sklearn.neural_network import MLPRegressor from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split, GridSearchCV # 补充导入GridSearchCV from sklearn.metrics import mean_squared_error from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline import pandas as pd # 补充导入pandas X, y = make_regression(n_samples=200, random_state=1) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1) pipe = Pipeline([ ('std', StandardScaler()), ('reg', MLPRegressor(random_state=1234, max_iter=500)), # 把max_iter移到这里,避免冗余定义 ]) rate = [0.01, 0.1] l2 = [0.1, 0.5, 0.05] size = [(5,1), (10,5,2), (10,)] params={"reg__learning_rate_init":rate, "reg__alpha":l2, "reg__hidden_layer_sizes":size} grid = GridSearchCV(pipe, param_grid=params, cv=4, return_train_score=True, scoring="neg_mean_squared_error") grid.fit(X_train,y_train) # 从cv_results_中提取参数和分数 result = pd.DataFrame({ "learn_rate": grid.cv_results_['param_reg__learning_rate_init'], "regularize": grid.cv_results_['param_reg__alpha'], "size": grid.cv_results_['param_reg__hidden_layer_sizes'], "MSE-train": -grid.cv_results_['mean_train_score'], "MSE-valid": -grid.cv_results_['mean_test_score'] }) # 可选:查看结果 print(result)
额外说明
- 代码中补充了
GridSearchCV和pandas的导入,修复了原代码中冗余定义reg = MLPRegressor(...)的问题,将max_iter移到Pipeline的MLPRegressor中。 cv_results_中包含所有交叉验证的细节,你也可以提取其他字段(比如std_train_score、rank_test_score等)丰富结果报告。
内容的提问来源于stack exchange,提问作者ebrahimi
相关产品推荐
相关产品推荐

