Python 如何在scikit学习MLPREGESSOR中设置历元数?

Python 如何在scikit学习MLPREGESSOR中设置历元数?,python,scikit-learn,epoch,Python,Scikit Learn,Epoch,我正在尝试使用scikit学习MLPREGESSOR进行一些监督学习。我想知道在监督学习中,历元数的作用是什么 但当我这样设置MLP时: mlp = MLPRegressor(max_iter=100, learning_rate_init=0.1) 然后这个: mlp = MLPRegressor(max_iter=200, learning_rate_init=0.1) mlp = MLPRegressor(max_iter=500, learning_rate_init=0.1) 然

我正在尝试使用scikit学习MLPREGESSOR进行一些监督学习。我想知道在监督学习中,历元数的作用是什么

但当我这样设置MLP时:

mlp = MLPRegressor(max_iter=100, learning_rate_init=0.1)
然后这个:

mlp = MLPRegressor(max_iter=200, learning_rate_init=0.1)
mlp = MLPRegressor(max_iter=500, learning_rate_init=0.1)
然后这个:

mlp = MLPRegressor(max_iter=200, learning_rate_init=0.1)
mlp = MLPRegressor(max_iter=500, learning_rate_init=0.1)
预测分数保持不变。 我不知道使用max_iter设置历元数是否正确,因为尽管我更改了max_iter的数,但预测分数是恒定的。 但当我改变学习率时,分数也会改变,所以学习率会有一些杠杆作用


有人能帮忙吗?谢谢

使用
max\u iter
确实是限制纪元数量的正确方法。根据以下文件:

最大值:int,可选,默认值200 最大迭代次数。解算器迭代直到收敛(由“tol”确定)或此迭代次数。对于随机解算器(“sgd”、“adam”),请注意,这决定了历元的数量(每个数据点将使用多少次),而不是梯度步长的数量

注意,它们的实现还针对
tol
参数进行收敛检查,即,当两次迭代之间的成本变化小于
tol
时,学习将停止
tol
默认设置为0.0001(10e-4),这对于您的用例/培训数据来说可能或可能不太大


在你的例子中,似乎在100次迭代之前就达到了这个精度(
max_iter=100
)。

使用
max_iter
确实是限制纪元数量的正确方法。根据以下文件:

最大值:int,可选,默认值200 最大迭代次数。解算器迭代直到收敛(由“tol”确定)或此迭代次数。对于随机解算器(“sgd”、“adam”),请注意,这决定了历元的数量(每个数据点将使用多少次),而不是梯度步长的数量

注意,它们的实现还针对
tol
参数进行收敛检查,即,当两次迭代之间的成本变化小于
tol
时,学习将停止
tol
默认设置为0.0001(10e-4),这对于您的用例/培训数据来说可能或可能不太大


在您的例子中,似乎在100次迭代之前就达到了这个精度(
max_iter=100
)。

粗略地说,通过使优化器能够在训练集中搜索更长时间的最优解决方案,历元数起到了杠杆作用。但正如@fxx所述,如果两次迭代之间的成本变化不小于
tol
,MLPREGESSOR实现将停止记录次数。在您的情况下,您可以减少
tol
参数,以强制算法运行更长时间


此外,为了实现更好的性能,您还可以检查算法的
学习率。0.1可能有点太多,因此优化器可能会过度调整。

粗略地说,通过使优化器能够在训练集中搜索更长时间的最优解决方案,历元数起到了杠杆作用。但正如@fxx所述,如果两次迭代之间的成本变化不小于
tol
,MLPREGESSOR实现将停止记录次数。在您的情况下,您可以减少
tol
参数,以强制算法运行更长时间


此外,为了实现更好的性能,您还可以检查算法的
学习率。0.1可能有点太多,因此优化器可能会超调。

谢谢您提供的信息。在我的例子中,它甚至在10、20、30次迭代中都没有变化。它保持与100、500或1000次迭代相同感谢您提供的信息。在我的例子中,它甚至在10、20、30次迭代中都没有变化。它保持与100、500或1000次迭代相同