逻辑回归从原理到实战:Python实现与梯度下降优化

1次阅读
没有评论

共计 1759 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景介绍

逻辑回归虽然名字里带“回归”,但实际上是解决分类问题的经典算法。与线性回归直接预测连续值不同,逻辑回归通过概率形式输出样本属于某个类别的可能性。比如在金融风控中预测用户违约概率,或在医疗领域判断肿瘤是否为恶性。

逻辑回归从原理到实战:Python 实现与梯度下降优化

  • 核心区别 :线性回归拟合 $y=w^Tx+b$,输出无限制;逻辑回归用 $\sigma(w^Tx+b)$ 将输出压缩到(0,1) 区间
  • 优势场景:二分类问题、需要概率输出的场景、特征与目标呈近似线性关系时

数学原理

Sigmoid 函数:概率的转换器

逻辑回归的核心是 sigmoid 函数:
$$\sigma(z) = \frac{1}{1+e^{-z}}$$

  • 将任意实数映射到 (0,1) 区间,完美契合概率定义
  • 函数曲线呈 S 形,在 z = 0 附近变化敏感,两端梯度平缓
  • 导数有优雅形式:$\sigma'(z) = \sigma(z)(1-\sigma(z))$

最大似然估计:寻找最优参数

不同于线性回归的最小二乘法,逻辑回归采用概率思想:

  1. 定义似然函数:$L(w) = \prod_{i=1}^n p^{y_i}(1-p)^{1-y_i}$
  2. 取对数得到对数似然:$\ell(w) = \sum [y_i\log p + (1-y_i)\log(1-p)]$
  3. 对 w 求偏导可得梯度:$\frac{\partial \ell}{\partial w_j} = \sum (y_i – p_i)x_{ij}$

Python 实现

基础实现(NumPy 版)

import numpy as np

class LogisticRegression:
    def __init__(self, lr=0.01, n_iters=1000):
        self.lr = lr          # 学习率
        self.n_iters = n_iters  # 迭代次数
        self.weights = None
        self.bias = None

    def _sigmoid(self, z):
        return 1 / (1 + np.exp(-z))

    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0

        # 梯度下降
        for _ in range(self.n_iters):
            linear_pred = np.dot(X, self.weights) + self.bias
            predictions = self._sigmoid(linear_pred)

            # 计算梯度
            dw = (1/n_samples) * np.dot(X.T, (predictions - y))
            db = (1/n_samples) * np.sum(predictions - y)

            # 更新参数
            self.weights -= self.lr * dw
            self.bias -= self.lr * db

    def predict(self, X, threshold=0.5):
        linear_pred = np.dot(X, self.weights) + self.bias
        y_pred = self._sigmoid(linear_pred)
        return [1 if i > threshold else 0 for i in y_pred]

关键点说明

  • 矩阵运算:使用 np.dot 实现向量化计算,比循环快 10-100 倍
  • 学习率选择:建议从 0.01 开始尝试,过大容易震荡,过小收敛慢
  • 停止条件:可增加早停机制(验证集精度不再提升时终止)

性能优化

特征缩放实践

当特征量纲差异大时(如年龄 vs 收入):

  1. 标准化:$x’ = \frac{x-\mu}{\sigma}$
  2. 归一化:$x’ = \frac{x – min}{max – min}$

学习率调整策略

  • 指数衰减:$\eta_t = \eta_0 \cdot 0.95^t$
  • 自适应方法:AdaGrad、Adam 等

生产环境避坑指南

常见问题解决方案

  • 过拟合:增加 L2 正则化项,或使用 Elastic Net
  • 特征共线性:计算 VIF 值,>10 的特征考虑删除
  • 类别不平衡 :采用过采样(SMOTE) 或调整类别权重

总结与思考

逻辑回归作为基础算法,在可解释性、训练效率上仍有优势:

  • 优点:模型简单、计算高效、输出概率、可解释性强
  • 局限:无法处理非线性关系(可通过核方法改进)
  • 升级路线:尝试加入多项式特征,或转向神经网络

建议读者在 UCI 的乳腺癌数据集上测试代码,观察不同学习率对收敛速度的影响。实践中遇到决策边界不明显时,可以尝试特征组合或更复杂的模型。

正文完
 0
评论(没有评论)