算法之逻辑斯蒂回归(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+e−z1
其中, 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+e−z1
逻辑斯蒂函数的作用是将任何实数
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(1−PP)
其中:
- P P P 是事件发生的概率,即 P ( y = 1 ∣ X ) P(y = 1|X) P(y=1∣X)。
- 1 − P 1 - P 1−P 是事件不发生的概率,即 P ( y = 0 ∣ X ) P(y = 0|X) P(y=0∣X)。
2. 对数几率的解释
对数几率表达的是事件发生的概率 P P P 与事件不发生的概率 1 − P 1 - P 1−P 之间的比值(也称为几率,odds)的对数。具体解释如下:
-
几率(odds):
几率是指事件发生的可能性与事件不发生的可能性的比值
,它可以用来衡量事件发生的相对可能性:odds = P 1 − P \text{odds} = \frac{P}{1 - P} odds=1−PP
例如,如果 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=1−0.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(1−PP)
对数几率可以将概率
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=1∏mP(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=1∏m(P(y(i)=1∣X(i);β))y(i)⋅(1−P(y(i)=1∣X(i);β))(1−y(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=1∑m[y(i)logP(y(i)=1∣X(i);β)+(1−y(i))log(1−P(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=1∑m[y(i)log(P(y(i)=1∣X(i)))+(1−y(i))log(1−P(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)) |
1 | 0.9 |
---|---|
0 | 0.2 |
1 | 0.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] ∂βj∂Log-Loss=m1i=1∑m[(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−α⋅∂βj∂Log-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=1∑n∣β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=1∑nβ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=i∣X)=∑k=1Kezkezi
其中, P ( y = i ∣ X ) P(y = i|X) P(y=i∣X) 是输入样本属于类别 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=1∑mj=1∑kyijlogP(y=j∣X(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=j∣X(i)) 是模型预测第 i i i 个样本属于类别 j j j 的概率。
通过使用梯度下降或拟牛顿法等优化方法,我们可以找到使对数似然函数最大化的参数。
4. 实际应用中的选择
- 如果问题规模较小且对每个类别独立分类结果的需求不高,可以考虑使用一对多法。
- 如果需要在模型中同时考虑所有类别之间的关系,且数据量较大,可以考虑使用多项逻辑斯蒂回归。
六、python代码
- 调包实现(使用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}")
- 不调包实现(手动实现逻辑斯蒂回归)
这里是通过手动实现梯度下降算法来训练逻辑斯蒂回归模型。虽然逻辑斯蒂函数和梯度更新的代码较为简单,但相较于调包实现,这种方式效率较低。
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)) / m
beta -= learning_rate * gradient
if 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}")
七、优缺点
优点
-
易于理解和解释:
- 逻辑斯蒂回归的模型结构简单,回归系数 β \beta β 可以直接解释为每个特征对分类结果的影响。特别是在实际应用中,它的线性形式和对数几率的概念使得模型的结果具有良好的解释性,便于理解和沟通。
-
计算效率高:
- 由于逻辑斯蒂回归是线性模型,训练过程相对简单,计算开销较低。即使在大规模数据集上,它也能快速训练,并且在参数较少的情况下非常高效。
-
适用于二分类问题:
- 逻辑斯蒂回归非常适合处理二分类问题,尤其是在特征与输出之间存在线性关系的情况下。模型提供概率值,便于进一步的决策处理。
-
概率输出:
- 与其他许多分类算法不同,逻辑斯蒂回归直接输出样本属于某个类别的概率,这一特性使得它在需要评估分类不确定性或进一步处理分类概率的场景中非常有用。
-
不需要大量的特征筛选:
- 逻辑斯蒂回归对特征选择的要求不如其他一些算法(如支持向量机)严格,尽管它基于线性假设但它依然能很好地处理高维数据,且在实际应用中表现良好。
-
可以扩展到多分类问题:
- 通过一对多法(OvR)或多项逻辑斯蒂回归,逻辑斯蒂回归可以扩展到多分类问题,保持了模型的简单性和解释性。
缺点
-
对线性关系的假设:
- 逻辑斯蒂回归假设输入特征与对数几率之间存在线性关系。然而,许多实际问题中的特征与输出之间的关系是非线性的。这种情况下,逻辑斯蒂回归可能表现不佳。如果特征与输出之间存在复杂的非线性关系,其他模型(如决策树、神经网络)可能更适合。
-
容易受到多重共线性的影响:
- 逻辑斯蒂回归对特征之间的多重共线性较为敏感。如果存在高度相关的特征,模型参数估计可能会出现不稳定的情况。这通常会导致模型的预测性能下降。
-
难以处理高维数据:
- 在高维数据(即特征数远大于样本数)的情况下,逻辑斯蒂回归容易出现过拟合问题。尽管可以通过正则化来缓解,但模型的表现仍然可能不如其他更适合高维数据的算法。
-
对异常值敏感:
- 逻辑斯蒂回归对异常值相对敏感。异常值可能会对模型参数产生较大的影响,进而影响模型的整体性能。因此,在使用逻辑斯蒂回归时,通常需要进行数据清洗和异常值处理。
-
分类边界简单:
- 逻辑斯蒂回归的分类边界是线性的,对于复杂的分类问题,线性分类边界可能不足以有效区分不同类别。虽然可以通过添加多项式特征来提升模型表现,但这也增加了模型的复杂性。
-
缺乏灵活性:
- 相比于更复杂的模型(如随机森林、支持向量机和神经网络),逻辑斯蒂回归在灵活性方面有所欠缺。它无法捕捉到数据中的复杂模式,尤其是当数据特征之间存在非线性关系时。
结论
逻辑斯蒂回归因其简单性和可解释性,在许多实际应用中仍然是首选的分类算法,尤其是在需要快速训练和解释结果的场景下。然而,对于更复杂的分类任务,尤其是当特征与输出之间存在非线性关系时,使用更复杂的算法可能会更具优势。选择逻辑斯蒂回归还是其他模型应根据具体的应用场景和数据特征而定。
参考文献:
用人话讲明白逻辑回归Logistic regression
结~~~