使用MNIST实现Logistic回归 - 不收敛?

时间:2017-08-30 07:18:07

标签: python numpy machine-learning logistic-regression mnist

我希望有人可以帮助我。我从头开始实现逻辑回归(所以没有库,除了Python中的numpy)。

我使用MNIST dataset作为输入,并决定尝试(因为我正在进行二进制分类)只测试两个数字:1和2.我的代码可以在这里找到

https://github.com/michelucci/Logistic-Regression-Explained/blob/master/MNIST%20with%20Logistic%20Regression%20from%20scratch.ipynb

笔记本应该在安装了必要库的任何系统上运行。

不知何故,我的成本函数没有收敛。我收到错误,因为我的A(我的sigmoid)等于1,因为z变得非常大。

我尝试了一切,但我没有看到我的错误。任何人都可以看看,如果我错过了一些明显的东西,请告诉我?这里的要点是没有高精度。让模型收敛到某种东西;)

先谢谢,翁贝托

2 个答案:

答案 0 :(得分:2)

我读了你的代码。一切都很好看。唯一的问题是你的学习率很高。我知道0.005是一个很小的数字,但在这种情况下它对于算法收敛来说太高了。成本的增加就是明证。成本会降低一段时间,然后很快开始变为负值。我们的想法是将成本接近于零。这里的负数并不意味着成本更低。你必须看到幅度。我使用0.000008作为学习率并且工作正常。

答案 1 :(得分:2)

我收到了错误。问题是我用作类标签1和2(你可以在MNIST中找到它),但在二进制分类中你将这些值与0和1进行比较,因此模型无法收敛,因为sigmoid()(见我的代码)只能从0到1(是概率)。

使用0和1代替1和2可以解决问题。现在我的模型收敛到98%的准确度: - )

感谢大家的帮助!

此致 翁