首页 > 解决方案 > 逻辑回归模型的损失不会通过梯度下降而减少

问题描述

我是机器学习的初学者,一直在尝试实现梯度下降来尝试优化模型的权重。我正在尝试从头开始开发模型,并且我已经在线查看了很多代码,但是我的实现似乎仍然没有减少模型的损失,损失在 0.2 和 0.1 之间波动。我使用的损失函数是 L = (y - 假设)**2。任何帮助,将不胜感激

    for z in range(self.iterations):
        print(z)
        cost = 0
        for x in range(self.batch_size):
            derivatives = np.zeros(self.num_weights)
            ran = self.random_row()
            row = self.X.iloc[[ran]]
            cost += self.loss(row, self.y[ran])
            error = self.y[ran] - self.predict(row)
            for i in range(len(derivatives)):
                derivatives[i] = derivatives[i] + (error * (row.iloc[0,i] * -2))
                derivatives[i] = derivatives[i] * learning_rate
                self.weights[i] = self.weights[i] - derivatives[i]

标签: pythonmachine-learninglogistic-regressiongradient-descent

解决方案


这是不正确的损失函数。对于二元/两类逻辑回归,您应该使用

二元逻辑回归成本方程

其中 h 是假设。

您可以在此处的本文的“成本函数直觉”部分中找到成本函数的直觉以及它为何如此的解释。

使用此成本函数,您将需要使用不同的梯度:梯度方程.

请注意,这里使用了不同的符号,成本函数由 J(θ) 表示,其中 θ 是该模型的权重向量。这个方程的推导可以在这里找到。

一般来说,这里有一些关于实现逻辑回归的有用文章:

  1. https://towardsdatascience.com/building-a-logistic-regression-in-python-301d27367c24
  2. https://www.baeldung.com/cs/gradient-descent-logistic-regression
  3. https://machinelearningmastery.com/implement-logistic-regression-stochastic-gradient-descent-scratch-python/
  4. https://medium.com/@martinpella/logistic-regression-from-scratch-in-python-124c5636b8ac
  5. https://dhirajkumarblog.medium.com/logistic-regression-in-python-from-scratch-5b901d72d68e

推荐阅读