我正在尝试使用scikit-learn MLPRegressor进行一些监督学习。我想知道监督学习中时代数量的影响力。
但是当我像这样设置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)
预测分数保持不变。 我不知道使用max_iter来设置纪元数是否正确,因为虽然我改变了max_iter的数量,但预测得分是不变的。 但是当我改变学习率时,分数会发生变化,因此学习率会有一些杠杆作用。
任何人都可以提供帮助?感谢
答案 0 :(得分:2)
使用max_iter
确实是限制纪元数量的正确方法。来自MLPRegressor
的文档:
max_iter :int,可选,默认为200 最大迭代次数。求解器迭代直到收敛(由'tol'确定)或这个迭代次数。对于随机解算器('sgd','adam'),请注意这决定了时期的数量(每个数据点的使用次数),而不是梯度步数。
请注意,它们的实现还针对tol
参数进行了收敛检查,即,当两次迭代之间的成本变化小于tol
时,学习将停止。默认情况下,tol
设置为0.0001(10e-4),这可能对您的用例/培训数据有太大的容忍度。
在你的情况下,似乎在100次迭代(max_iter=100
)之前达到了这个精度。
答案 1 :(得分:0)
粗略地说,通过使优化器可以在搜索集中搜索更长的时间来寻找最优解,时期的数量起到了杠杆作用。但是,如@fxx所述,如果两次迭代之间的成本变化不小于tol
,则MLPRegressor实现将停止时期数。在您的情况下,可以减小tol
参数以强制算法运行更长的时间。
此外,为了提高实现的性能,还可以检查算法的learning_rate
。 0.1可能太大了,因此优化器可能会过冲。