ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

逻辑回归原理全解析:从Sigmoid函数到交叉熵损失与多分类扩展

逻辑回归原理全解析:从Sigmoid函数到交叉熵损失与多分类扩展 1. 从线性到非线性逻辑回归的诞生背景如果你接触过机器学习第一个遇到的模型大概率是线性回归。它很直观用一条直线或超平面去拟合数据目标是预测一个连续的数值比如房价、销售额。但很快你就会发现现实世界充满了“是”或“否”的问题这封邮件是不是垃圾邮件这张图片里有没有猫这个客户会不会流失这些问题期待的是一个概率而不是一个任意的实数。直接把线性回归的输出一个从负无穷到正无穷的值当作概率显然不合理概率必须在0到1之间。这就是逻辑回归Logistic Regression登场的契机。它的核心思想非常巧妙我们不直接预测概率而是预测一个“机会比”的对数再通过一个特定的函数将其映射回0到1的概率区间。这个函数就是Sigmoid函数也叫Logistic函数。所以逻辑回归本质上是在线性回归的输出外套了一个“概率转换器”让模型具备了处理分类任务的能力。别看它名字里有“回归”它可是解决二分类问题的经典且强大的模型是许多复杂算法如神经网络的基础构件。2. Sigmoid函数概率的“翻译官”要理解逻辑回归必须先彻底搞懂Sigmoid函数。它是连接线性预测值与概率的桥梁。2.1 函数形式与直观理解Sigmoid函数的数学表达式是σ(z) 1 / (1 e^{-z})其中z就是我们线性回归模型的输出即z w^T x bw是权重向量b是偏置x是特征向量。这个函数长什么样你可以想象一个被拉长的“S”形曲线。当z趋向于正无穷大时e^{-z}趋近于0因此σ(z)趋近于1。当z趋向于负无穷大时e^{-z}趋近于正无穷大因此σ(z)趋近于0。当z 0时σ(0) 0.5。为什么是它这里有一个非常生活化的类比想象你正在用一把尺子线性模型z测量一个物体的“属于正类的倾向性”。这把尺子没有尽头读数可以是-100也可以是100。但你需要向老板汇报一个“可能性”概率。Sigmoid函数就像一个精明的“翻译官”它把你的尺子读数翻译成老板能听懂的话“读数非常大比如5那可能性极高接近100%。读数非常小比如-5那可能性极低接近0%。读数在0附近嗯五五开吧50%。” 这个翻译过程是平滑、连续的没有跳跃这为后续使用梯度下降等优化算法提供了便利。2.2 从几率Odds到Logit理解Sigmoid的另一种角度是从“几率”出发。几率定义为事件发生的概率p与不发生的概率1-p的比值Odds p / (1-p)。几率大于1表示发生概率更大小于1则表示更小。我们对几率取自然对数就得到了Logit函数Logit(p) ln(p / (1-p))。逻辑回归做的逆操作我们假设这个 Logit 与特征x呈线性关系即ln(p / (1-p)) w^T x b对这个等式进行简单的代数变换解出p你就会得到p 1 / (1 e^{-(w^T x b)})看这正好就是 Sigmoid 函数所以逻辑回归模型等价于假设样本属于正类的对数几率Log-Odds是特征的线性函数。这个假设是逻辑回归所有推导的起点也是其名字中“回归”二字的来源——它回归的是对数几率。注意这里蕴含了一个很强的假设即特征与对数几率之间是线性关系。在实际复杂问题中这可能是模型的局限。为了突破它我们常常会进行特征工程比如引入特征的多项式组合、交叉项或者使用后续的树模型、神经网络等非线性模型。3. 决策边界那条看不见的“分界线”模型输出了一个概率p我们如何做出最终的分类决策是0类还是1类通常我们会设定一个阈值比如0.5。如果p 0.5我们预测为正类1否则预测为负类0。根据Sigmoid函数的性质p 0.5等价于σ(z) 0.5也就等价于z 0。而z w^T x b。所以分类决策规则简化为如果w^T x b 0预测为1。如果w^T x b 0预测为0。这个等式w^T x b 0定义了一个在特征空间中的超平面它就是模型的决策边界。在二维特征空间中它就是一条直线在三维中是一个平面。决策边界是模型通过学习参数w和b所定义的一个线性边界。所有落在这个边界一侧的点被分为一类另一侧的点被分为另一类。这里有一个关键点需要厘清Sigmoid函数本身是非线性的它提供了概率估计的平滑性。但逻辑回归的决策边界始终是线性的因为它是由w^T x b 0这个线性方程决定的。模型的“非线性”能力体现在将线性边界的输出转化为概率但分类的“分界线”本身是直的。如果你想用逻辑回归拟合一个圆形的决策边界直接用原始特征(x1, x2)是做不到的你必须构造新的特征比如(x1, x2, x1^2, x2^2)这样在新的特征空间里决策边界w1*x1 w2*x2 w3*x1^2 w4*x2^2 b 0就可能是一个椭圆或圆形。4. 代价函数为什么不能用均方误差模型有了y_hat σ(w^T x b)我们需要一个标准来衡量模型预测的好坏并据此调整参数w和b。在线性回归中我们常用均方误差MSE。在逻辑回归中能直接用MSE吗理论上可以但实践中几乎从不这样做原因在于优化地形。对于逻辑回归MSE代价函数为J(w,b) (1/m) * Σ (y_hat_i - y_i)^2其中y_hat_i σ(z_i)。 由于y_hat是Sigmoid函数的输出这个J关于参数w会是一个非凸函数。想象一下地形图非凸函数意味着存在许多局部最低点山谷使用梯度下降法优化时算法很容易陷入某个局部最优解而无法找到全局最优解这极大地增加了训练的难度和不确定性。4.1 交叉熵损失函数的推导为了解决这个问题我们引入了交叉熵损失函数。它的推导源于最大似然估计MLE的思想即我们寻找一组参数(w, b)使得在当前参数下观测到整个训练数据集D的可能性似然最大。对于一个样本(x, y)逻辑回归模型预测其为正类的概率是y_hat为负类的概率是1 - y_hat。我们可以用一个巧妙的公式统一表示样本的似然P(y | x; w,b) (y_hat)^y * (1 - y_hat)^(1-y)当真实标签y1时上式变为y_hat。当真实标签y0时上式变为1 - y_hat。 这正好符合我们的直觉。假设有m个独立同分布的样本整个数据集的似然就是所有样本似然的乘积L(w,b) Π_{i1}^{m} P(y_i | x_i; w,b) Π_{i1}^{m} (y_hat_i)^{y_i} * (1 - y_hat_i)^{(1-y_i)}我们的目标是最大化L(w,b)。连乘容易造成数值下溢且不便求导通常我们转而最大化其自然对数即对数似然ℓ(w,b)ℓ(w,b) ln L(w,b) Σ_{i1}^{m} [y_i ln(y_hat_i) (1-y_i) ln(1 - y_hat_i)]机器学习中习惯最小化一个代价函数因此我们对数似然取负并除以样本数m得到平均代价就得到了二元交叉熵损失函数J(w,b) - (1/m) * Σ_{i1}^{m} [y_i ln(y_hat_i) (1-y_i) ln(1 - y_hat_i)]4.2 交叉熵的直观解释与凸性这个函数为什么好我们可以分情况看当y_i1时损失为-ln(y_hat_i)。如果模型预测概率y_hat_i接近1预测正确-ln(1)接近0损失很小如果y_hat_i接近0预测错误-ln(0)趋近于无穷大损失巨大。模型被严重惩罚。当y_i0时损失为-ln(1 - y_hat_i)。逻辑类似预测越错惩罚越大。交叉熵衡量的是模型预测分布(y_hat, 1-y_hat)与真实标签分布(y, 1-y)这是一个one-hot分布之间的“距离”。预测分布与真实分布越接近交叉熵越小。更重要的是可以证明对于逻辑回归模型交叉熵损失函数J(w,b)是关于参数w和b的凸函数。这意味着它只有一个全局最小值使用梯度下降法可以高效、可靠地找到最优参数这是它相对于MSE的巨大优势。5. 参数求解梯度下降的运作细节有了凸的代价函数我们就可以用梯度下降法来求解最优参数了。核心思想是参数沿着代价函数梯度的反方向即下降最快的方向进行迭代更新直到收敛。我们需要计算代价函数J关于每个参数w_j和b的偏导数。这里涉及一些微积分运算但最终结果非常简洁优美。首先回忆一下z w^T x by_hat a σ(z) 1/(1e^{-z})J - (1/m) Σ [y ln(a) (1-y) ln(1-a)]我们通过链式法则来求导。先计算单个样本的损失L对a的导数dL/da - (y/a - (1-y)/(1-a))Sigmoid函数有一个非常好的性质其导数可以用自身表示σ(z) σ(z)(1-σ(z)) a(1-a)。 因此da/dz a(1-a)。那么dL/dz (dL/da) * (da/dz) [- (y/a - (1-y)/(1-a))] * [a(1-a)] a - y这个结果异常简洁dz a - y即预测值与真实值的差值。接下来因为z w1*x1 w2*x2 ... b所以dw_j dL/dw_j (dL/dz) * (dz/dw_j) (a-y) * x_jdb dL/db (dL/dz) * (dz/db) a - y对于整个训练集m个样本我们取所有样本梯度的平均值。因此梯度下降的更新规则为α为学习率w_j : w_j - α * (1/m) * Σ_{i1}^{m} (a^{(i)} - y^{(i)}) * x_j^{(i)}b : b - α * (1/m) * Σ_{i1}^{m} (a^{(i)} - y^{(i)})你可以把这个更新过程向量化。令dZ A - Y为一个(1, m)的矩阵或向量X为(n, m)的特征矩阵n是特征数。那么dW (1/m) * X * dZ^Tdb (1/m) * np.sum(dZ)实操心得在手动实现或调试时务必检查梯度计算的正确性。一个常用的方法是使用梯度检查利用导数的定义(f(θε) - f(θ-ε)) / (2ε)近似计算梯度与你推导的解析梯度进行对比。如果两者差距在很小的数量级如1e-7内通常说明你的推导和代码是正确的。这是避免因梯度计算错误导致模型无法收敛的关键一步。6. 从二分类到多分类Softmax回归逻辑回归天然是二分类器。但现实中的分类问题常常不止两类例如识别手写数字0-9。如何扩展最直接的方法是“一对多”策略假设有K个类别我们训练K个独立的二分类逻辑回归模型。第i个模型负责判断样本是否属于第i类是i类标记为1不是i类标记为0。预测时将样本输入所有K个模型取输出概率最高的那个类别作为最终预测。然而更优雅、更常用的方法是Softmax回归它是逻辑回归在多分类问题上的直接推广。6.1 Softmax函数与模型输出在Softmax回归中我们为每个类别jj1,2,...,K都维护一组权重向量w_j和偏置b_j。对于输入x我们计算每个类别的“得分”z_j w_j^T x b_j。Softmax函数的作用是将这K个得分可以是任意实数转化为一个概率分布。对于类别j其预测概率为P(yj | x) e^{z_j} / (Σ_{k1}^{K} e^{z_k})分母是所有类别得分的指数和确保了所有类别的概率之和为1。当K2时Softmax回归等价于二分类逻辑回归你可以尝试推导一下其中一个类别的概率就是Sigmoid函数的形式。6.2 多分类交叉熵损失对应的损失函数也扩展为多分类交叉熵损失。假设真实标签y是一个one-hot向量例如对于第3类y [0,0,1,0,...,0]预测概率分布为y_hat [p1, p2, ..., pK]。则损失函数为L - Σ_{j1}^{K} y_j ln(y_hat_j)因为y是one-hot的只有真实类别c对应的y_c1其他为0所以上式简化为L - ln(y_hat_c)即只关心模型对真实类别预测概率的对数值。我们希望这个概率越大越好负对数损失越小越好。Softmax回归的梯度推导比二分类情况稍复杂但核心思想一致。反向传播时对于真实类别c的梯度信号是(y_hat_c - 1)而对于非真实类别j的梯度信号是y_hat_j。这使得模型在更新时会增大真实类别的得分同时减小其他类别的得分。7. 模型评估与特征工程训练好模型后我们需要评估其性能。对于二分类问题不能只看准确率尤其是在类别不平衡的数据集上。7.1 核心评估指标混淆矩阵这是所有评估的基础。包含真正例TP、假正例FP、真反例TN、假反例FN。准确率(TPTN)/(TPTNFPFN)。在类别平衡时有用但不平衡时可能失真例如99%的负样本一个全预测负的模型也有99%准确率。精确率TP/(TPFP)。在所有被预测为正的样本中真正为正的比例。关注预测的“准不准”。在垃圾邮件过滤中我们非常看重精确率因为把正常邮件误判为垃圾邮件FP代价很高。召回率TP/(TPFN)。在所有真实为正的样本中被正确找出来的比例。关注预测的“全不全”。在疾病筛查中我们非常看重召回率因为漏掉一个病人FN的代价很高。F1分数精确率和召回率的调和平均数2*P*R/(PR)。在两者需要权衡时是一个综合指标。ROC曲线与AUC通过不断移动分类阈值计算对应的真正例率TPR即召回率和假正例率FPR。ROC曲线下的面积AUC衡量的是模型将正样本排在负样本前面的能力是一个与阈值无关的、非常鲁棒的指标。AUC越接近1模型性能越好。7.2 逻辑回归中的特征工程逻辑回归的决策边界是线性的这意味着它只能学习特征间的线性组合关系。为了提升模型能力特征工程至关重要。数值特征标准化/归一化虽然逻辑回归不受量纲影响因为参数会自适应调整但标准化减均值除标准差或归一化缩放到[0,1]可以加速梯度下降的收敛使优化路径更平顺。类别特征编码必须将文字型类别特征如“城市”转化为数值。常用方法有独热编码为每个类别创建一个新的二进制特征。适用于类别数量不多的情况。标签编码为每个类别分配一个整数。适用于有序类别对于无序类别可能引入误导性的顺序关系。处理非线性特征变换这是释放逻辑回归潜力的关键。如果你怀疑特征与对数几率之间存在非线性关系可以手动创建新特征多项式特征如x1^2,x1*x2,x2^3等。可以拟合曲线边界。分箱将连续特征离散化成几个区间箱然后进行独热编码。这相当于让模型为每个区间学习一个独立的系数是一种非常强大的非线性建模方法。交叉特征将两个或多个特征相乘或组合以捕获交互效应。特征选择逻辑回归的系数具有可解释性。我们可以使用L1正则化LASSO来自动进行特征选择它会将不重要的特征的系数压缩为0。也可以使用基于统计检验如卡方检验或模型系数的方法进行筛选。注意事项进行多项式等特征变换时务必警惕过拟合。特征维度急剧膨胀会导致模型过于复杂记住训练数据中的噪声。务必使用验证集来评估泛化性能并考虑使用正则化。8. 正则化对抗过拟合的利器当特征很多或特征间存在多重共线性时逻辑回归模型容易过拟合——在训练集上表现极好但在新数据上表现糟糕。正则化通过在损失函数中增加一个惩罚项来约束模型参数的大小鼓励模型更简单、更平滑。8.1 L1与L2正则化最常用的两种正则化是L1Lasso和L2Ridge。L2正则化在损失函数中加入所有权重w的平方和乘以一个系数λ正则化强度。新的损失函数为J_reg(w,b) J(w,b) (λ/2m) * Σ w_j^2L2正则化会让权重整体向零收缩但通常不会精确为零。它倾向于让所有特征都保留一点贡献适合处理特征间相关性较高的情况。L1正则化在损失函数中加入所有权重w的绝对值之和乘以λJ_reg(w,b) J(w,b) (λ/m) * Σ |w_j|L1正则化会产生稀疏解即它会将许多不重要的特征的权重精确地压缩到零。这相当于自动进行了特征选择模型的可解释性会更强。正则化项λ是一个超参数需要调优。λ太大模型会欠拟合所有权重都趋近于0模型变成只会预测偏置bλ太小正则化效果微弱可能无法抑制过拟合。8.2 梯度下降中的正则化加入正则化后梯度下降的更新公式需要相应修改。以L2正则化为例dw_j原本是(1/m) * Σ (a-y)*x_j现在需要加上正则化项的导数(λ/m) * w_j。 所以更新公式变为w_j : w_j - α * [ (1/m) * Σ (a-y)*x_j (λ/m) * w_j ]这个公式可以重写为w_j : w_j*(1 - αλ/m) - α * (1/m) * Σ (a-y)*x_j可以看到在每次更新前权重会先乘以一个略小于1的因子(1 - αλ/m)这被称为“权重衰减”是L2正则化在梯度下降中的直观体现。对于L1正则化更新公式涉及绝对值函数的次梯度更新规则中会包含一个向零收缩的项和一个符号函数同样会导致稀疏性。在实际操作中我们通常只对权重w进行正则化而不对偏置b进行正则化。因为偏置只是控制决策边界的偏移其大小与模型复杂度关系不大。9. 逻辑回归的局限与适用场景尽管逻辑回归强大且经典但它并非万能。理解其局限能帮助你在正确场景下使用它。主要局限决策边界线性这是根本性限制。它无法直接拟合异或XOR问题或复杂非线性边界的数据除非进行大量、精巧的特征工程。对特征相关性和异常值敏感多重共线性特征高度相关会影响系数估计的稳定性和解释性。异常值可能对Sigmoid函数的输入z产生较大影响从而干扰模型。假设数据线性可分或近似线性可分如果数据在特征空间中完全无法用线性边界分开逻辑回归的性能会很差。适用场景基准模型由于其简单、快速、可解释性强逻辑回归常被用作新项目的基准模型用以判断更复杂模型是否真的带来了提升。可解释性要求高的场景在金融风控、医疗诊断等领域模型为什么做出某个预测至关重要。逻辑回归的系数可以解释为“特征每增加一个单位对数几率的变化量”具有明确的业务意义。计算资源受限或需要快速在线预测逻辑回归模型轻量预测就是一次向量乘法和Sigmoid函数计算速度极快。特征已经很好或经过充分工程当特征本身具有很强的判别力或者通过特征工程已经将非线性关系转化为线性关系时逻辑回归就能发挥出巨大威力。逻辑回归是机器学习大厦的一块坚实基石。它清晰的数学原理、高效的求解过程、优秀的可解释性使其在工业界和学术界经久不衰。透彻理解它不仅是为了用好这个模型本身更是为了理解更复杂的模型如神经网络你可以将逻辑回归视为单层、单神经元的神经网络打下坚实的基础。在实际项目中从逻辑回归开始建立一个性能基线然后逐步尝试更复杂的模型同时不断迭代特征工程是一条被验证过的稳健路径。
返回列表