深入理解逻辑回归算法理论与实战

31179d8340cbdc9186e2743dc48382a9.jpeg

引言

在机器学习中,逻辑回归(Logistic Regression)是一种常用的分类算法,尤其适用于二分类问题。

尽管名字中有“回归”二字,逻辑回归的主要目的是进行分类,而不是回归。

逻辑回归通过使用线性模型来预测某个事件发生的概率,例如预测一封邮件是否是垃圾邮件、客户是否会购买产品等。

本文将深入探讨逻辑回归的理论基础、数学公式、参数含义,以及如何使用梯度下降算法来实现这一模型。

1. 逻辑回归的理论基础

1.1 线性模型与逻辑函数

在逻辑回归中,我们首先构建一个线性模型:

其中:

:线性组合的结果。

:截距(bias),表示当所有特征为零时,模型的预测值。

:每个特征的权重(coefficient),它们表示特征对结果的影响程度。

:输入特征,例如客户的年龄、收入等。

然后,我们使用逻辑函数(Logistic Function),也称为sigmoid函数,将线性组合的结果映射到 [0, 1] 的区间,以此来表示事件发生的概率:

其中:

:在给定特征的情况下,事件(例如,客户购买产品)的发生概率。

:sigmoid函数,将线性组合的结果转换为概率值。

1.2 代价函数

逻辑回归使用最大似然估计(Maximum Likelihood Estimation, MLE)来估计参数。为此,我们需要定义代价函数,通常使用交叉熵损失(Cross-Entropy Loss):

其中:

:代价函数,表示模型的损失值。

:样本数量。

:样本的真实标签(0或1)。

:给定特征的情况下,事件的预测概率。

2. 使用梯度下降算法实现逻辑回归

2.1 梯度下降的数学推导

为优化模型参数,我们需要计算损失函数对每个参数的梯度,使用梯度下降算法更新参数。梯度更新规则为:

其中:

:模型参数(截距或权重)。

:学习率(learning rate),决定每次更新的幅度。

:损失函数对参数的偏导数,表示在当前参数下,损失函数对于该参数的变化率。

2.2 Python 实现逻辑回归的梯度下降

接下来,我们将通过一个实际示例来实现逻辑回归,并使用梯度下降算法优化模型参数。

2.2.1 导入库

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt

2.2.2 生成数据

我们将生成一些随机数据来模拟顾客的特征(如年龄和收入)与购买决策之间的关系。

# 生成数据
np.random.seed(0)
X = np.random.randn(100, 2)  # 生成100个二维特征
Y = (X[:, 0] + X[:, 1] > 0).astype(int)  # 根据x1+x2是否大于0生成标签


# 添加偏置项(常数1)
m = X.shape[0]
X_b = np.c_[np.ones((m, 1)), X]  # 添加一列常数1到特征矩阵

2.2.3 定义梯度下降函数

我们定义逻辑回归 Sigmoid 函数和梯度下降函数。

# Sigmoid 函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))


# 交叉熵损失函数
def compute_loss(X, y, theta):
    m = len(y)
    h = sigmoid(X.dot(theta))
    loss = -(1/m) * np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))
    return loss


# 梯度下降函数
def gradient_descent(X, y, theta, alpha, num_iterations):
    m = len(y)
    losses = []
    
    for i in range(num_iterations):
        # 计算预测值
        h = sigmoid(X.dot(theta))
        
        # 计算梯度
        gradient = (1/m) * X.T.dot(h - y)
        
        # 更新参数
        theta -= alpha * gradient
        
        # 记录损失值
        loss = compute_loss(X, y, theta)
        losses.append(loss)
        
    return theta, losses

2.2.4 梯度下降实现逻辑回归

# 初始化参数
theta = np.zeros(X_b.shape[1])  # 初始化为0
alpha = 0.1  # 学习率
num_iterations = 1000  # 迭代次数


# 使用梯度下降进行优化
theta, losses = gradient_descent(X_b, Y, theta, alpha, num_iterations)

theta : array([-0.02964354,  3.95411916,  3.68371913])

2.2.5 绘制损失曲线

通过绘制损失函数随迭代次数变化的曲线,我们可以观察梯度下降的收敛过程。

# 绘制损失函数随迭代次数的变化
plt.plot(range(num_iterations), losses, color='blue')
plt.title('损失函数随迭代次数的变化')
plt.xlabel('迭代次数')
plt.ylabel('损失值 (交叉熵)')
plt.grid(True)
plt.show()

1aec28acb33cdf602aee261f1a8b62a5.png

2.2.6 可视化决策边界

我们可以通过绘制决策边界来观察逻辑回归模型的分类效果。

# 绘制原始数据的散点图
plt.figure(figsize=(10, 6))


# 绘制类别0的点
plt.scatter(X[Y == 0][:, 0], X[Y == 0][:, 1], color='blue', label='类 0', edgecolors='k')
# 绘制类别1的点
plt.scatter(X[Y == 1][:, 0], X[Y == 1][:, 1], color='red', label='类 1', edgecolors='k')


# 计算决策边界的直线
# 决策边界的方程是 θ0 + θ1*x1 + θ2*x2 = 0 -> x2 = -(θ0 + θ1*x1) / θ2
theta0 = theta[0]
theta1, theta2 = theta[1], theta[2]
x1_vals = np.linspace(-3, 3, 100)
x2_vals = -(theta0 + theta1 * x1_vals) / theta2


# 绘制决策边界直线
plt.plot(x1_vals, x2_vals, color='green', label='决策边界')


# 添加图例和标题
plt.legend()
plt.title('逻辑回归 - 梯度下降优化后的决策边界')
plt.xlabel('X1')
plt.ylabel('X2')
plt.grid(True)

ac4124ff8bef6ae6ccc5d03ed1b884c6.png

3. 逻辑回归的优缺点

3.1 优点

简单易用:逻辑回归是一个非常直观的模型,容易理解和实现。

快速计算:由于计算过程相对简单,逻辑回归在大规模数据集上表现良好。

概率输出:逻辑回归可以输出事件发生的概率,这在某些应用中非常有用。

3.2 缺点

线性可分性:逻辑回归假设特征与目标之间存在线性关系,对于非线性问题表现不佳。

过拟合风险:在特征数量较多的情况下,模型可能会过拟合,需要通过正则化来降低风险。

总结

逻辑回归是一种简单而有效的分类算法,通过构建一个线性模型并使用逻辑函数来预测事件发生的概率,逻辑回归可以帮助我们做出许多实际的决策。

希望本文能够帮助你深入理解逻辑回归算法及其梯度下降实现。如果你有任何问题,欢迎在评论区留言!

系列文章:

从零开始搭建机器学习开发环境:PyCharm与Anaconda教程

机器学习中的数据预处理:从原始数据到模型输入

深入理解简单线性回归理论与实战

深入理解多项式回归理论与实战

回归模型评估指标

深入浅出梯度下降算法



机器学习100天计划!

视频讲解 + 实战代码 + 社群交流 + 直播答疑

如果你想获得系统性的机器学习理论、代码、实战指导,可以购买我们的《机器学习100天》课程。

644a58d08dd63a0c820a55aeba2dc81c.png

《机器学习100天》总共包含 100 个机器学习知识点视频讲解!我会提供所有的教学视频、实战代码,并提供社群一对一交流和直播答疑!

扫描下方二维码,加入学习!

8e182021cf7a66e30ce586dab58108fe.png

点击阅读原文即刻报名,一顿午饭钱,值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红色石头Will

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值