算法之逻辑斯蒂回归(Logistic regression)

简介:个人学习分享,如有错误,欢迎批评指正。

逻辑斯蒂回归(Logistic Regression)是统计学中一种广泛应用于二分类问题的算法。它的主要目标是预测二分类问题中的事件发生的概率。尽管名字里有“回归”,但逻辑斯蒂回归实际上是一种分类方法。

一、基本概念与定义

1. 二分类问题

  • 在二分类问题中,目标变量 y y y 只有两个可能的取值,通常记为0和1。逻辑斯蒂回归的任务就是根据输入特征 X X X 来预测输出变量 y y y 属于类别1(通常是我们感兴趣的“正类”)的概率

2. 线性回归的延伸

  • 逻辑斯蒂回归可以看作是线性回归的一种延伸。在线性回归中,我们试图通过求解回归系数,使得线性组合 z = β 0 + β 1 X 1 + ⋯ + β n X n z = \beta_0 + \beta_1 X_1 + \cdots + \beta_n X_n z=β0+β1X1++βnXn 能够近似预测输出值。然而,线性回归模型的输出是一个实数,而对于分类问题,我们需要的是一个概率值,即在0和1之间的数值。

3. 逻辑斯蒂函数(Sigmoid函数)

  • 为了将线性回归的输出映射到0到1之间,我们引入了逻辑斯蒂函数。逻辑斯蒂函数的形式为:

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

    其中, z z z 是线性回归的结果。逻辑斯蒂函数的输出范围为0到1,因此可以将其视为事件发生的概率。

4. 逻辑斯蒂回归模型

  • 逻辑斯蒂回归模型的核心表达式为:

    P ( y = 1 ∣ X ) = 1 1 + e − ( β 0 + β 1 X 1 + ⋯ + β n X n ) P(y = 1|X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_n X_n)}} P(y=1∣X)=1+e(β0+β1X1++βnXn)1

    该表达式表示给定输入特征 X X X 后,事件 y = 1 y = 1 y=1 发生的概率。通过这个模型,我们可以预测一个样本属于正类的概率。

5. 概率与分类决策

  • 输出的概率值可以用于分类决策。通常情况下,我们会设置一个阈值(例如0.5),如果概率大于这个阈值,则将样本分类为正类(即 y = 1 y = 1 y=1);否则,将其分类为负类(即 y = 0 y = 0 y=0)。

6. 逻辑斯蒂回归的解释性

  • 逻辑斯蒂回归模型具有良好的解释性。模型中的回归系数 β i \beta_i βi 代表了每个特征对事件发生概率的影响大小。具体来说, β i \beta_i βi 的符号表示该特征的增加是增加(正系数)还是减少(负系数)事件发生的概率。

二、逻辑斯蒂回归的数学表达式

1. 线性部分

首先,逻辑斯蒂回归的核心是一个线性模型,它对输入特征进行加权求和,然后加上偏置项。其形式为:

z = β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β n X n z = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_n X_n z=β0+β1X1+β2X2++βnXn

其中:

  • z z z 是线性组合的结果,也称为“对数几率(log-odds)”。
  • X 1 , X 2 , … , X n X_1, X_2, \dots, X_n X1,X2,,Xn 是输入特征。
  • β 0 \beta_0 β0 是偏置项,也称为截距。
  • β 1 , β 2 , … , β n \beta_1, \beta_2, \dots, \beta_n β1,β2,,βn 是模型参数(回归系数),表示每个特征对输出的影响。

2. 逻辑斯蒂函数(Sigmoid函数)

为了将线性模型的输出 z z z 转换为概率值,逻辑斯蒂回归使用了逻辑斯蒂函数,其数学形式为:

在这里插入图片描述

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

逻辑斯蒂函数的作用是将任何实数 z z z 映射到0到1的范围内,因此可以解释为事件发生的概率。

3. 逻辑斯蒂回归模型

将线性模型的输出 z z z 代入逻辑斯蒂函数,我们得到逻辑斯蒂回归的最终形式:

P ( y = 1 ∣ X ) = 1 1 + e − ( β 0 + β 1 X 1 + ⋯ + β n X n ) P(y = 1|X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_n X_n)}} P(y=1∣X)=1+e(β0+β1X1++βnXn)1

其中:

  • P ( y = 1 ∣ X ) P(y = 1|X) P(y=1∣X) 表示在给定特征 X X X 的情况下,事件 y = 1 y = 1 y=1 发生的概率。

这个公式揭示了逻辑斯蒂回归如何将特征数据与概率联系起来。

4. 对数几率的解释

对数几率(Logit)是理解逻辑斯蒂回归模型的一个关键概念,它将概率和线性关系连接起来,使得逻辑斯蒂回归在理论上和计算上更加合理。下面详细解释对数几率的意义及其在逻辑斯蒂回归中的作用。

1. 对数几率的定义

对数几率(Logit)是概率 P P P 的对数几率转换,它的数学表达式为:

logit ( P ) = log ⁡ ( P 1 − P ) \text{logit}(P) = \log\left(\frac{P}{1 - P}\right) logit(P)=log(1PP)

其中:

  • P P P 是事件发生的概率,即 P ( y = 1 ∣ X ) P(y = 1|X) P(y=1∣X)
  • 1 − P 1 - P 1P 是事件不发生的概率,即 P ( y = 0 ∣ X ) P(y = 0|X) P(y=0∣X)
2. 对数几率的解释

对数几率表达的是事件发生的概率 P P P 与事件不发生的概率 1 − P 1 - P 1P 之间的比值(也称为几率,odds)的对数。具体解释如下:

  • 几率(odds)几率是指事件发生的可能性与事件不发生的可能性的比值,它可以用来衡量事件发生的相对可能性:

    odds = P 1 − P \text{odds} = \frac{P}{1 - P} odds=1PP

    例如,如果 P = 0.75 P = 0.75 P=0.75(即事件发生的概率是75%),那么几率就是:

    odds = 0.75 1 − 0.75 = 0.75 0.25 = 3 \text{odds} = \frac{0.75}{1 - 0.75} = \frac{0.75}{0.25} = 3 odds=10.750.75=0.250.75=3

    表示事件发生的可能性是不发生的可能性的3倍。

  • 对数几率(logit):对数几率是几率的自然对数(ln),其数学形式为:

    logit ( P ) = log ⁡ ( P 1 − P ) \text{logit}(P) = \log\left(\frac{P}{1 - P}\right) logit(P)=log(1PP)

    对数几率可以将概率 P P P 转换为一个从负无穷到正无穷的实数。这个转换非常重要,因为它使得线性模型可以用于预测概率的对数几率,从而通过线性转换实现分类问题。

3. 对数几率与逻辑斯蒂回归的关系

在逻辑斯蒂回归模型中,对数几率是线性回归的结果:

logit ( P ) = β 0 + β 1 X 1 + ⋯ + β n X n \text{logit}(P) = \beta_0 + \beta_1 X_1 + \cdots + \beta_n X_n logit(P)=β0+β1X1++βnXn

这里, logit ( P ) \text{logit}(P) logit(P) 是事件 y = 1 y = 1 y=1 发生的对数几率,表示为输入特征 X X X 的线性组合。这意味着:

  • 每一个输入特征 X i X_i Xi 对对数几率有线性影响。
  • 参数 β i \beta_i βi 值衡量特征 X i X_i Xi 对事件发生几率的影响强度,具体来说, β i \beta_i βi 是特征 X i X_i Xi 增加一个单位时,对数几率的增量。
4. 对数几率的优点

对数几率有以下几个优点:

  • 线性关系:对数几率与输入特征 X X X 之间的线性关系使得逻辑斯蒂回归可以利用线性回归的理论和技术来进行估计和预测。
  • 值域无限:几率的范围是正值区间(从0到正无穷),通过对数转换,对数几率的范围是所有实数(从负无穷到正无穷),这使得模型更稳定并且更容易处理。
  • 解释性强:对数几率使得线性模型可以很容易地解释各个特征对分类结果的影响。
5. 实际意义

在实际应用中,对数几率提供了一种将分类问题转化为线性回归问题的工具。通过理解对数几率,我们可以更好地解释模型的输出结果,并针对不同的特征进行分析。例如,假设某个特征的 β i \beta_i βi 是正值,意味着当该特征值增加时,事件 y = 1 y = 1 y=1 发生的几率也会增加。

5. 最大似然估计

最大似然估计(Maximum Likelihood Estimation, MLE)是逻辑斯蒂回归模型中用于估计参数 β \beta β 的一种重要方法。它的目标是找到一组参数,使得在给定数据下,模型所预测的结果的可能性最大化

1. 最大似然估计的基本概念

在逻辑斯蒂回归中,我们的任务是根据一组输入特征 X X X 来预测输出 y y y 的概率。最大似然估计的核心思想是:给定一组训练数据,我们希望找到一组参数 β \beta β,使得根据这些参数计算出的事件发生的概率最大。

换句话说,最大似然估计是通过最大化数据出现的可能性来确定模型参数的过程。

2. 逻辑斯蒂回归的似然函数

假设我们有 m m m 个训练样本,每个样本包含一个输入特征向量 X ( i ) X^{(i)} X(i) 和对应的输出 y ( i ) y^{(i)} y(i)。对于每一个样本 x i x_i xi,逻辑斯蒂回归模型会计算事件 y = 1 y = 1 y=1 发生的概率 P ( y ( i ) = 1 ∣ X ( i ) ; β ) P(y^{(i)} = 1|X^{(i)}; \beta) P(y(i)=1∣X(i);β),以及事件 y = 0 y = 0 y=0 发生的概率 P ( y ( i ) = 0 ∣ X ( i ) ; β ) P(y^{(i)} = 0|X^{(i)}; \beta) P(y(i)=0∣X(i);β)

似然函数(Likelihood Function)表示所有训练样本在给定参数 β \beta β 下的联合概率:

L ( β ) = ∏ i = 1 m P ( y ( i ) ∣ X ( i ) ; β ) L(\beta) = \prod_{i=1}^{m} P(y^{(i)}|X^{(i)}; \beta) L(β)=i=1mP(y(i)X(i);β)

其中, P ( y ( i ) ∣ X ( i ) ; β ) P(y^{(i)}|X^{(i)}; \beta) P(y(i)X(i);β) 表示在给定参数 β \beta β 的情况下,样本 x i x_i xi 的输出 y ( i ) y^{(i)} y(i) 的概率。对于逻辑斯蒂回归,似然函数可以进一步表示为:

L ( β ) = ∏ i = 1 m ( P ( y ( i ) = 1 ∣ X ( i ) ; β ) ) y ( i ) ⋅ ( 1 − P ( y ( i ) = 1 ∣ X ( i ) ; β ) ) ( 1 − y ( i ) ) L(\beta) = \prod_{i=1}^{m} \left(P(y^{(i)} = 1|X^{(i)}; \beta)\right)^{y^{(i)}} \cdot \left(1 - P(y^{(i)} = 1|X^{(i)}; \beta)\right)^{(1 - y^{(i)})} L(β)=i=1m(P(y(i)=1∣X(i);β))y(i)(1P(y(i)=1∣X(i);β))(1y(i))

接着,我们利用下三分类的性质,将 y ( i ) y^{(i)} y(i) 重构为二进制值,进一步表示。

3. 对数似然函数

由于直接最大化似然函数 L ( β ) L(\beta) L(β) 的计算复杂度较高,而且因为乘积形式的原因容易导致数值下溢,因此通常将似然函数取对数,得到对数似然函数(Log-Likelihood Function):

log ⁡ L ( β ) = ∑ i = 1 m [ y ( i ) log ⁡ P ( y ( i ) = 1 ∣ X ( i ) ; β ) + ( 1 − y ( i ) ) log ⁡ ( 1 − P ( y ( i ) = 1 ∣ X ( i ) ; β ) ) ] \log L(\beta) = \sum_{i=1}^{m} \left[ y^{(i)} \log P(y^{(i)} = 1|X^{(i)}; \beta) + (1 - y^{(i)}) \log(1 - P(y^{(i)} = 1|X^{(i)}; \beta)) \right] logL(β)=i=1m[y(i)logP(y(i)=1∣X(i);β)+(1y(i))log(1P(y(i)=1∣X(i);β))]

对数似然函数的形式更简单,并且将乘法转化为加法,方便求解。

4. 最大化对数似然

最大似然估计的目标是通过求解对数似然函数的最大值,来找到最优的参数 β \beta β。具体来说,我们需要找到使得 log ⁡ L ( β ) \log L(\beta) logL(β) 最大化的 β \beta β 值。

这是一种优化问题,通常可以通过梯度下降法或拟牛顿法(如BFGS,LBFGS)等优化技术来求解。在实践中,我们通常使用数值方法,使用迭代求解的方式,直到收敛到一个最优值。

5. 最大似然估计的解释

最大似然估计的目标是找到一组参数,使得模型预测的结果与实际观察到的数据最为吻合。它提供了一种系统的方法来估计模型参数,使得模型能够更好地拟合数据,并保证模型的最优性。

在逻辑斯蒂回归中,最大似然估计被广泛应用于参数估计,从而在给定参数后做出最佳的二分类决策。这个方法还可扩展用于逻辑斯蒂回归模型以外的其他模型中。

6. 与线性回归的对比

在逻辑斯蒂回归中,最大似然估计类似于线性回归中的最小二乘法(Ordinary Least Squares, OLS),但二者有本质区别:

  • 线性回归通过最小化误差平方和估计参数。
  • 逻辑斯蒂回归通过最大化对数似然函数估计参数,这种方法更适合处理分类问题。

三、模型的损失函数(Log-Loss)

Log-Loss(对数损失函数)是逻辑斯蒂回归模型中用来衡量模型预测结果与实际标签之间不一致程度的关键指标。它的作用是通过最小化这个损失函数来优化模型的参数,使得模型的预测更为准确。

1. Log-Loss 的定义

在逻辑斯蒂回归中,Log-Loss 函数用于衡量模型的预测概率与实际标签之间的偏差。它的数学表达式为:

Log-Loss = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( P ( y ( i ) = 1 ∣ X ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − P ( y ( i ) = 1 ∣ X ( i ) ) ) ] \text{Log-Loss} = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(P(y^{(i)} = 1|X^{(i)})) + (1 - y^{(i)}) \log(1 - P(y^{(i)} = 1|X^{(i)})) \right] Log-Loss=m1i=1m[y(i)log(P(y(i)=1∣X(i)))+(1y(i))log(1P(y(i)=1∣X(i)))]

其中:

  • m m m 是样本的总数。
  • y ( i ) y^{(i)} y(i) 是第 i i i 个样本的实际标签(0或1)。
  • P ( y ( i ) = 1 ∣ X ( i ) ) P(y^{(i)} = 1|X^{(i)}) P(y(i)=1∣X(i)) 是模型对于第 i i i 个样本的预测概率。
  • log ⁡ \log log 是自然对数。
    在这里插入图片描述

2. Log-Loss 的直观理解

Log-Loss 是一种基于概率的损失函数,反映了模型的预测结果与实际标签的吻合程度:

  • 当模型的预测与实际标签完全一致时,对应的 Log-Loss 值为零,表示没有损失。
  • 当模型的预测与实际标签不一致时,Log-Loss 会增大,且预测越不准确,损失越大。
    • 如果模型对某个样本的预测概率接近1,而实际标签为0,则对应的损失会非常大。
    • 同样地,如果模型对某个样本的预测概率接近0,而实际标签为1,则对应的 Log-Loss 会非常大。

3. Log-Loss 的计算过程

让我们通过一个简单的例子来理解 Log-Loss 的计算:

假设我们有一个分类问题,模型给出了以下预测结果:

| 实际标签 y ( i ) y^{(i)} y(i) | 预测概率 P ( y ( i ) = 1 ∣ X ( i ) ) P(y^{(i)} = 1|X^{(i)}) P(y(i)=1∣X(i)) |

10.9
00.2
10.8

对于第一个样本,实际标签为1,模型预测的概率为0.9。此时的 Log-Loss 对应项为:

Log-Loss 1 = − [ 1 × log ⁡ ( 0.9 ) + 0 × log ⁡ ( 0.1 ) ] = − log ⁡ ( 0.9 ) \text{Log-Loss}_1 = -[1 \times \log(0.9) + 0 \times \log(0.1)] = -\log(0.9) Log-Loss1=[1×log(0.9)+0×log(0.1)]=log(0.9)

对于第二个样本,实际标签为0,模型预测的概率为0.2。此时的 Log-Loss 对应项为:

Log-Loss 2 = − [ 0 × log ⁡ ( 0.2 ) + 1 × log ⁡ ( 0.8 ) ] = − log ⁡ ( 0.8 ) \text{Log-Loss}_2 = -[0 \times \log(0.2) + 1 \times \log(0.8)] = -\log(0.8) Log-Loss2=[0×log(0.2)+1×log(0.8)]=log(0.8)

通过对所有样本的 Log-Loss 取平均值,我们可以得到总体的 Log-Loss 值。这个值反映了模型整体的预测性能,值越小,表示模型的预测结果越接近实际情况。

4. Log-Loss 与模型优化

在逻辑斯蒂回归的训练过程中,模型的参数通过最小化 Log-Loss 来优化。具体来说,我们通过迭代更新模型参数(例如使用梯度下降法),使得 Log-Loss 值逐渐减小,从而提高模型的预测准确性。

Log-Loss 还具有良好的数值稳定性,因为它利用了对数函数,可以有效避免由于概率接近0或1时导致的数值下溢问题。

5. Log-Loss 的优点与局限性

优点:

  • 灵敏度高:Log-Loss 对预测概率的变化非常敏感,能够很好地反映模型的性能。
  • 适用于不平衡数据:假设数据集不平衡,Log-Loss 依然能够提供有效的损失衡量。

局限性:

  • 解释难度:相比于其他损失函数,Log-Loss 的物理意义较难直观理解,尤其对于非专业人士。
  • 不区分错误类型:Log-Loss 只关注模型预测与实际标签的差距,而不区分假阳性(False Positive)和假阴性(False Negative)的错误类型。

四、模型的训练与参数估计

逻辑斯蒂回归模型的训练与参数估计是通过优化算法来进行的。目标是找到一组最佳的模型参数 β \beta β,使得模型的预测结果与实际数据之间的误差最小。这里的误差通常由对数损失函数(Log-Loss)来衡量。

1. 梯度下降法

逻辑斯蒂回归模型的参数估计计算通常使用梯度下降法。梯度下降法是一种迭代优化算法,通过逐步调整参数值,使得损失函数逐渐减小,最终找到损失函数的最小值点。

基本过程:

  • 初始化:首先随机初始化参数 β \beta β
  • 计算梯度:对于每一个样本 X ( i ) X^{(i)} X(i),计算损失函数关于参数 β \beta β 的梯度。梯度表示的是损失函数在当前点的上升方向。

梯度的计算公式为:

∂ Log-Loss ∂ β j = 1 m ∑ i = 1 m [ ( P ( y ( i ) = 1 ∣ X ( i ) ) − y ( i ) ) ⋅ X j ( i ) ] \frac{\partial \text{Log-Loss}}{\partial \beta_j} = \frac{1}{m} \sum_{i=1}^{m} \left[ \left( P(y^{(i)} = 1|X^{(i)}) - y^{(i)} \right) \cdot X_j^{(i)} \right] βjLog-Loss=m1i=1m[(P(y(i)=1∣X(i))y(i))Xj(i)]

其中, P ( y ( i ) = 1 ∣ X ( i ) ) P(y^{(i)} = 1|X^{(i)}) P(y(i)=1∣X(i)) 是模型的预测概率, y ( i ) y^{(i)} y(i) 是实际标签, X j ( i ) X_j^{(i)} Xj(i) 是第 i i i 个样本的第 j j j 个特征。

  • 更新参数:根据梯度信息,更新参数 β j \beta_j βj

β j = β j − α ⋅ ∂ Log-Loss ∂ β j \beta_j = \beta_j - \alpha \cdot \frac{\partial \text{Log-Loss}}{\partial \beta_j} βj=βjαβjLog-Loss

其中, α \alpha α 是学习率,决定了参数更新的步长。

  • 迭代:重复上述步骤,直到损失函数收敛到最小值或达到预设的迭代次数。

2. 拟牛顿法(如BFGS、LBFGS)

除了梯度下降法,逻辑斯蒂回归的参数估计还可以使用拟牛顿法,如BFGS或LBFGS。拟牛顿法是一种比梯度下降法更高效的优化算法,特别适用于中小规模的数据集。

特点:

  • 使用二阶导数信息:拟牛顿法不仅利用梯度信息,还使用了近似的二阶导数(即Hessian矩阵)信息来更新参数,使得收敛速度更快。
  • 更快的收敛速度:相对于普通的梯度下降法,拟牛顿法的收敛速度更快,因为它在每一步更新时都考虑了损失函数的曲率信息。

3. 正则化

在逻辑斯蒂回归中,为了防止模型过拟合,通常会引入正则化项。常见的正则化方法包括:

  • L1正则化(Lasso):在损失函数中加入参数的绝对值之和。L1正则化倾向于产生稀疏模型,即有些参数会被压缩到零,从而有助于特征选择。

    正则化后的损失函数为:

    Log-Loss L 1 = Log-Loss + λ ∑ j = 1 n ∣ β j ∣ \text{Log-Loss}_{L1} = \text{Log-Loss} + \lambda \sum_{j=1}^{n} |\beta_j| Log-LossL1=Log-Loss+λj=1nβj

  • L2正则化(Ridge):在损失函数中加入参数的平方和。L2正则化倾向于使参数接近于零,但通常不会完全归零。

    正则化后的损失函数为:

    Log-Loss L 2 = Log-Loss + λ ∑ j = 1 n β j 2 \text{Log-Loss}_{L2} = \text{Log-Loss} + \lambda \sum_{j=1}^{n} \beta_j^2 Log-LossL2=Log-Loss+λj=1nβj2

其中, λ \lambda λ 是正则化强度的超参数,控制了正则化项在损失函数中的影响。

4. 模型训练的收敛性

在模型训练过程中,通过迭代优化损失函数,模型的参数会逐渐逼近使得损失函数最小化的值。当损失函数的值在连续若干次迭代中变化很小时,我们认为模型已达到收敛,此时可以停止训练。

通常,可以通过以下几种方式来判断模型的收敛性:

  • 设定最大迭代次数:限制迭代次数,达到预设次数后停止训练。
  • 损失函数变化:当损失函数的变化量低于某个阈值时,停止迭代,停止训练。

5. 训练结果的评估

在训练完成后,模型的训练效果通常通过以下几种方式进行评估:

  • 准确率召回率F1值:这些指标用于衡量模型在二分类任务中的性能,尤其是数据集不平衡的情况下。
  • ROC曲线与AUC:通过绘制ROC曲线并计算AUC值,可以评估模型在不同决策阈值下的表现。

五、扩展到多分类问题

逻辑斯蒂回归最初是为二分类问题设计的,但它也可以通过一些扩展方法应用于多分类问题,即分类任务中目标变量有三个或更多类别。扩展逻辑斯蒂回归到多分类问题的主要方法有两种:一对多法(One-vs-Rest, OvR)和多项逻辑斯蒂回归(Multinomial Logistic Regression)。

1. 一对多法(One-vs-Rest, OvR)

概念:一对多法是将多分类问题拆分为多个二分类问题来解决。对于每一个k个类别的分类问题,OvR会构建k个独立的逻辑斯蒂回归模型,每个模型用于区分一个类别与其他所有类别。

步骤

  • 第1步:对于每一个类别i,构建一个分类模型,使该模型能够预测i的样本与所有其他类别的样本。
  • 第2步:训练模型i,使用所有样本和对应的标签进行训练,得到k个模型。
  • 第3步:选择概率值最大的类别作为最终预测结果。

优点

  • 易于实现,因为每个类别的二分类模型可以用标准的逻辑斯蒂回归来处理。

缺点

  • 每个模型独立训练,不能考虑各类别之间的关系,可能导致预测结果不一致(即多个模型预测同一个样本属于不同的类别)。

2. 多项逻辑斯蒂回归(Multinomial Logistic Regression)

概念:多项逻辑斯蒂回归是一种直接扩展逻辑斯蒂回归到多分类问题的方法。它同时考虑所有类别,并通过一个统一的模型来处理多分类任务。

步骤

  • 第1步:定义每一个类别 i i i 对应的线性方程:

    z i = β i 0 + β i 1 X 1 + ⋯ + β i n X n z_i = \beta_{i0} + \beta_{i1}X_1 + \cdots + \beta_{in}X_n zi=βi0+βi1X1++βinXn

    其中, z i z_i zi 是类别 i i i 对应的线性组合, β i 0 , β i 1 , … , β i n \beta_{i0}, \beta_{i1}, \ldots, \beta_{in} βi0,βi1,,βin 是类别 i i i 对应的参数。

  • 第2步:通过softmax函数将线性方程的输出转换为各类别的概率:

    P ( y = i ∣ X ) = e z i ∑ k = 1 K e z k P(y = i|X) = \frac{e^{z_i}}{\sum_{k=1}^{K} e^{z_k}} P(y=iX)=k=1Kezkezi

    其中, P ( y = i ∣ X ) P(y = i|X) P(y=iX) 是输入样本属于类别 i i i 的概率, k k k 是类别的总数。

  • 第3步:选择样本预测概率最高的类别 i i i 作为最终预测结果。

优点

  • 模型是统一的,能同时考虑所有类别,且输出概率和为1,更加符合概率论基础。
  • 不存在OvR方法中的不一致问题。

缺点

  • 相对于OvR方法,多项逻辑斯蒂回归的计算复杂度较高,因为它需要同时估计多个类别的参数。

3. 模型的优化

多项逻辑斯蒂回归的参数估计同样通过最大化对数似然函数来完成。由于这个模型涉及多个类别,因此对数似然函数是所有样本在所有类别上的概率之和。

对数似然函数的形式为:

log ⁡ L ( β ) = ∑ i = 1 m ∑ j = 1 k y i j log ⁡ P ( y = j ∣ X ( i ) ) \log L(\beta) = \sum_{i=1}^{m} \sum_{j=1}^{k} y_{ij} \log P(y = j|X^{(i)}) logL(β)=i=1mj=1kyijlogP(y=jX(i))

其中, y i j y_{ij} yij 表示第 i i i 个样本是否属于类别 j j j(如果属于则为1,否则为0),而 P ( y = j ∣ X ( i ) ) P(y = j|X^{(i)}) P(y=jX(i)) 是模型预测第 i i i 个样本属于类别 j j j 的概率。

通过使用梯度下降或拟牛顿法等优化方法,我们可以找到使对数似然函数最大化的参数。

4. 实际应用中的选择

  • 如果问题规模较小且对每个类别独立分类结果的需求不高,可以考虑使用一对多法。
  • 如果需要在模型中同时考虑所有类别之间的关系,且数据量较大,可以考虑使用多项逻辑斯蒂回归。

六、python代码

  1. 调包实现(使用scikit-learn库)
# 导入必要的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score# 加载数据集(以鸢尾花数据集为例)
data = load_iris()
X = data.data
y = (data.target == 2).astype(int)  # 将其转化为二分类问题# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建逻辑斯蒂回归模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 模型预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
  1. 不调包实现(手动实现逻辑斯蒂回归)
    这里是通过手动实现梯度下降算法来训练逻辑斯蒂回归模型。虽然逻辑斯蒂函数和梯度更新的代码较为简单,但相较于调包实现,这种方式效率较低。
import numpy as np# 定义sigmoid函数
def sigmoid(z):return 1 / (1 + np.exp(-z))# 定义损失函数(Log-Loss)
def compute_loss(X, y, beta):m = X.shape[0]h = sigmoid(np.dot(X, beta))loss = -1/m * np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))return loss# 梯度下降
def gradient_descent(X, y, beta, learning_rate, num_iterations):m = X.shape[0]for i in range(num_iterations):h = sigmoid(np.dot(X, beta))gradient = np.dot(X.T, (h - y)) / mbeta -= learning_rate * gradientif i % 1000 == 0:loss = compute_loss(X, y, beta)print(f"Iteration {i}: Loss = {loss}")return beta# 加载数据集(鸢尾花数据集)
data = load_iris()
X = data.data
y = (data.target == 2).astype(int)  # 转化为二分类# 添加偏置项
X = np.insert(X, 0, 1, axis=1)# 初始化参数
beta = np.zeros(X.shape[1])# 设置超参数
learning_rate = 0.01
num_iterations = 10000# 训练模型
beta = gradient_descent(X, y, beta, learning_rate, num_iterations)# 预测函数
def predict(X, beta):return sigmoid(np.dot(X, beta)) >= 0.5# 评估模型
X_test = np.insert(X_test, 0, 1, axis=1)
y_pred = predict(X_test, beta)
accuracy = np.mean(y_pred == y_test)
print(f"Accuracy: {accuracy}")

七、优缺点

优点

  1. 易于理解和解释

    • 逻辑斯蒂回归的模型结构简单,回归系数 β \beta β 可以直接解释为每个特征对分类结果的影响。特别是在实际应用中,它的线性形式和对数几率的概念使得模型的结果具有良好的解释性,便于理解和沟通。
  2. 计算效率高

    • 由于逻辑斯蒂回归是线性模型,训练过程相对简单,计算开销较低。即使在大规模数据集上,它也能快速训练,并且在参数较少的情况下非常高效。
  3. 适用于二分类问题

    • 逻辑斯蒂回归非常适合处理二分类问题,尤其是在特征与输出之间存在线性关系的情况下。模型提供概率值,便于进一步的决策处理。
  4. 概率输出

    • 与其他许多分类算法不同,逻辑斯蒂回归直接输出样本属于某个类别的概率,这一特性使得它在需要评估分类不确定性或进一步处理分类概率的场景中非常有用。
  5. 不需要大量的特征筛选

    • 逻辑斯蒂回归对特征选择的要求不如其他一些算法(如支持向量机)严格,尽管它基于线性假设但它依然能很好地处理高维数据,且在实际应用中表现良好。
  6. 可以扩展到多分类问题

    • 通过一对多法(OvR)或多项逻辑斯蒂回归,逻辑斯蒂回归可以扩展到多分类问题,保持了模型的简单性和解释性。

缺点

  1. 对线性关系的假设

    • 逻辑斯蒂回归假设输入特征与对数几率之间存在线性关系。然而,许多实际问题中的特征与输出之间的关系是非线性的。这种情况下,逻辑斯蒂回归可能表现不佳。如果特征与输出之间存在复杂的非线性关系,其他模型(如决策树、神经网络)可能更适合。
  2. 容易受到多重共线性的影响

    • 逻辑斯蒂回归对特征之间的多重共线性较为敏感。如果存在高度相关的特征,模型参数估计可能会出现不稳定的情况。这通常会导致模型的预测性能下降。
  3. 难以处理高维数据

    • 在高维数据(即特征数远大于样本数)的情况下,逻辑斯蒂回归容易出现过拟合问题。尽管可以通过正则化来缓解,但模型的表现仍然可能不如其他更适合高维数据的算法。
  4. 对异常值敏感

    • 逻辑斯蒂回归对异常值相对敏感。异常值可能会对模型参数产生较大的影响,进而影响模型的整体性能。因此,在使用逻辑斯蒂回归时,通常需要进行数据清洗和异常值处理。
  5. 分类边界简单

    • 逻辑斯蒂回归的分类边界是线性的,对于复杂的分类问题,线性分类边界可能不足以有效区分不同类别。虽然可以通过添加多项式特征来提升模型表现,但这也增加了模型的复杂性。
  6. 缺乏灵活性

    • 相比于更复杂的模型(如随机森林、支持向量机和神经网络),逻辑斯蒂回归在灵活性方面有所欠缺。它无法捕捉到数据中的复杂模式,尤其是当数据特征之间存在非线性关系时。

结论

逻辑斯蒂回归因其简单性和可解释性,在许多实际应用中仍然是首选的分类算法,尤其是在需要快速训练和解释结果的场景下。然而,对于更复杂的分类任务,尤其是当特征与输出之间存在非线性关系时,使用更复杂的算法可能会更具优势。选择逻辑斯蒂回归还是其他模型应根据具体的应用场景和数据特征而定。

参考文献:
用人话讲明白逻辑回归Logistic regression

结~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429663.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级I/O知识分享【epoll || Reactor ET,LT模式】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,接口 epo…

【kaggle竞赛】毒蘑菇的二元预测题目相关信息和思路求解代码

毒蘑菇的二元预测 您提供了很多关于不同二元分类任务的资源和链接,看起来这些都是Kaggle竞赛中的参考资料和高分解决方案。为了帮助您更好地利用这些资源,这里是一些关键点的总结: Playground Season 4 Episode 8 主要关注的竞赛: 使用银行…

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起?将多个PDF文件合并不仅能够提升信息的整合性,还能使文件管理更加高效。想象一下,你需要向同事或老师提交一份综合报告,其中包含了多份相关资料。如果每个文件单独存在,查找和传输都会变得繁…

Java 入门指南:JVM(Java虚拟机)—— Java 类加载器详解

类加载器 类加载器(Class Loader)是 Java 虚拟机(JVM)的一部分,它的作用是将类的字节码文件(.class 文件)从磁盘或其他来源加载到 JVM 中。类加载器负责查找和加载类的字节码文件,并…

Python|OpenCV-实现识别目标图像中的圆圈(20)

前言 本文是该专栏的第22篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在处理图像检测项目的时候,可能会遇到需要检测目标图像中的“圆圈”需求。笔者在这里举个例子,如下图所示: 在图中有一个篮球,但是我们要找的目标对象并不是篮球,而是篮球它本身的这个…

MySQL安装教程

MySQL安装教程 如果需要删除原有mysql,然后安装过新的,可以参照如何彻底卸载旧mysql重装测试 1. 准备资源 mysql官网直达:https://dev.mysql.com/downloads/mysql/ CADN:https://download.csdn.net/download/luocong321/89592962 …

《深度学习》PyTorch框架 优化器、激活函数讲解

目录 一、深度学习核心框架的选择 1、TensorFlow 1)概念 2)优缺点 2、PyTorch 1)概念 2)优缺点 3、Keras 1)概念 2)优缺点 4、Caffe 1)概念 2)优缺点 二、pytorch安装 1、安装 2、…

【人工智能】在大型活动中的应用案例

人工智能在娱乐大型活动中的应用 ## 作者主页: 知孤云出岫 目录 **人工智能在娱乐大型活动中的应用****1. 引言****2. 智能票务与入场管理****2.1 动态定价与票务预测****2.2 生物识别技术快速入场****2.3 区块链技术防伪票务管理** **3. 智能观众互动与个性化体验****3.1 个性…

CCF csp认证 小白必看

c支持到C17(还是更高?);所以学一些封装好的函数功能是必要的---比如STL里的函数; 因为可携带纸质资料,建议打印带入,需要时可翻阅。 【题目概述:】 0-devc环境配置 配置好你常用的编译版本: 想要调试记得开启下选…

Python练习宝典:Day 1 - 选择题 - 基础知识

目录 一、踏上Python之旅二、Python语言基础三、流程控制语句四、序列的应用 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print()2.Python安装成功的标志是在控制台(终端)输入python/python3后,命令提示符变为: A.&…

Linux自主学习篇

用户及权限管理 sudo 是 "superuser do" 的缩写,是一个在类 Unix 操作系统(如 Linux 和 macOS)中使用的命令。它允许普通用户以超级用户(root 用户)的身份执行命令,从而获得更高的权限。 useradd…

数据飞轮:打造业务增长的持续循环

在当今数据驱动的世界中,企业必须利用数据的力量才能保持竞争力。然而,仅仅收集和分析数据是不够的;企业必须能够从他们的数据中创造一个持续增长的循环,才能保持成功。其中一种方法就是创建数据飞轮。接下来让我们来探讨一下什么…

网络高级day03(Http)

目录 【1】HTTP简介 【2】 HTTP特点 【3】 HTTP协议格式 1》客户端请求消息格式 1> 请求行 2> 请求头 3> 空行 4> 请求数据 2》服务器响应消息格式 【1】HTTP简介 HTTP协议是Hyper Text Transfer Protocol (超文本传输协议)的缩写&a…

Python_控制循环语句

if语句单分支结构的语法形式如下&#xff1a; 【操作】输入一个数字&#xff0c;小于10&#xff0c;则打印这个数字(if_test01.py)&#xff1a; num input("输入一个数字&#xff1a;") if int(num)<10: print("小于10的数&#xff1a;"num)条件表达式…

Shader 中的光源

1、Shader 开发中常用的光源属性 Unity当中一共支持四种光源类型&#xff1a; 平行光&#xff08;Directional&#xff09;点光源&#xff08;Point&#xff09;聚光灯&#xff08;Spot&#xff09;面光源&#xff08;Area&#xff09;— 面光源仅在烘焙时有用 不管光源类型到…

[网络层]-IP协议相关特性

IP协议 基本概念 主机 : 配有IP地址,但是不进行路由控制的设备路由器 : 既配有IP地址,又能进行路由控制节点: 主机和路由器的统称 协议头格式 4位版本(version):占四位,用于指定IP协议的版本,例如,使用IPv4,该字段就为44位首部长度: 表示IP协议首部的长度,以32位bit (4字节)…

Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件&#xff0c;例如对于我的RedHat操作系统&#xff0c;拥有tty0到tty59&#xff0c;它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换&#xff0c;下面的命令可以进行通用切换。 sudo ch…

【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常

起因&#xff1a;今天编写一个请求时需要通过RestTemplate调用外部接口&#xff0c;获取一些信息&#xff0c;但是在获取了外部接口响应内容后&#xff0c;使用强制转换发现报了类型转换异常。之前也遇到过&#xff0c;但是没记录下来&#xff0c;今天又查了一遍……干脆记录一…

Springboot使用ThreadPoolTaskScheduler轻量级多线程定时任务框架

简介&#xff1a; Spring注解定时任务使用不是很灵活&#xff0c;如果想要灵活的配置定时任务&#xff0c;可以使用xxl-job 或者 quartz等定时任务框架&#xff0c;但是过于繁琐&#xff0c;可能成本较大。所以可以使用ThreadPoolTaskScheduler来灵活处理定时任务 ThreadPoolT…

【C++】二叉搜索树的底层以及实现

个人主页 文章目录 ⭐一、二叉搜索树的概念&#x1f680;二、二叉搜索树性能分析&#x1f3dd;️三、二叉搜索树的操作1. 插入2. 查找3. 删除4. 遍历节点 &#x1f384;四、二叉搜索树的实现&#xff08;K模型&#xff09;&#x1f389;五、二叉搜索树的应用1. K模型2. KV模型…