Python 如何在scikit学习MLPREGESSOR中设置历元数?
我正在尝试使用scikit学习MLPREGESSOR进行一些监督学习。我想知道在监督学习中,历元数的作用是什么 但当我这样设置MLP时: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) 然
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次迭代相同