资讯动态

逻辑回归总结

发布时间:2026/8/7 12:01:16 来源:尧图企业网站定制
1. 逻辑回归是用来干什么的在机器学习开篇我们根据“特征”和“标签”的关系将问题分为三大类① 有特征有连续的标签如房价、温度属于“回归问题”。这类问题的解决通常使用“线性回归”目标是拟合出一条连续曲线预测具体的数值。② 有特征有离散的标签如是否患病是/否手写数字0-9属于“分类问题”。对于这一类问题我们最常用的基础算法之一就是“逻辑回归Logistic Regression”。注逻辑回归虽然名字带“回归”但它本质上是分类模型。它通过Sigmoid函数将线性回归的输出压缩到0~1之间转化为概率从而实现二分类也可以推广到多分类。这章内容就是处理 “分类问题” 的逻辑回归**************进阶补充分类算法的体系定位在机器学习领域逻辑回归Logistic Regression、支持向量机SVM和决策树Decision Tree都是非常经典的有监督分类算法。逻辑回归属于线性分类器擅长处理特征与标签之间存在线性关系边界的二分类问题计算高效可解释性强通常作为工业界的“基线模型”。支持向量机SVM通过寻找最大间隔超平面进行分类借助核技巧Kernel Trick可以处理线性不可分的高维数据。决策树基于树形结构进行特征判断天生自带可解释性能够直观展示分类的逻辑规则。核心结论逻辑回归是机器学习分类算法的“敲门砖”理解它是深入理解 SVM、决策树等更复杂模型的基础。**************③ 有特征无标签只有数据本身没有正确答案属于“聚类问题”。这类问题的解决属于“无监督学习”常用算法有K-MeansK均值聚类、DBSCAN基于密度的聚类等目的是根据数据本身的分布特性将相似的数据自动归为一类。由于支持向量机SVM决策树 K-MeansK均值聚类、DBSCAN基于密度的聚类 等不是很重要搞明白线性回归以及逻辑回归后直接进入《深度学习》2. 在了解 “逻辑回归” 是干什么的之后来看一下逻辑回归怎么用。前面学习了线性回归线性回归最后算出来的结果只是一个根据训练集训练出来的达标模型来对一个具体的x 来预测 y也就是说最后的结果是一个具体的y值如下图 “回归” 那一栏所示那么问题来了我们能够根据 “回归” 这一栏的数据y来指定一个分数线去分类吗比如说我们根据那些分数以平均分作为分类线在日常生活中我们的确可以这么分但是在分类问题中这样就会出现很大的问题比如一张试卷的分数是这么组成的不包含附加题的分数为100分但是附加题的分数为10000000000那么有一大部分的同学的分数1009563888675......但是有一位天才同学 小刘 做出来了这一道附加题他的分数为10000000100现在老师要进行班级分数AB的分类A就是优秀B就是还行这个时候我们进行分类的前提肯定要达到班级平均分才行啊如果连平均分都没有达到那怎么能算是优秀A了于是戏剧的一幕出现了在小刘的分数碾压下那些两位数三位数的分显得无比可笑平均分为200000002这下好了除了小刘是优秀A的其他的同学都是还行 (B) 所以这样的以分数线作为标准去进行分类的行为是会受到极端值的破坏的那我们该用什么样的标准去进行分类了于是我们发明了 Sigmoid 激活函数。它是一个固定的数学翻译器会把任何分数无论多大多小都映射到 (0, 1) 的区间里。小刘的 10000000000 分映射后变成了 0.999无限接近1其他同学正常的 80~90 分映射后在 0.6~0.7 左右。这样就消除了极端值对整体判断的绑架。作为深度学习入门者我们只需要知道它有‘压缩数值、输出概率、导数能用自身表示’这三个性质就够了具体的求导推导过程交给代码就行。这个时候我们再进行划分就准确很多了比如以0.6为线大于0.6的为A类小于0.6的为B类这个时候进行预测就好用多了。3.根据这个图我们会发现做完这些步骤我们预测结果怎么会出现错误了到底是哪一步发生了错误为什么会出现误差在机器学习里面我们知道一个模型训练会有下列一个过程准备数据数据预处理特征工程模型训练模型评估模型测试①在【准备数据】这一步我们要将数据分为三层训练集验证集与测试集有没有可能在分训练集的时候我们将很多极端的数据都分给了训练集导致训练出来的模型是一个极端的模型而并不是一个正常的模型。②在【准备数据】这一步如果训练集正常可能是属于这一种情况数据本身长重叠了这是最无解的错误。现象在图上红色的点和绿色的点死死地混在一起你中有我我中有你。举例你要根据“身高”预测“是否打篮球”。1米9的有打篮球的也有不打篮球的1米7的也有打篮球的。身高完全相同的人标签却不一样。Sigmoid 怎么处理无论你怎么调整那条线线上方总归有属于另一类的点线下边也有。Sigmoid算出来的概率不是0.8就是0.6但永远达不到100%准确。结论这种错误叫“不可约误差Bayes Error”是数据本身的噪音跟算法无关。解决办法基本无解③在【特征工程】和【模型训练】这两步中如果我们的模型训练得太直男看不懂弯曲的数据那么也会导致这个现象。逻辑回归本质上是个线性分类器——它只会画直线或平面。现象你的数据分布像一个“甜甜圈”A类在中间B类在外圈。或者像“太极图”一样弯弯曲曲。错误原因你强行让逻辑回归画一条直线去切一个圆。无论你怎么平移、旋转那条直线总有半圈红点混在绿点里。结论这是模型的先天性不足属于欠拟合。解决办法不是改Sigmoid而是加多项式特征把直线变成曲线或者换SVM、决策树等非线性模型。解决办法加特征、改用非线性模型④在【模型训练】这一步如果学习率没有设置好模型会无法到达碗底全局最优。逻辑回归的损失函数在图形上只有一个唯一的最低点形状像一口光滑的“∪型大碗”我们称之为“全局最优解”。因此逻辑回归不存在“被半山腰的假坑非全局局部最优骗到”的情况。但是梯度下降在下山的过程中如果学习率没调好学习率太大下山时步子迈得太大会在碗的两侧来回震荡始终踩不到最中间的那个最低点。学习率太小下山时步子迈得像蚂蚁爬虽然方向是对的但迭代了成千上万次还没走到碗底训练时间过长。解决办法调低学习率消除震荡或者换用 Adam 等自带“自动调节步长”功能的优化器。注在深度学习的复杂神经网络中地形是凹凸不平的“蛋托”确实存在“非全局局部最优”的陷阱但在你现在学的逻辑回归中不需要担心这个问题。解决办法调学习率学习率的调法按照什么标准调看损失曲线震荡就调小下降太慢就调大验证集回升就立刻刹车。谁来调现阶段是你手动试。等你熟悉后让GridSearch 或贝叶斯优化机器来替你搜。怎么调① 先试 0.1, 0.01, 0.001 这种数量级② 设定动态衰减让步子越走越小③ 或者干脆直接用 Adam 优化器让它自动帮你调。⑤在【模型评估】和【模型测试】这个阶段如果定的阈值太死板人为错误也会导致错误逻辑回归输出的是概率默认把0.5判为A类。场景你预测的是“癌症筛查”。把阈值定成0.5意味着模型只要有51%的把握认为有病就判他有病。后果如果模型判断错了可能是阈值的问题。比如模型算出来概率是0.49差一点点你归为B类结果那个人实际上有病。解决办法如果你宁可错杀一千也不放过一个完全可以把阈值下调成0.3只要模型有30%的把握就报警。所以这个错是你定的“及格线”不合理不是模型的错。⑥在【模型训练】和【模型评估】这一步如果你在训练时把模型搞得太复杂比如加了太多高次项导致它在训练集上完美贴合但一遇到新数据验证集就原形毕露。因为 “过拟合”了解决办法加正则化L1/L2或增大训练集4.现在我们知道了逻辑回归的原理以及它为什么会出错。那么模型预测出现差错有出现的多的有出现的少的逻辑回归靠什么来指导模型的参数调整呢答案是对数损失函数Log-Loss对数损失函数在逻辑回归里面的线性回归那一段步骤里面会代替损失函数作为评分员。在训练时模型会先计算结果 z经过 Sigmoid 变成概率 a然后对数损失会立刻根据 a 与真实值的差距打出分数。梯度下降线性回归里面的拿着这个分数反向传播去调整模型内部的权重 θ强迫模型下一次算出来的概率更接近真实值。注意逻辑回归内部有一整套完整的“计算-打分-调整”循环并非简单地在固定公式上套壳。只是因为它的核心输出是概率所以专配的评分员不再是平方误差MSE就是损失函数而是对数损失函数。线性回归评分员MSE又可以认为是损失函数在指导模型调整“斜率和截距”让预测值逼近真实数字。逻辑回归评分员对数损失在指导模型调整“斜率和截距”让预测概率逼近真实类别0或1。两者都有训练都在调参。只是逻辑回归在调参之前多了一步“把 z 压缩成概率”的动作仅此而已。例子假设模型内部当前有一个权重θ1它现在的值是0.5。梯度下降这双腿要做的事情是第一步前向计算算出分数模型算出概率a 0.6评分员对数损失一看真实值是1根据自己的公式打了个分损失 0.5。第二步反向倒推判断方向模型内部的“参谋部”梯度计算开始思考“如果我现在把θ1稍微增大一点点变成0.51再去重新计算一遍新的损失会变大还是变小”如果参谋部发现“增大θ1会让损失从0.5降到0.4”。那么参谋部就判定“方向找到了应该往增大的方向走”如果参谋部发现“增大θ1会让损失从0.5升到0.6”。那就判定“走反了应该往减小的方向走”这个“判断方向”的数学过程在计算上就是求导数梯度。第三步迈出一步修改 θ参谋部算出了方向并计算出 “建议迈多大步子学习率 × 梯度” 。于是它把θ1从0.5改成了0.51如果方向是增大。这就是“拿着分数去调整权重”的全过程。这个过程在线性回归和逻辑回归中一模一样。5.对于一个模型我们在训练集里面调整完后发现他的对于整体预测的准确率很高很高了那么是不是就行了了答案是不行因为对于整体的预测准确率很高并不代表对于个体的精确率很高举个例子某医院手里有100人训练集的病例病例就是确定他们是病人与非病人这是一个真实结果他们现在训练出来一个模型用于预测100个人的情况结果发现这个模型的准确率高达80%也就是说这个模型预测准确的人有80人还有20人预测失败如果拿来用于现在要预测的另外100人验证集那么很有可能也是80人预测成功但是现在这100人验证集医生的手里并没有病例其实是有的因为要求精确率召回率但是现在就理解成没有病例也就是说医生只知道有80人预测成功了他的手里只有每个人对应的预测值但是医生却根本不敢确定到底是谁预测成功了那么这个预测的数据就是一坨粑粑医生也根本不敢和病人说恭喜你你没有病也不敢对着病人说你来开点药回去吃吧。这个时候对于医生来说医生急需知道“模型说没病的这批人究竟有多大的概率真的没病阴性预测值NPV 模型说有病的这批人有多大概率真有病精确率 所有真正有病的人里我找出了多少召回率”这个就要根据混淆矩阵来进行统计混淆矩阵如下现在知道混淆矩阵了那么混淆矩阵是如何来估算出精确率的了看懂下面的图就行我会根据实际例子直接教会计算混淆矩阵模型预测有病模型预测没病真实情况合计真实真有病TP 10真阳性FN 10假阴性漏诊了20个真正病人真实真没病FP 10假阳性吓唬人TN 70真阴性80个健康人预测合计预测有病的共20人预测没病的共80人总人数 100根据表格我们进行下列计算阴性预测值NPV 70 / (70 10) 70 / 80 87.5%对那个“不敢说话的医生”意味着什么现在模型对 100 个新病人说“这 80 个人没病阴性。”医生拿着计算器一算看混淆矩阵“这 80 个被我说没病的人里有 70 个确实没病但有 10 个其实是病人漏诊了。”精确率Precision TP / (TP FP) 10 / (10 10) 10 / 20 50%对那个“不敢说话的医生”意味着什么模型对医生说“这 20 个人有病阳性。”医生一算“这 20 个被我说有病的人里只有 10 个真有病另外 10 个是虚惊一场误诊。”召回率Recall回答“所有真正有病的人里我找出了多少”Recall TP / (TP FN) 10 / (10 10) 50%意味着20 个真正的病人我只抓出来 10 个漏掉了 50% 的病人。这个模型很危险F1-score回答“精确率50%和召回率50%平衡起来综合水平怎么样”因为两个都是 50%F1 也是 50%很烂。这印证了虽然准确率有 80%但这个模型在“抓病人”这项核心任务上就是个半吊子。核心痛点召回率只有 50%这意味着有一半的病人被模型放回家了漏诊。这是所有问题里最致命的因为这是在“拿人命开玩笑”。那现在这个模型是这样的我们应该怎么做如何去改善模型又为什么会出现这种情况了第一步为什么会变成这样根因分析模型之所以变成这个样子主要有两个底层原因1. 数据不平衡主谋我们的训练集100人里只有 20 个病人80 个健康人。模型在进行调整时会根据已有的训练集的特征来对其进行预测评分员会根据预测值对与真实值进行一个打分梯度下降就会根据打分来进行判断到底是将这个参数进行调大还是调小由于训练集里面有80个健康人那么就会模型训练成偏向这80个健康人的数据这个时候遇到那20个没有有病的就算预测错误也没有关系因为80个健康人占大多数这个时候就会导致模型预测健康人很准预测病人却不准但是模型却并不关心因为整体的准确率已经很高了这个时候就会导致训练集准确率满足但是却无法满足精确率。不仅如此数据不平衡还会导致一系列问题比如测试集50个健康人50个病人那么很有可能连50%的准确率都保证不了所以仅凭“训练集准确率 80%”没有任何意义。模型的真正水平必须用“和训练集分布完全一致且从未见过”的测试集来验证。如果将不平衡训练集上训练的模型直接用于均衡分布的测试集准确率会因模型对少数类识别能力缺失而严重下滑。因此在划分数据时必须使用分层采样stratifyy保证训练集和测试集的比例一致否则你所做的一切训练都可能是在错误的跑道上白费力气。2. 默认阈值 0.5 太“怂”了帮凶模型算出一个病人得病的概率如果刚好是 0.49按照默认规则它就会判“没病”。但在医院场景下一个概率 0.49 的病人实际上已经很危险了。默认规则放走了他。️ 第二步我们应该怎么改四种武器从简单到复杂既然知道原因了我们按顺序操作方法一最快、最见效下调分类阈值调“及格线”你现在用的是 0.5。把它改成0.3。这意味着只要模型认为你有 30% 的概率有病我就把你揪出来做进一步检查。结果召回率会飙升原来漏掉的 10 个病人可能只漏掉 2 个了。精确率会下降会多抓一些健康人进来但没关系他们只是“进一步检查”不是直接开刀。这个操作在代码里就一行model.predict_proba(X)[:,1] 0.3。本质牺牲准确率换取召回率。注意这里准确率下降并不会重新训练模型因为取阈值这一步已经和前面的模型训练完全独立了是已经训练完后我们自己取阈值分类训练完了就不会再回去训练模型了准确率知识再训练过程中影响评分员给模型打分让模型根据梯度下降去进行再次调整一旦这个操作完成后续取阈值造成的准确率下降是属于我们自己的霸道分类线根打完工的模型训练哪一步无关。那对于那些被误诊的健康人他们又该被怎么处理了总不能真以为他生病了吧注意这里就不是机器学习或者深度学习该处理的了这已经是机器学习的终点了至于如何处理这个是软件工程这一门课该去处理的事情了且这是软将工程的起点。方法二矫正偏科给模型设置“错题重罚”class_weight在训练逻辑回归时加一个参数class_weightbalanced。这个参数的意思就是告诉模型“虽然数据里病人少但你如果把病人判错了我要扣你双倍的工资”模型为了不被扣钱就会硬着头皮去死磕那 20 个病人的特征提升对病人的识别能力。这个权重直接作用在损失函数评分员上当模型预测错一个“健康人”原本扣 1 分现在乘以权重 0.625实际只扣0.625 分。当模型预测错一个“病人”原本扣 1 分现在乘以权重 2.5实际要扣2.5 分本质当训练集数据不正常时就要采用不正常的评分标准改一下损失函数上面例子的本质就是扩大损失函数罚更重一般这种方法用于不正常的训练集对于正常合理的训练集我们一般采用正常的损失函数。现在模型会意识到为了降低总损失它必须优先把为数不多的“病人”给预测对因为犯错的代价实在太昂贵了。这就强制模型把注意力分给那些被忽视的少数类样本。方法三外科手术人工合成“病人”过采样/重采样既然病人太少我们就把那 20 个病人的数据复制几份或者用算法SMOTE生成几个“长得类似但略有不同的假病人”。让训练集变成 80 个健康人 vs 80 个假病人。模型一看两边人一样多了它就没办法偷懒了必须公平地学习两边的特征。方法四根治换更复杂的模型或加特征如果调了阈值和权重后模型依然只能识别 50% 的病人说明原始特征比如只有身高、体重不足以区分病人和健康人。这时候就要回到特征工程加入更有效的特征比如心电图、CT值或者换用决策树等非线性模型。****************************详细展开特征工程加特征原始特征可能过于简单或与疾病关联性不强。例如仅凭“身高”和“体重”很难判断一个人是否患有心脏病。我们需要引入更具判别力的特征如医学指标心电图波形特征、血压、胆固醇水平、血糖值。行为特征吸烟史、饮酒频率、运动习惯。组合特征BMI指数由身高体重计算、心率变异性等。通过特征工程我们为模型提供了更丰富、更相关的信息使其能够发现数据中更深层次的模式从而提高分类性能。换用非线性模型逻辑回归本质上是线性分类器它假设特征与目标之间存在线性决策边界。如果数据本身是非线性可分的例如疾病风险与年龄、血压呈复杂的非线性关系逻辑回归就会力不从心。此时应考虑决策树/随机森林能够自动捕捉非线性关系和特征交互对异常值不敏感解释性较好。支持向量机SVM配合核函数如RBF核可以处理高度非线性的分类边界。梯度提升机如XGBoost, LightGBM集成学习方法通常能获得更高的预测精度但模型复杂度也更高。选择模型时需要在模型复杂度、可解释性、训练速度和预测性能之间做出权衡。模型集成如果单一模型效果提升有限可以考虑将多个模型组合起来例如投票法Voting让逻辑回归、决策树等几个模型分别预测然后采用“少数服从多数”的原则决定最终类别。堆叠法Stacking用多个基础模型如逻辑回归、SVM的预测结果作为新特征再训练一个元模型如逻辑回归进行最终决策。集成方法往往能稳定提升模型性能降低过拟合风险。总结与选择建议优先尝试方法一和方法二它们操作简单、见效快且不改变模型结构是解决类别不平衡问题的首选。数据量充足时考虑方法三过采样如SMOTE能有效平衡数据集但需注意避免过拟合和引入噪声。当前三种方法效果不佳时采用方法四这通常意味着问题本质更复杂需要更强大的模型或更丰富的特征信息。此时应回到业务本身深入理解数据进行更精细的特征工程或尝试更高级的机器学习算法。在实际项目中这四种方法往往需要组合使用并通过交叉验证来评估每种策略的效果最终找到最适合当前业务场景的解决方案。****************************** 第三部分面对医生你该怎么汇报现在你作为数据分析师要跟医生汇报了。你不要只说“模型准确率 80%”你应该拿着这个方案去说“医生现在的模型太‘保守’了为了不吓到病人它悄悄把 50% 的真病人放回家了。为了解决漏诊我打算把警报阈值从 0.5 调到 0.3。这样调整后预计能多抓出 30% 的真病人代价是会多吓到 20% 的健康人让他们多做一次免费复检。您觉得为了保住病人的生命多增加一些复检成本是否值得”这时候医生绝对会拍板“宁可多做一千次复检也不能漏掉一个病人”然后你就在代码里把阈值调低问题完美解决。✅ 终极结论对于该训练集样本来说当模型出现“召回率低漏诊”时解决路径如下先调阈值降低分类阈值如从 0.5 降至 0.3优先保证召回率这是最快、最直接的修正。再改权重在训练时加入class_weightbalanced让模型对少数类病人的错误更敏感。最后补数据如果前两步效果依然不佳考虑进行过采样SMOTE来平衡数据集或增加新的关键特征。核心权衡在医疗、安检等场景中召回率不漏坏人的重要性远高于精确率不冤枉好人。牺牲一点精确率去换取召回率的飙升往往是最优的商业决策。到这里逻辑回归结束

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价