如何在scikit-learn mlpregressor中设置epoch的数量?

时间:2017-10-07 05:11:53

标签: python scikit-learn epoch

我正在尝试使用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的数量,但预测得分是不变的。 但是当我改变学习率时,分数会发生变化,因此学习率会有一些杠杆作用。

任何人都可以提供帮助?感谢

2 个答案:

答案 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可能太大了,因此优化器可能会过冲。