Scikit learn Scikit学习MLPREGESSOR-如何获得独立于随机种子的结果?

Scikit learn Scikit学习MLPREGESSOR-如何获得独立于随机种子的结果?,scikit-learn,neural-network,Scikit Learn,Neural Network,我试图通过使用MLP学习一些正弦函数。不幸的是,结果严重依赖于随机种子。 如何调整MLPREGESSOR,使结果对随机种子的依赖性降低 代码: 输出: np.random.seed(0) MSE train: 0.00167560534562 np.random.seed(1) MSE train: 0.0050531872206 np.random.seed(2) MSE train: 0.00279393534973 np.random.seed(3) MSE train: 0.002242

我试图通过使用MLP学习一些正弦函数。不幸的是,结果严重依赖于随机种子。 如何调整MLPREGESSOR,使结果对随机种子的依赖性降低

代码:

输出:

np.random.seed(0)
MSE train: 0.00167560534562
np.random.seed(1)
MSE train: 0.0050531872206
np.random.seed(2)
MSE train: 0.00279393534973
np.random.seed(3)
MSE train: 0.00224293537385
np.random.seed(4)
MSE train: 0.00154350859516
np.random.seed(5)
MSE train: 0.00383997358155
np.random.seed(6)
MSE train: 0.0265389606087
np.random.seed(7)
MSE train: 0.00195637404624
np.random.seed(8)
MSE train: 0.000590823529864
np.random.seed(9)
MSE train: 0.00393172460516

种子6、9和8产生不同数量级的MSE。如何防止这种情况发生?

多层感知器以及其他神经网络结构都受到这样一个事实的影响,即它们相应的损失函数具有许多局部最优解。因此,所有梯度算法都严重依赖于选择什么样的初始化。您可以将初始化(通过随机_状态确定)视为一个额外的超参数,为您提供灵活性,而不是将其视为不需要的


请注意,MSE的差异并没有那么大,如果您的目标是完全过拟合,则将正则化参数alpha更改为零(默认值为alpha=0.0001)

尝试以下操作:
mlprepressor(activation='tanh',solver='adam',random_state=0)
@MaxU这似乎与设置
np.random.seed(0)
相同。但是MLPrepressor仍然太依赖于随机状态。当然,它依赖于随机状态-它使用随机值初始化(权重)。你的目标是什么?如果您想要可预测且稳定的结果,请使用
random\u state
@MaxU,我的目标是拥有一个独立于大多数随机初始化的MLP。我认为MSE应该更多地依赖于迭代或其他超参数,而不是随机状态。这是错误的吗?不幸的是,反向传播算法容易受到局部极小值陷阱的影响,并且依赖于良好的初始化。有两种方法:(1)使用不同的初始权重对同一网络进行多次训练,保留测试集上表现最好的网络(2)对于较小的网络,可以使用粒子群优化优化权重。粒子群优化算法提供了一个近似全局最优解,对目标函数的性质不太敏感,对良好的初始解也不太可靠。
np.random.seed(0)
MSE train: 0.00167560534562
np.random.seed(1)
MSE train: 0.0050531872206
np.random.seed(2)
MSE train: 0.00279393534973
np.random.seed(3)
MSE train: 0.00224293537385
np.random.seed(4)
MSE train: 0.00154350859516
np.random.seed(5)
MSE train: 0.00383997358155
np.random.seed(6)
MSE train: 0.0265389606087
np.random.seed(7)
MSE train: 0.00195637404624
np.random.seed(8)
MSE train: 0.000590823529864
np.random.seed(9)
MSE train: 0.00393172460516