为何每次运行MLP Regressor模型得到的MSE结果均存在差异?
问题原因
- 未固定随机种子:sklearn的
MLPRegressor的权重初始化、训练时的样本shuffle、优化器的随机扰动都依赖随机种子,你代码中第一个版本将random_state设为None,简化版完全未配置该参数,会导致每次训练的初始状态和过程随机,最终结果自然不同。 - 模型未充分收敛:你提供的简化版模型
max_iter仅设为100,若训练至最大迭代数时损失仍未下降到阈值,每次停止时的模型状态会存在差异,直接导致MSE波动。
解决方法
- 固定全链路随机种子:
- 在脚本开头固定全局随机源:
import random import numpy as np random.seed(42) np.random.seed(42)- 给
MLPRegressor添加固定的random_state参数,例如:
model = MLPRegressor( hidden_layer_sizes=(100,), activation='relu', solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.4, max_iter=100, random_state=42 # 新增固定随机种子 ) - 确保模型充分收敛:
- 调大
max_iter参数,或开启verbose=True观察训练损失变化,确认损失平稳后再停止训练 - 可适当调低
tol阈值,避免模型提前停止,保证每次训练都能达到相同的收敛状态
- 调大
内容的提问来源于stack exchange,提问作者john22
相关产品推荐
相关产品推荐

