我希望有人可以帮助我。我从头开始实现逻辑回归(所以没有库,除了Python中的numpy)。
我使用MNIST dataset作为输入,并决定尝试(因为我正在进行二进制分类)只测试两个数字:1和2.我的代码可以在这里找到
笔记本应该在安装了必要库的任何系统上运行。
不知何故,我的成本函数没有收敛。我收到错误,因为我的A(我的sigmoid)等于1,因为z变得非常大。
我尝试了一切,但我没有看到我的错误。任何人都可以看看,如果我错过了一些明显的东西,请告诉我?这里的要点是没有高精度。让模型收敛到某种东西;)
先谢谢,翁贝托
答案 0 :(得分:2)
我读了你的代码。一切都很好看。唯一的问题是你的学习率很高。我知道0.005
是一个很小的数字,但在这种情况下它对于算法收敛来说太高了。成本的增加就是明证。成本会降低一段时间,然后很快开始变为负值。我们的想法是将成本接近于零。这里的负数并不意味着成本更低。你必须看到幅度。我使用0.000008
作为学习率并且工作正常。
答案 1 :(得分:2)
我收到了错误。问题是我用作类标签1和2(你可以在MNIST中找到它),但在二进制分类中你将这些值与0和1进行比较,因此模型无法收敛,因为sigmoid()
(见我的代码)只能从0到1(是概率)。
使用0和1代替1和2可以解决问题。现在我的模型收敛到98%的准确度: - )
感谢大家的帮助!
此致 翁