逻辑回归的损失函数主要是对数损失函数(Log Loss),也称为交叉熵损失(Cross-Entropy Loss)。它是分类任务中常用的损失函数,特别适用于二分类问题。

1. 二分类逻辑回归损失函数

假设与输出

  • 输入特征: x∈Rn \mathbf{x} \in \mathbb{R}^n xRn

  • 模型输出(预测概率):
    y^=σ(wTx+b)=11+e−(wTx+b) \hat{y} = \sigma(\mathbf{w}^T \mathbf{x} + b) = \frac{1}{1 + e^{-(\mathbf{w}^T \mathbf{x} + b)}} y^=σ(wTx+b)=1+e(wTx+b)1
    其中σ(⋅)\sigma(\cdot)σ()是 Sigmoid 函数,将线性输出映射为 0 到 1 之间的概率。

  • 真实标签: y∈{0,1}y \in \{0, 1\} y{0,1}

Γ(z)=∫0∞tz−1e−tdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

损失函数公式

L(y,y^)=−1N∑i=1N[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)] L(y, \hat{y}) = - \frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] L(y,y^)=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]

其中:

  • NNN是样本数。
  • y^i\hat{y}_iy^i 是第 iii 个样本的预测概率。
  • yiy_iyi 是第 iii 个样本的真实标签。

推导过程

  1. 目标: 最大化似然函数(MLE,Maximum Likelihood Estimation)。
    P(y∣x)=y^y(1−y^)1−y P(y | \mathbf{x}) = \hat{y}^y (1 - \hat{y})^{1 - y} P(yx)=y^y(1y^)1y
    对所有样本的联合概率:
    L(w,b)=∏i=1Ny^iyi(1−y^i)1−yi L(\mathbf{w}, b) = \prod_{i=1}^N \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i} L(w,b)=i=1Ny^iyi(1y^i)1yi
  2. 最大化似然函数等价于最小化负对数似然
    ℓ(w,b)=−log⁡L(w,b)=−∑i=1N[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)] \ell(\mathbf{w}, b) = -\log L(\mathbf{w}, b) = -\sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] (w,b)=logL(w,b)=i=1N[yilog(y^i)+(1yi)log(1y^i)]
  3. 对单个样本的损失函数:
    ℓ(y,y^)=−[ylog⁡(y^)+(1−y)log⁡(1−y^)] \ell(y, \hat{y}) = - \left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right] (y,y^)=[ylog(y^)+(1y)log(1y^)]

解释

  • 当 ( y = 1 ) 时,损失函数为:
    −log⁡(y^) -\log(\hat{y}) log(y^)
    即预测概率越接近 1,损失越小。

  • 当 ( y = 0 ) 时,损失函数为:
    −log⁡(1−y^) -\log(1 - \hat{y}) log(1y^)
    即预测概率越接近 0,损失越小。


2. 多分类逻辑回归(Softmax 回归)损失函数

对于多分类问题,输出类别的概率使用 Softmax 函数,交叉熵损失函数为:

Softmax 函数

y^k=ezk∑j=1Kezj \hat{y}_k = \frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}} y^k=j=1Kezjezk
其中 KKK 是类别数,zk=wkTx+bkz_k = \mathbf{w}_k^T \mathbf{x} + b_kzk=wkTx+bk 是第 kkk 类的线性输出。

损失函数

L(y,y^)=−1N∑i=1N∑k=1Kyi,klog⁡(y^i,k) L(y, \hat{y}) = - \frac{1}{N} \sum_{i=1}^N \sum_{k=1}^K y_{i,k} \log(\hat{y}_{i,k}) L(y,y^)=N1i=1Nk=1Kyi,klog(y^i,k)
其中 yi,ky_{i,k}yi,k是 one-hot 编码的真实标签。


3. 损失函数的性质

  • 非负性: 损失函数总是非负的。
  • 凸性: 对于逻辑回归,损失函数是凸函数,可以通过梯度下降等优化方法找到全局最优解。
  • 概率解释: 损失函数本质上是最大化样本标签的预测概率。

示例代码

import numpy as np

def logistic_loss(y_true, y_pred):
    """
    计算二分类逻辑回归的交叉熵损失
    """
    epsilon = 1e-15  # 防止对数运算出现数值错误
    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)  # 限制预测值在合理范围内
    loss = -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
    return loss

# 示例
y_true = np.array([1, 0, 1, 0])  # 真实标签
y_pred = np.array([0.9, 0.1, 0.8, 0.2])  # 预测概率

loss = logistic_loss(y_true, y_pred)
print(f"逻辑回归损失:{loss:.4f}")

你希望进一步了解损失函数的优化过程、梯度推导,还是如何在实际项目中使用它?

更多推荐