【ShuQiHere】从零开始实现逻辑回归:深入理解反向传播与梯度下降

【ShuQiHere】

逻辑回归是机器学习中一个经典的分类算法,尽管它的名字中带有“回归”,但它的主要用途是处理二分类问题。逻辑回归通过一个逻辑函数(Sigmoid 函数)将输入特征映射到一个概率值上,然后根据这个概率值进行分类。本文将带你从零开始一步步实现逻辑回归,并深入探讨背后的核心算法——反向传播与梯度下降。

逻辑回归的数学基础

逻辑回归的目标是找到一个逻辑函数,能够将输入特征映射到一个 (0, 1) 之间的概率值,从而对输入数据进行分类。逻辑回归的模型形式如下:

[
Y = σ ( W X + b ) Y = \sigma(WX + b) Y=σ(WX+b)
]

其中:

  • ( W ) 是权重向量
  • ( X ) 是输入特征向量
  • ( b ) 是偏置项
  • ( \sigma(z) ) 是 Sigmoid 函数,其定义为:

[
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
]

这个公式可能看起来有点抽象,但它的核心思想很简单:通过调整权重 ( W ) 和偏置 ( b ) ,我们可以找到一个函数,使得它能够将不同类别的数据分开。

损失函数

为了衡量模型的预测值与真实值之间的差异,我们使用二元交叉熵损失(Binary Cross-Entropy Loss)。它的形式如下:

[
Loss = − 1 m ∑ i = 1 m [ Y ( i ) log ⁡ ( Y ^ ( i ) ) + ( 1 − Y ( i ) ) log ⁡ ( 1 − Y ^ ( i ) ) ] \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [Y^{(i)} \log(\hat{Y}^{(i)}) + (1 - Y^{(i)}) \log(1 - \hat{Y}^{(i)})] Loss=m1i=1m[Y(i)log(Y^(i))+(1Y(i))log(1Y^(i))]
]

其中,( m ) 是样本数量,( \hat{Y}^{(i)} ) 是第 ( i ) 个样本的预测值。这个损失函数通过最大化预测的对数概率来优化模型,让我们的预测更加接近真实值。

反向传播(Backward Propagation)

反向传播是逻辑回归中优化模型参数的关键步骤。通过计算损失函数相对于每个参数的梯度,并利用这些梯度来更新参数,我们可以使损失函数逐渐减小,从而优化模型。

对于逻辑回归,损失函数相对于权重 ( W ) 和偏置 ( b ) 的梯度计算如下:

[
∂ Loss ∂ W = 1 m ∑ i = 1 m ( A ( i ) − Y ( i ) ) × X ( i ) \frac{\partial \text{Loss}}{\partial W} = \frac{1}{m} \sum_{i=1}^{m} (A^{(i)} - Y^{(i)}) \times X^{(i)} WLoss=m1i=1m(A(i)Y(i))×X(i)
]

[
∂ Loss ∂ b = 1 m ∑ i = 1 m ( A ( i ) − Y ( i ) ) \frac{\partial \text{Loss}}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (A^{(i)} - Y^{(i)}) bLoss=m1i=1m(A(i)Y(i))
]

其中,( A^{(i)} ) 是通过 Sigmoid 函数计算出的预测值。这个过程听起来复杂,但实际上就是在不断微调权重和偏置,让模型的预测越来越准确。

反向传播的实现

def backward_propagation(X, A, Y):
    m = X.shape[1]
    dw = (1/m) * np.dot(X, (A - Y).T)
    db = (1/m) * np.sum(A - Y)
    return dw, db

梯度下降(Gradient Descent)

梯度下降是一种用于优化模型参数的算法。其核心思想是沿着损失函数下降最快的方向(即梯度的反方向)更新参数,最终找到使损失函数最小化的参数值。

梯度下降的更新规则如下:

[
W : = W − α × ∂ Loss ∂ W W := W - \alpha \times \frac{\partial \text{Loss}}{\partial W} W:=Wα×WLoss
]

[
b : = b − α × ∂ Loss ∂ b b := b - \alpha \times \frac{\partial \text{Loss}}{\partial b} b:=bα×bLoss
]

其中,( \alpha ) 是学习率,决定了每次参数更新的步伐大小。选择合适的学习率对于训练一个表现良好的模型至关重要。

梯度下降的实现

def update_parameters(w, b, dw, db, learning_rate):
    w = w - learning_rate * dw
    b = b - learning_rate * db
    return w, b

逻辑回归的实现步骤

在理解了反向传播和梯度下降之后,我们可以开始实现一个完整的逻辑回归模型。以下是实现步骤。

1. 初始化参数

首先,我们需要初始化模型的权重 ( W ) 和偏置 ( b )。权重可以初始化为零或随机小值,偏置初始化为零。

def initialize_parameters(dim):
    w = np.zeros((dim, 1))
    b = 0
    return w, b

2. 前向传播

前向传播用于计算模型的输出,即将输入特征通过逻辑函数转换为概率值。

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

def forward_propagation(X, w, b):
    z = np.dot(w.T, X) + b
    A = sigmoid(z)
    return A

3. 计算损失

接下来,我们使用二元交叉熵损失来计算模型预测值与真实值之间的差异。

def compute_loss(A, Y):
    m = Y.shape[1]
    loss = -1/m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))
    return loss

4. 模型训练

在模型训练过程中,我们通过多次迭代,不断进行前向传播、计算损失、反向传播以及参数更新,最终得到一个准确率较高的模型。

def train(X, Y, num_iterations, learning_rate):
    w, b = initialize_parameters(X.shape[0])
    for i in range(num_iterations):
        A = forward_propagation(X, w, b)
        loss = compute_loss(A, Y)
        dw, db = backward_propagation(X, A, Y)
        w, b = update_parameters(w, b, dw, db, learning_rate)
    return w, b

5. 模型评估

最后,我们可以通过预测函数和模型在测试集上的表现来评估模型的性能。

def predict(X, w, b):
    A = forward_propagation(X, w, b)
    predictions = np.where(A > 0.5, 1, 0)
    return predictions

结论

逻辑回归是机器学习领域中的一块基石,虽然看似简单,但通过深入理解其背后的反向传播与梯度下降算法,我们不仅能掌握如何从零开始实现它,还能为理解更加复杂的模型打下坚实的基础。希望本文的详细讲解,能帮助你在机器学习的道路上迈出坚实的一步。

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值