逻辑回归的梯度下降实现

数据挖掘 逻辑回归 梯度下降
2022-02-17 01:24:13

客观的

寻求帮助,请告知为什么梯度下降实现在下面不起作用。

背景

处理以下任务以实现逻辑回归。

在此处输入图像描述

梯度下降

如图所示推导出梯度下降。

Typo fixed as in the red in the picture. 交叉熵对数损失为[ylog(z)+(1y)log(1z)]

在此处输入图像描述

实现了代码,但是它说不正确。

import numpy as np  


def LogitRegression(arr):
  # code goes here
  x = arr[0]
  y = arr[1]
  a = arr[2]
  b = arr[3]

  z = 1.0 / (1.0 + np.exp(-a * x - b))
  lr = 1.0

  a = a - x * (z-y)
  a = np.round(a, decimals=3)
  b = b - (z-y)
  b = np.round(b, decimals=3)
  
  return ", ".join([str(a), str(b)])

# keep this function call here 
print(LogitRegression(input()))

在此处输入图像描述

如果我恢复梯度更新的符号,它就可以工作。但是,不知道为什么。

  # a = a - x * (z-y)
  a = a + x * (z-y)
  a = np.round(a, decimals=3)

  # b = b - (z-y)
  b = b + (z-y)     
  b = np.round(b, decimals=3)

在此处输入图像描述

1个回答

您在二元交叉熵损失函数之前缺少一个减号。如果预测更差(更好),你当前拥有的损失函数会变得更负(正),因此如果你最小化这个损失函数,模型将在错误的方向改变其权重并开始表现更差。为了使模型表现更好,您可以最大化您当前拥有的损失函数(即使用梯度上升而不是梯度下降,就像您在第二个示例中所做的那样),或者添加一个减号,以便损失的减少与更好的预测。