当前位置: 首页 > article >正文

【机器学习chp6】对数几率回归

推荐文章1,其中解释了负log似然损失等价于交叉熵损失。

【王木头·从感知机到神经网络】-CSDN博客

推荐文章2,其中有牛顿法的介绍

【王木头·梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam-CSDN博客

推荐文章3,其中通过实例介绍了各种二分类模型的评价指标

【机器学习】二分类模型评估方法大全-CSDN博客

前言

本文遗留问题:

(1)案例分析未完成。

(2)分类模型评价指标实验需回顾。

目录

前言

一、对数几率回归模型

1、分类任务

(1)分类任务概述

(2)两类分类任务

2、对数几率回归模型

(1)Sigmoid 函数

(2)对数几率回归模型

二、对数几率回归的损失函数

1、0/1损失

2、交叉熵损失

3、对数几率回归模型的目标函数

(1)对数几率回归模型的目标函数

(2)对数几率回归中正则化的必要性

三、对数几率回归的优化求解

1、梯度下降求解

(1)目标函数形式

(2)损失函数梯度

(3)Hessian矩阵正定——逻辑回归极小值是最小值

2、牛顿法求解

3、拟牛顿法介绍

4、Logistic回归的牛顿求解:IRLS

四、多类分类任务的对数几率回归

1、1vs.其他

2、多项分布直接实现多分类任务

3、损失函数

五、分类任务中的样本不均衡问题

1、概述

2、从数据角度解决

(1)随机上/下采样

(2)下采样与集成学习

(3)上采样与样本合成

3、从算法层面解决

(1)代价敏感学习

(2)Scikit-Learn中的不均衡样本分类处理

六、分类模型的评价指标

七、对数几率回归案例分析

八、⭐⭐全文总结⭐⭐


一、对数几率回归模型

1、分类任务

(1)分类任务概述

监督学习的定义:

        给定训练数据集 D = \{(x_i, y_i)\}_{i=1}^N,其中 x_i​ 是输入特征, y_i​ 是输出或响应。

分类任务:

        当 y_i \in \{1, 2, \ldots, C\} 时,监督学习任务称为分类任务。目标是学习从输入 x到输出 y的映射 f

测试阶段:

        利用学习到的映射 f(x) 对新的数据 x 进行预测 \hat{y} 。

分类任务的重点是构建一个模型 f(x) 来捕捉输入 x 与输出 y 的关系,并在测试数据上进行预测。

(2)两类分类任务

两类分类的输出y_i \in \{0, 1\}

伯努利分布:两类分类任务的概率分布可以用伯努利分布描述: p(y; \mu) = \mu^y (1 - \mu)^{1-y} 其中,\mu 表示事件 y=1 的概率。

对于输入 x,输出 y 的条件分布用 \mu(x) 描述:

                                        ​​​​​​​        ​​​​​​​        y | x \sim \text{Bernoulli}(\mu(x))

此处 \mu(x) 表示在输入 x的情况下,y=1 的概率。

2、对数几率回归模型

(1)Sigmoid 函数

定义: \sigma(z) = \frac{1}{1 + e^{-z}}

导数: \frac{d \sigma(z)}{dz} = \sigma(z) (1 - \sigma(z))

Sigmoid 函数的特性在于其值域在 (0, 1),适合作为概率值。

(2)对数几率回归模型

概率密度函数p(y|x; \mu) = \mu(x)^y (1 - \mu(x))^{1-y}

线性模型:假设 \mu(x) 的形式为: \mu(x) = w^T x 但由于 \mu(x) 是概率值,需在区间 [0, 1] 内,因此将其通过 sigmoid 函数约束: \mu(x) = \sigma(w^T x) 其中 sigmoid 函数为: \sigma(z) = \frac{1}{1 + e^{-z}}

对数几率回归使用 sigmoid 函数将线性模型的输出变换为概率。

对数几率:
定义一个事件的几率(odds)为该事件发生的概率与不发生的概率的比值:
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         \frac{p(y = 1|x)}{p(y = 0|x)} = \frac{\sigma(w^T x)}{1 - \sigma(w^T x)} = \frac{\frac{1}{1 + e^{-w^T x}}}{1 - \frac{1}{1 + e^{-w^T x}}} = e^{w^T x}
    ​​​​​​​        ​​​​​​​        

两边同取log运算,得到对数几率:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       \ln \frac{p(y = 1|x)}{p(y = 0|x)} = \ln \left(e^{w^T x}\right) = w^T x

决策边界:

分类规则:根据后验概率的大小进行分类: p(y=1|x) > p(y=0|x) \implies w^T x > 0 \implies y=1 决策边界是 w^T x = 0,此时 y=1y=0 的概率相等。

二、对数几率回归的损失函数

1、0/1损失

若预测值 \hat{y} 等于真实值 y,损失为 0;否则为 1:

缺点:0/1 损失函数不连续,导致优化计算困难。

替代:通常选用凸损失函数(如交叉熵损失),它连续且易于优化,且与 0/1 损失结果一致。

2、交叉熵损失

交叉熵损失描述了两个分布之间的差异,用于分类任务中概率分布的对比。

在对数几率回归模型中:

        ​​​​​​​        ​​​​​​​        ​​​​​​​         L(\mu(x), y) = -y \ln(\mu(x)) - (1 - y) \ln(1 - \mu(x))

其中:

  • \mu(x) = \sigma(w^\top x),表示预测为正类的概率;
  • \sigma(z) = \frac{1}{1 + e^{-z}} 是 Sigmoid 函数。

交叉熵损失等价于负log似然损失,详细的分析在推荐文章1。

3、对数几率回归模型的目标函数

(1)对数几率回归模型的目标函数

对数几率回归的目标函数包含两部分:

  • 损失项:交叉熵损失,用于衡量预测值与真实值之间的差异;
  • 正则化项:用于避免模型过拟合,限制权重大小。

数学表达式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        J(w; \lambda) = \sum_{i=1}^{N} L(y_i, \mu(x_i; w)) + \lambda R(w)

其中:

  • \lambda 是正则化强度的超参数;
  • R(w) 是正则化项,可以选择:
    • L1 正则:R(w) = |w|_1
    • L2 正则:R(w) = |w|_2^2
    • 或两者的组合。

(2)对数几率回归中正则化的必要性

        从贝叶斯角度来看,正则化的引入是为了在参数估计过程中加入先验信息,以便对模型的复杂性进行约束,防止过拟合。在没有正则化的情况下,实际上就是在没有任何先验假设的情况下进行最大似然估计 (MLE),即直接根据数据推断参数。

        当你使用对数几率回归(logistic regression)并且没有引入正则化时,模型的训练目标仅仅是最大化似然函数。这个过程中,尤其在训练数据完全可分的情况下,最大化似然函数会导致权重参数无限增大,因为这样的增大能够让模型的决策边界完美地将正负样本分开,从而使得训练误差趋近于零。

        贝叶斯视角下来看,这意味着我们没有任何先验信息来约束参数的大小,导致在没有任何限制的情况下,模型会过度拟合数据,参数趋向无穷大。具体来说,在数据完全可分时,似然函数趋向无穷大,因为随着参数增大,模型能够越来越准确地分类每一个样本,但这种无穷大的可能性缺乏对参数的合理限制。

问题:为什么参数大可以让能够让模型的决策边界完美地将正负样本分开,从而使得训练误差趋近于零?

        在逻辑回归中,模型试图找到一个最优的决策边界来将正负样本区分开。随着模型参数(\theta) 增大:

  1. 增大参数时,\theta^T x_i 会变得更大或更小:对于正样本(y_i = 1),当参数 \theta 增大时,\theta^T x_i​ 会变得更大,使得 \sigma(\theta^T x_i) 更接近1;对于负样本(y_i = 0),如果参数 \theta 继续增大,\theta^T x_i​ 会变得更小,使得 \sigma(\theta^T x_i) 更接近0。

  2. “完美拟合”:当模型参数足够大时,正样本的预测概率会接近1,负样本的预测概率会接近0。这意味着模型能够完美地分开所有正负样本,产生一个理想的决策边界。

  3. 极端情况下的无穷大:在训练数据完全线性可分的情况下,最大化似然函数会导致参数不断增大,从而使得模型对每个样本的分类概率趋向于极端值(1或0),从而使决策边界完全分开正负样本。

        当训练数据 不完全可分,理论上来说,正则化并不是绝对必要的,但引入正则化依然是一种常见的做法。

        当训练数据 不完全可分,训练数据中正负样本可能重叠,且存在无法通过一个简单的线性决策边界完美分开的情况。这意味着,即使模型参数增大,也无法使得所有样本的预测概率趋近于0或1。在这种情况下,模型会尽量减少训练误差,但它不会过度增大参数来“强行”分开样本,而是会在一个较为合理的范围内收敛,从而实现较好的拟合。

三、对数几率回归的优化求解

        对数几率回归的目标函数通常无法通过解析方式直接求解,因此需要使用数值优化的方法。主要的优化方法有:

梯度下降法

  • 随机梯度下降(SGD):每次使用一个样本点进行梯度更新,收敛速度快,但容易受到噪声干扰。
  • 随机平均梯度(SAG):改进了SGD,通过利用历史梯度信息进行加权平均,减少震荡。
  • SAGA:进一步优化了SAG算法,适用于非凸问题。
  • 坐标轴下降法:逐次优化每个变量。(当使用L1正则时只能用坐标轴下降

牛顿法和拟牛顿法

  • 使用二阶导数(Hessian矩阵)进行优化,收敛速度更快,但计算开销较大。包括BFGS和L-BFGS等方法。

1、梯度下降求解

(1)目标函数形式

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        J(w, \lambda) = C \sum_{i=1}^{N} L(\mu(x_i; w), y_i) + R(w)

  • L(\mu(x_i; w), y_i):交叉熵损失,定义了模型预测值与真实标签的偏离程度。
  • R(w):正则化项,防止模型过拟合。可以是L1正则、L2正则,或二者结合。
  • C:超参数,用于平衡损失函数和正则项。 起到正则作用, C 越大,正则越少。

(2)损失函数梯度

梯度的表达式是:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        g(w) = \nabla_w J_1(w) = X^T (\mu - y)

其中:

  • \mu = \sigma(Xw),表示模型的预测值;
  • y 是真实标签;
  • X^T 为输入数据的转置。

梯度下降法使用梯度信息沿负梯度方向更新权重,更新公式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        w^{(t+1)} = w^{(t)} - \eta g(w)

其中 \eta 是学习率。

(3)Hessian矩阵正定——逻辑回归极小值是最小值

Hessian矩阵 H(w) 的定义:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​              H(w) = \frac{\partial g(w)}{\partial w^T}

展开梯度的二阶导数:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        H(w) = \frac{\partial \left( \sum_{i=1}^N (\mu(x_i, w) - y_i) x_i \right)}{\partial w^T}

通过链式法则得到:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        H(w) = \sum_{i=1}^N \mu_i (1 - \mu_i) x_i x_i^T

使用矩阵表示:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​          H(w) = X^T S X

其中:

  • \mu_i = \mu(x_i, w) = \sigma(w^T x_i)
  • S = \text{diag}(\mu_i(1 - \mu_i)),为对角矩阵
  • X为输入特征矩阵,x_i​ 表示单个样本的特征向量。
所以Hessian矩阵 为正定矩阵,梯度下降能找到全局最小值。

2、牛顿法求解

推荐文章2中有关于牛顿法的简单介绍

对数几率回归的牛顿法梯度下降的迭代公式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        w^{(t+1)} = w^{(t)} - H(w)^{-1} g(w)

优点是收敛速度快,缺点是需要计算和存储Hessian矩阵,计算复杂度较高。

3、拟牛顿法介绍

牛顿法比一般的梯度下降法收敛速度快。

但在高维情况下,计算目标函数的二阶偏导数的复杂度高,而且有时候目标函数的海森矩阵无法保持正定,不存在逆矩阵,此时牛顿法将不再能使用。
因此人们提出了 拟牛顿法 :不用二阶偏导数构造出可以近似Hessian矩阵(或Hessian矩阵的逆矩阵)的正定对称矩阵,进而再逐步优化目标函数。

不同的Hessian矩阵构造方法产生了不同的拟牛顿法,BFGS/L-BFGS

推荐阅读:
1. 谈谈常见的迭代优化方法
https://blog.csdn.net/aws3217150/article/details/50548177
2. Mathematical optimization: finding minima of functions
https://www.scipy-lectures.org/advanced/mathematical_optimization/

4、Logistic回归的牛顿求解:IRLS

四、多类分类任务的对数几率回归

1、1vs.其他

对每个类别 c ,训练一个对数几率回归分类器 f^{c}_{w}(x) ,预测 y=c 概率

对新的输入 x ,选择使得 f^{c}_{w}(x) 最大的类别作为预测(最大后验估计, MAP)
                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        
                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  \hat{y}=\underset{c}{argmax}f^{c}_{w}(x)

2、多项分布直接实现多分类任务

Bernoulli分布用于描述二分类任务,而Multinoulli分布(即多项分布)用于多类分类任务。

Multinoulli分布的参数表示为类别的概率向量 \theta = (\theta_1, \theta_2, ..., \theta_C),其中每个分量表示对应类别的概率,所有分量和为1。

softmax函数及分类

Softmax函数扩展了Sigmoid函数,用于将线性组合的输出转换为类别概率。其公式为:         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \sigma(z_c) = \frac{e^{z_c}}{\sum_{c'=1}^C e^{z_{c'}}}

Softmax分类器适合处理多类分类任务,通过计算每个类别的概率并选择最大概率的类别作为最终输出。

3、损失函数

定义为负对数似然损失(Negative Log-Likelihood Loss)。损失函数形式为:   

      ​​​​​​​        ​​​​​​​        ​​​​​​​      ​​​​​​​             ​​​​​​​        L(\mu, y) = -\sum_{c=1}^C y_c \ln(\mu_c)

等价为交叉熵损失。

最大化似然估计等价于最小化训练集上的损失。

五、分类任务中的样本不均衡问题

1、概述

样本不均衡问题是指在分类任务中,不同类别的样本数量差异很大。例如:

  • 少数类的样本数量远小于多数类。
  • 导致模型在训练时倾向于多数类,从而忽略少数类的特征。

出现场景

  • 搜索引擎:点击预测中,点击的网页占比很小。
  • 电子商务:商品推荐中,被推荐商品被购买的概率低。
  • 信用卡欺诈检测:欺诈样本极少。
  • 网络攻击识别:正常访问请求占绝大多数。
  • 医疗诊断:罕见疾病的病例稀少。

这些场景中,少数类虽然样本少,但通常是更重要的,忽视少数类可能导致模型实用性降低。

解决 样本不均衡问题可从数据角度或算法角度

2、从数据角度解决

通过数据增强或预处理的方式平衡数据分布。

(1)随机上/下采样

随机下采样:

        从多数类中随机选择少量样本,与少数类样本结合构建新的训练集。

        优点:减少多数类样本对模型的偏向。

        缺点:可能丢失信息,导致模型性能下降。

随机上采样:

        随机复制少数类样本来增加样本量
         优点:平衡类别分布,充分利用现有数据。
         缺点:易导致过拟合,模型可能“记住”重复的少数类样本。

(2)下采样与集成学习

EasyEnsemble算法:

  • 将多数类样本通过有放回抽样生成多个子集。
  • 每个子集与少数类样本组合形成一个训练数据集,分别训练多个模型。
  • 最终预测结果为这些模型输出的平均值。
  • 这种方法通过集成学习增强了模型对少数类的分类能力。

BalanceCascade(级联)算法:

  • 根据已有模型的预测准确性,从多数类样本中有效地选择与少数类样本结合生成新的数据集。
  • 对每轮训练中未正确分类的样本,作为下一轮训练的重要部分,直到满足某种停止条件。
  • 最终模型由这些迭代模型的组合形成。

优点:

  • 针对少数类的特征进行多样化训练,能够增强模型的泛化能力。
  • 适合处理多数类数据量较大的场景。

缺点:

  • 多次采样和模型训练可能会增加计算复杂度。

(3)上采样与样本合成

SMOTE算法(Synthetic Minority Over-sampling Technique合成少数过采样技术):

  • 通过插值法生成新的少数类样本。
  • 步骤:
    1. 对于少数类样本 x_i​,找到其 K个最近邻样本。
    2. 随机选择一个最近邻样本 x_{near}​。
    3. x_i​ 和 x_{near}​ 之间生成一个新的样本: x_{new} = (1-\xi)x_i + \xi x_{near}, \xi \in [0, 1]
  • 新样本是通过少数类样本之间的插值生成,旨在增加少数类样本的分布密度。

优点:

  • 避免了随机上采样可能导致的过拟合问题。
  • 实践证明可以提高分类器性能。

不足:

  • 高维数据表现不佳:高维空间中样本邻域稀疏,插值的有效性下降。
  • 引入噪音:可能将多数类的邻近样本误认为少数类,从而生成噪音样本。
  • 类别重叠风险:边界区域可能引入错误的类别标签。

改进

  • Borderline-SMOTE等算法:
    • 更关注少数类边界的样本,通过更精细的策略生成样本以减少错误噪音。

3、从算法层面解决

通过优化算法适应不平衡数据。

(1)代价敏感学习

核心思想:不同类别的分类错误代价不同,通过调整损失函数中的代价矩阵,赋予少数类更大的权重。

代价矩阵形式:                                 代价矩阵= \begin{bmatrix} L_{00} & L_{01} \\ L_{10} & L_{11} \end{bmatrix}

  • L_{01}​:将 0 分类为 1 的代价。
  • L_{10}​:将 1 分类为 0 的代价。

(2)Scikit-Learn中的不均衡样本分类处理

类权重(class_weight)

  • 功能:在训练模型时为每个类别分配权重,增加少数类的重要性。某类别的样本量越多,其权重越低;样本量越少,则权重越高

        设置方式

  • balanced:自动计算权重,公式为: 

        ​​​​​​​        ​​​​​​​        

  • 自定义权重:手动设置每个类别的权重,如 {0: 0.9, 1: 1.1}

样本权重(sample_weight)

  • 功能:为每个样本设置权重,在模型训练时区分样本的重要性。
  • 特点:可以结合类权重使用,最终权重为二者的乘积。样本的真正权重是:class_weight*sample_weight

六、分类模型的评价指标

推荐文章3。

两分类的评价指标在推荐文章3中已有分析,从两分类到多分类的情况:

七、对数几率回归案例分析

Otto商品分类

八、⭐⭐全文总结⭐⭐

        对数几率回归虽然名字是回归,但它不是回归算法,而是分类算法。本文首先介绍了对数几率回归模型。采用sigmoid激活函数使得不同类别的概率和归一化。对其进行处理,如寻找损失函数和目标函数时对其取对数。

        损失函数为交叉熵损失(或者说负log似然损失)。

        目标函数为损失函数和加上正则项,对数几率回归一定要加正则项,因为如果样本数据可分,要让损失函数最小,即log似然最大,该过程中会使得参数w趋于无穷大。因为无穷大时 训练误差趋近于零。实现完美可分。
        对目标函数的优化采样的方法是梯度下降法,改进方法为牛顿法,拟牛顿法。但如果正则化采用L1正则,不能使用梯度下降,只能用坐标轴下降。
        在第四部分介绍了多分类的情况,激活函数采用sigmoid的扩展softmax。损失函数仍然为交叉熵损失(负log似然损失)。
        第五部分介绍了分类任务中样本不均衡问题,可以从数据角度解决,
分为上采样(样本少的类采用差值扩充)和下采样(样本多的类抽取少量,多次建模,取平均模型);从算法角度主要是给类别赋不同的权重,让样本少的类别权重大一点。
        第六部分介绍分类任务的评价指标。
        第七部分对一个案例进行分析,对本节知识实现了应用。

http://www.kler.cn/a/404180.html

相关文章:

  • 机器学习day6-线性代数2-梯度下降
  • System Control Units (SCU)
  • 项目:华清速递
  • 天润融通携手挚达科技:AI技术重塑客户服务体验
  • 上海市计算机学会竞赛平台2024年11月月赛丙组添加删除
  • K8S资源限制之ResourceQuota
  • 【AI】人工智能报告解读——中国人工智能的发展
  • #systemverilog# 关于 randomize(a) 却报 b 失败的疑问
  • pytorch经典训练流程
  • 【运维自动化-作业平台】如何使用全局变量之数组类型?
  • C#桌面应用制作计算器进阶版01
  • 空间与单细胞转录组学的整合定位肾损伤中上皮细胞与免疫细胞的相互作用
  • 稀疏最大谐波噪声比解卷积算法MATLAB实战
  • 十八:HTTP包体的传输方式(1):定长包体
  • 如何删除pdf里的任意一页?删除PDF里任意一页的几种方法
  • 算法知识-13-链表
  • 蓝桥杯每日真题 - 第20天
  • 「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
  • HTTP 协议的作用
  • [开源] SafeLine 好用的Web 应用防火墙(WAF)
  • Java Swing-1.基本概念及组件
  • [每日一氵] 拆分 pip install git+https://github.com/xxx/xx.git@bece3d4
  • 优化 Solana 程序
  • 嵌入式硬件杂谈(四)-高速板PCB设计 高速信号全面讲解 蛇形线 等长线 差分对 阻抗对
  • Go语言并发控制:sync.Mutex、sync.RWMutex和sync.WaitGroup详解
  • ML 系列:第 26 节 - 连续概率分布(均匀分布)