You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何GridSearchCV得到的MLP回归器结果精度低于RandomizedSearchCV?

MLP调参:RandomizedSearchCV与GridSearchCV结果差异原因分析

问题背景

使用MLP Regressor分别通过RandomizedSearchCV和GridSearchCV进行参数调优时,出现了以下结果:

  • RandomizedSearchCV给出的最优参数(隐藏层为(18,18,18))对应R²值为0.90
  • GridSearchCV给出的最优参数(隐藏层为(17,17,17))对应R²值为0.89

核心原因解析

出现这种差异主要源于以下几点:

  • 搜索空间范围不同:
    RandomizedSearchCV的参数搜索空间中,隐藏层仅包含(18,)、(18,18)、(18,18,18)三种配置,完全未涉及(17,17,17)。因此它找到的最优解只是自身限定范围内的最优,而GridSearchCV的搜索空间扩展到了(17,17,17)、(18,18,18)、(19,19,19),能在更宽的范围内筛选参数。
  • 交叉验证的随机性影响:
    RandomizedSearchCV设置了random_state=42固定交叉验证的划分逻辑,而GridSearchCV未指定该参数,导致两者的CV数据集划分方式不同。不同的划分会直接影响模型在验证集上的R²评估结果,进而干扰最优参数的选择。
  • MLP训练的细微差异:
    即使固定了random_state,不同隐藏层规模的MLP在训练时,参数初始化和收敛过程仍会存在细微差异。(17,17,17)和(18,18,18)的模型复杂度接近,但训练后的模型在验证集上的表现可能因这些差异产生波动。
  • 搜索策略的评估次数差异:
    RandomizedSearchCV设置了n_iter=100,但它的参数空间总组合数仅为36种(3种激活函数×2种优化器×3种学习率策略×2种正则化系数),因此会对同一参数组合进行多次重复评估,最终取平均性能最优的结果;而GridSearchCV对每个参数组合仅评估一次,单次CV的结果可能存在偶然性。

相关代码实现

RandomizedSearchCV调参代码

from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import RandomizedSearchCV


mlp = MLPRegressor(random_state=42)
param_grid_random = {'hidden_layer_sizes': [(18,), (18,18,), (18,18,18,)],
              'activation': ['tanh','relu','logistic'],
              'solver': ['sgd', 'adam'],
              'learning_rate': ['constant','adaptive','invscaling'],
              'alpha': [0.0001, 0.05],
              'max_iter': [10000000000],
              'early_stopping': [False],
              'warm_start': [False]}

GS_random = RandomizedSearchCV(mlp, param_distributions=param_grid_random,n_jobs= 1,cv=5, scoring='r2', n_iter=100,random_state=42)
                  
GS_random.fit(X_train, y_train)

print(GS_random.best_params_)

输出结果:

{'warm_start': False, 'solver': 'adam', 'max_iter': 10000000000, 'learning_rate': 'constant', 'hidden_layer_sizes': (18, 18, 18), 'early_stopping': False, 'alpha': 0.05, 'activation': 'relu'}

GridSearchCV调参代码

from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import GridSearchCV
mlp = MLPRegressor(random_state=42)
param_grid = {'hidden_layer_sizes': [(17,17,17), (18,18,18), (19,19,19)],
              'activation': ['tanh','relu','logistic'],
              'solver': ['sgd', 'adam'],
              'learning_rate': ['constant','adaptive','invscaling'],
              'alpha': [0.0001, 0.05],
              'max_iter': [10000000000],
              'early_stopping': [False],
              'warm_start': [False]}
GS = GridSearchCV(mlp, param_grid=param_grid,n_jobs= -1,cv=5, scoring='r2')
                  
GS.fit(X_train, y_train)

print(GS.best_params_)

输出结果:

{'activation': 'relu', 'alpha': 0.05, 'early_stopping': False, 'hidden_layer_sizes': (17, 17, 17), 'learning_rate': 'constant', 'max_iter': 10000000000, 'solver': 'adam', 'warm_start': False}

模型测试代码

mlp_new = MLPRegressor(hidden_layer_sizes=(17, 17,17),
                       max_iter = 10000000000,activation = 'relu',
                       solver = 'adam', learning_rate='constant', 
                       alpha=0.05,validation_fraction=0.2,random_state=0,early_stopping=False)
mlp_new.fit(X_train, y_train)
mlp_new_y_predict = mlp_new.predict((X_test))
mlp_new_y_predict

from sklearn import metrics
MLP_r_square = metrics.r2_score(y_test,mlp_new_y_predict)
print('R-Square for the MLP Regressor is:', MLP_r_square)

内容的提问来源于stack exchange,提问作者JZ0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:45:49