逻辑回归(Logistic Regression)培训课件

📅 2026/6/30 23:15:00
逻辑回归(Logistic Regression)培训课件
逻辑回归Logistic Regression培训课件目录案例引导从“考试通过预测”说起逻辑回归的概念与原理逻辑回归的完整实现流程手动演算一个完整的案例Python代码验证分类评估ROC曲线与AUC指标常见的生产应用场景逻辑回归的优缺点常见面试题总结课后作业一、案例引导从“考试通过预测”说起1.1 一个生活中的问题假设你是一位老师手里有一组学生的数据学习时长小时是否通过考试1通过0未通过205081121151问题如果一个学生学习时长为10小时他通过考试的概率是多少1.2 为什么不能用线性回归如果直接用线性回归去拟合这些数据会得到一个直线方程。但这条直线会带来一个严重的问题当学习时长为20小时时线性回归可能预测出概率为1.8180%当学习时长为0小时时可能预测出概率为-0.3-30%概率怎么可能超过100%或小于0%呢这就引出了逻辑回归的核心使命把任意实数范围的输出压缩到 [0, 1] 这个概率区间内。二、逻辑回归的概念与原理2.1 什么是逻辑回归逻辑回归Logistic Regression虽然名字里带“回归”但它实际上是一种分类算法专门用于解决二分类问题。一句话定义逻辑回归 线性回归的输出 Sigmoid激活函数 概率判断2.2 核心思想三步走第一步线性回归算分先把特征比如学习时长做一个线性组合算出一个“综合得分”[z w_1x_1 w_2x_2 \dots w_nx_n b]这个 ( z ) 可以是任何实数从负无穷到正无穷。第二步Sigmoid函数“挤压”成概率把 ( z ) 扔进 Sigmoid 函数也叫逻辑函数它就像一台“挤压机”[p \sigma(z) \frac{1}{1 e^{-z}}]Sigmoid函数的神奇之处在于输入任意实数(-\infty, \infty)输出被压缩到 (0, 1) 之间中心点(\sigma(0) 0.5)第三步设定阈值做决策通常以0.5为分水岭若 ( p \ge 0.5 )预测为类别 1通过考试若 ( p 0.5 )预测为类别 0未通过考试2.3 一张图理解整个流程输入特征学习时长 ↓ 线性回归z w × x b 算出任意实数 ↓ Sigmoid函数p 1/(1e^(-z)) 挤压成0~1的概率 ↓ 设定阈值0.5 ↓ p ≥ 0.5 → 预测“通过” | p 0.5 → 预测“未通过”三、逻辑回归的完整实现流程3.1 流程总览逻辑回归的完整实现包含以下7个步骤数据准备收集特征和标签前向传播计算线性组合 → Sigmoid → 得到预测概率计算损失用对数似然损失交叉熵衡量预测与真实的差距计算梯度求损失函数对每个参数的偏导数更新参数用梯度下降法更新权重和偏置迭代训练重复步骤2-5直到损失收敛预测输出用训练好的模型对新样本做预测3.2 损失函数对数似然损失/交叉熵对于单个样本损失函数为[L -\left[ y \cdot \log§ (1 - y) \cdot \log(1 - p) \right]]其中 ( y ) 是真实标签0或1( p ) 是模型预测的概率。为什么这个损失函数设计得妙分两种情况看当 ( y 1 )真实是正例( L -\log§ )如果 ( p 0.9 )损失 ( -\log(0.9) \approx 0.105 )很小 ✓如果 ( p 0.1 )损失 ( -\log(0.1) \approx 2.302 )极大 ✗当 ( y 0 )真实是反例( L -\log(1-p) )如果 ( p 0.1 )损失 ( -\log(0.9) \approx 0.105 )很小 ✓如果 ( p 0.9 )损失 ( -\log(0.1) \approx 2.302 )极大 ✗核心思想预测越离谱离真实值越远惩罚越狠。这就是“对数”惩罚的威力。对于 ( m ) 个样本总损失成本函数为[J -\frac{1}{m} \sum_{i1}^{m} \left[ y_i \log(p_i) (1 - y_i) \log(1 - p_i) \right]]3.3 梯度计算关键推导我们的目标是求出损失函数 ( J ) 对权重 ( w ) 的偏导数这样才知道参数该往哪个方向调。利用链式法则[\frac{\partial J}{\partial w} \frac{\partial J}{\partial p} \cdot \frac{\partial p}{\partial z} \cdot \frac{\partial z}{\partial w}]三部曲① ( \frac{\partial J}{\partial p} \frac{p - y}{p(1-p)} )② Sigmoid的导数有一个神仙性质( \frac{\partial p}{\partial z} p(1-p) )③ ( \frac{\partial z}{\partial w} x )三者相乘( p(1-p) ) 完美约掉得到极其简洁的结果[\boxed{\frac{\partial J}{\partial w} (p - y) \cdot x}]对于 ( m ) 个样本[\boxed{\frac{\partial J}{\partial w} \frac{1}{m} \sum_{i1}^{m} (p_i - y_i) \cdot x_i}]物理意义梯度的方向 预测概率 - 真实标签× 输入特征。预测高了就调低预测低了就调高。3.4 梯度更新参数优化有了梯度就可以用梯度下降法更新参数[w_{new} w_{old} - \alpha \cdot \frac{\partial J}{\partial w}][b_{new} b_{old} - \alpha \cdot \frac{\partial J}{\partial b}]其中 ( \alpha ) 是学习率控制每一步迈多大。为什么是“减号”梯度是上升最陡的方向我们要下山所以要反向走如果梯度为正上坡减去正数 参数变小往山下走 ✓如果梯度为负下坡减去负数 参数变大往山下走 ✓四、手动演算一个完整的案例4.1 案例设定我们用最简单的场景只有一个特征学习时长 ( x )预测是否通过考试( y )。数据只有一个样本( x 1 )( y 1 )学习1小时通过了初始参数( w 0.5 )( b 0 )学习率( \alpha 0.1 )4.2 第一步前向传播计算预测概率[z w \cdot x b 0.5 \times 1 0 0.5][p \frac{1}{1 e^{-0.5}} \frac{1}{1 0.6065} \approx 0.622]模型认为62.2% 的概率通过考试。4.3 第二步计算损失因为 ( y 1 )[L -\log§ -\log(0.622) \approx 0.474]4.4 第三步计算梯度[\frac{\partial J}{\partial w} (p - y) \cdot x (0.622 - 1) \times 1 -0.378]梯度为负数说明预测偏低了0.622 1需要把 ( w )调大。4.5 第四步更新参数[w_{new} w_{old} - \alpha \cdot \frac{\partial J}{\partial w} 0.5 - 0.1 \times (-0.378) 0.5 0.0378 \mathbf{0.5378}]4.6 第五步验证效果更新后用新参数重新预测[z_{new} 0.5378 \times 1 0.5378][p_{new} \frac{1}{1 e^{-0.5378}} \frac{1}{1 0.584} \approx 0.631]概率从 0.622 提升到了 0.631离真实的“1”更近了新损失( L_{new} -\log(0.631) \approx 0.460 )比原来的 0.474 降低了。这就是一次完整的梯度下降迭代。重复这个过程模型会越来越准。五、Python代码验证下面我们用 Python 的sklearn库来实现逻辑回归并验证上面的手动演算。5.1 完整代码# 1. 导入必要的库importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score,confusion_matrix,classification_report,roc_curve,roc_auc_score# 2. 准备数据学习时长小时与是否通过考试1通过0未通过Xnp.array([[2],[5],[8],[12],[15],[3],[6],[10],[13],[18]])# 学习时长ynp.array([0,0,1,1,1,0,0,1,1,1])# 是否通过print(*50)print(【数据预览】)print(学习时长:,X.flatten())print(是否通过:,y)print(*50)# 3. 划分训练集和测试集80%训练20%测试X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)print(\n【数据划分】)print(f训练集样本数:{len(X_train)})print(f测试集样本数:{len(X_test)})# 4. 创建逻辑回归模型# - C1.0 是正则化强度的倒数默认值# - max_iter1000 确保收敛modelLogisticRegression(C1.0,max_iter1000,random_state42)# 5. 训练模型这就是梯度下降在后台自动完成的过程model.fit(X_train,y_train)print(\n【模型训练完成】)print(f权重 w:{model.coef_[0][0]:.4f})print(f偏置 b:{model.intercept_[0]:.4f})# 6. 在测试集上预测y_predmodel.predict(X_test)# 预测类别0或1y_pred_probamodel.predict_proba(X_test)# 预测概率0~1之间的值print(\n【测试集预测结果】)print(真实标签: ,y_test)print(预测类别: ,y_pred)print(预测概率: ,[f{p[1]:.2%}forpiny_pred_proba])# 取类别1的概率# 7. 评估模型accuracyaccuracy_score(y_test,y_pred)print(f\n【模型评估】)print(f准确率:{accuracy:.2%})# 混淆矩阵cmconfusion_matrix(y_test,y_pred)print(\n混淆矩阵:)print( 预测为0 预测为1)print(f真实为0{cm[0][0]:^8}{cm[0][1]:^8})print(f真实为1{cm[1][0]:^8}{cm[1][1]:^8})# 分类报告print(\n分类报告:)print(classification_report(y_test,y_pred,target_names[未通过,通过]))# 8. ROC曲线与AUC将在下一章详细讲解y_probamodel.predict_proba(X)[:,1]# 所有样本的预测概率fpr,tpr,thresholdsroc_curve(y,y_proba)aucroc_auc_score(y,y_proba)print(fAUC值:{auc:.4f})# 绘制ROC曲线plt.figure(figsize(8,6))plt.plot(fpr,tpr,colordarkorange,lw2,labelfROC曲线 (AUC {auc:.4f}))plt.plot([0,1],[0,1],colornavy,lw2,linestyle--,label随机猜测)plt.xlim([0.0,1.0])plt.ylim([0.0,1.05])plt.xlabel(假正率 (FPR))plt.ylabel(真正率 (TPR))plt.title(ROC曲线)plt.legend(loclower right)plt.grid(True)plt.show()5.2 代码执行流程分析步骤代码行说明1导入库引入 numpy、sklearn 等必要工具2准备数据创建特征 X 和标签 y3划分数据train_test_split将数据分为训练集和测试集4创建模型LogisticRegression()实例化模型对象5训练模型model.fit()内部执行梯度下降自动优化参数6预测predict()输出类别predict_proba()输出概率7评估计算准确率、混淆矩阵、分类报告8ROC/AUC绘制 ROC 曲线计算 AUC 值5.3 代码输出解读运行上述代码你会看到权重和偏置模型学到的 ( w ) 和 ( b ) 值预测结果每个测试样本的预测类别和概率准确率模型在测试集上的正确率混淆矩阵直观展示哪些分对了、哪些分错了ROC曲线和AUC模型整体性能的可视化评估六、分类评估ROC曲线与AUC指标6.1 为什么需要ROC和AUC准确率Accuracy有时会“骗人”。比如100个样本中99个是负例1个是正例如果模型把所有样本都预测为负例准确率 99%但这个模型毫无意义因为它一个正例都识别不出来ROC曲线和AUC指标能更全面地评估模型性能。6.2 混淆矩阵基础在介绍ROC之前先回顾混淆矩阵的四个基本概念预测为正例预测为反例真实为正例TP真正例FN假反例真实为反例FP假正例TN真反例由此引出两个关键指标真正率TPR TP / (TP FN)所有正例中被正确预测的比例假正率FPR FP / (FP TN)所有反例中被错误预测为正例的比例6.3 ROC曲线ROC曲线受试者工作特征曲线是将不同阈值下的FPR作为横轴、TPR作为纵轴绘制而成的曲线。如何绘制ROC曲线将所有样本按模型预测的“正例概率”从大到小排序从高到低依次设定阈值如 90%、80%、70%…每个阈值下计算对应的 FPR 和 TPR将这些点连成曲线曲线解读曲线越靠近左上角模型性能越好对角线45°线代表随机猜测AUC 0.56.4 AUC指标AUCArea Under Curve就是 ROC 曲线下的面积。AUC的概率意义随机取一对正负样本正样本的预测得分大于负样本预测得分的概率。AUC值的判断标准AUC值含义AUC 1.0完美分类器现实中几乎不存在0.8 ≤ AUC 1.0优秀有很好的预测价值0.7 ≤ AUC 0.8良好有一定预测价值0.5 AUC 0.7一般勉强可用AUC 0.5随机猜测毫无预测能力AUC 0.5比随机还差可能标签搞反了6.5 ROC和AUC的优势不受阈值影响综合评估模型在所有阈值下的表现不受样本不平衡影响在正负样本严重不平衡时依然可靠便于模型比较AUC 是一个数值可以直接比较不同模型七、常见的生产应用场景逻辑回归因其简单、高效、可解释性强在众多领域得到广泛应用。7.1 金融风控最经典的应用90%的信用评分卡使用逻辑回归信用评分根据用户的收入、负债、历史还款记录等特征预测违约概率欺诈检测识别异常交易行为贷款审批判断申请人是否具备还款能力7.2 医疗健康85%的疾病预测模型以逻辑回归为基础疾病诊断根据体检指标预测是否患病如糖尿病、心脏病风险预测分析基因、生活习惯等因素预测患病风险药物疗效评估判断某种治疗方案是否有效7.3 市场营销用户转化预测预测客户是否会购买产品或服务客户流失预警识别可能流失的客户广告点击率CTR预测判断用户是否会点击广告7.4 互联网与推荐系统垃圾邮件识别判断邮件是否为垃圾邮件推荐系统分析用户偏好预测可能感兴趣的内容文本分类情感分析、主题分类等7.5 其他领域生物信息学基因表达数据分析社会科学分析社会现象和人类行为搜索引擎搜索结果排序优化八、逻辑回归的优缺点8.1 优点优点说明简单易懂模型形式清晰数学原理优雅容易理解和实现可解释性强可以直接看到每个特征的权重理解特征对结果的影响输出概率不仅给出分类结果还能给出概率值便于风险决策计算高效训练和预测速度快适合大规模数据鲁棒性好对异常值和缺失值相对稳健易于更新可以方便地吸收新数据更新模型8.2 缺点缺点说明容易欠拟合模型相对简单分类精度可能不如复杂模型特征工程要求高对非线性关系处理能力有限需要人工构造特征对数据量有要求需要较大样本量才能得到可靠的参数估计独立性假设假设所有观测独立实际中可能不成立对多重共线性敏感特征之间高度相关时参数估计不稳定适应性有限不如决策树等算法对数据和场景的适应能力强8.3 如何克服缺点欠拟合通过特征工程多项式特征、交叉特征提升模型复杂度过拟合引入正则化L1/L2控制模型复杂度非线性问题可以结合核方法或集成学习九、常见面试题以下是逻辑回归面试中最高频的问题Q1逻辑回归是回归算法还是分类算法为什么名字里有“回归”答逻辑回归本质上是分类算法主要用于二分类。名字里带“回归”是因为它借用了线性回归的结构——先做线性组合回归的部分再用Sigmoid函数映射到概率空间。Q2逻辑回归与线性回归有什么区别对比维度线性回归逻辑回归问题类型回归预测连续值分类预测类别输出范围任意实数(0, 1) 概率损失函数均方误差MSE交叉熵/对数似然损失求解方法最小二乘法有闭式解梯度下降无闭式解Q3为什么逻辑回归的损失函数不用均方误差MSE答如果用MSE加上Sigmoid函数后损失函数会变成非凸函数有多个局部最小值梯度下降容易陷入局部最优。而交叉熵损失函数是凸函数有唯一的全局最优解。Q4Sigmoid函数的导数是什么有什么特殊性质答( \frac{\partial \sigma(z)}{\partial z} \sigma(z)(1 - \sigma(z)) p(1-p) )这个性质使得逻辑回归的梯度推导极其简洁( p(1-p) ) 会在链式法则中与损失函数的导数抵消。Q5什么是ROC曲线和AUC为什么要用它们答ROC曲线是以假正率FPR为横轴、真正率TPR为纵轴绘制的曲线。AUC是曲线下的面积。它们能在不依赖阈值的情况下评估模型性能且对样本不平衡不敏感。Q6逻辑回归如何处理多分类问题答两种常用策略一对多OvA为每个类别训练一个二分类器一对一OvO为每对类别训练一个二分类器Q7L1正则化和L2正则化在逻辑回归中的作用是什么答正则化防止过拟合。L1正则化产生稀疏解可用于特征选择L2正则化让权重尽可能小但不产生稀疏解十、总结10.1 核心要点回顾逻辑回归是分类算法不是回归算法专门解决二分类问题核心流程线性回归 → Sigmoid函数 → 阈值判断损失函数对数似然损失交叉熵对“离谱的错误”施以重罚梯度公式( \frac{\partial J}{\partial w} (p - y) \cdot x )简洁优美优化方法梯度下降朝着损失减小的方向迭代更新参数模型评估ROC曲线 AUC指标全面评估分类性能10.2 学习建议逻辑回归是机器学习的基石算法务必吃透重点理解Sigmoid函数和交叉熵损失的配合为什么如此巧妙掌握梯度推导的链式法则一通百通在实际项目中逻辑回归常作为基线模型Baseline之后再尝试更复杂的算法十一、课后作业作业1概念理解简答题为什么逻辑回归的名字里有“回归”但实际上是分类算法解释Sigmoid函数的作用并写出其数学表达式。为什么逻辑回归的损失函数不用均方误差MSE解释ROC曲线和AUC的含义AUC0.8意味着什么作业2手动计算数值题给定一个样本( x 2 )( y 0 )初始参数 ( w 0.3 )( b 0.1 )学习率 ( \alpha 0.05 )。请完成一次梯度下降迭代计算预测概率 ( p )计算损失 ( L )计算梯度 ( \frac{\partial L}{\partial w} ) 和 ( \frac{\partial L}{\partial b} )更新 ( w ) 和 ( b )作业3编程实践代码题使用 sklearn 的load_breast_cancer数据集乳腺癌数据集完成以下任务fromsklearn.datasetsimportload_breast_cancerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,roc_auc_score# 1. 加载数据dataload_breast_cancer()X,ydata.data,data.target# 2. 划分训练集和测试集70%训练30%测试# 3. 创建并训练逻辑回归模型# 4. 在测试集上预测并计算准确率# 5. 计算AUC值# 6. 输出模型的权重分析哪些特征对预测影响最大作业4思考题开放题假设你在一个银行工作需要用逻辑回归构建信用评分卡模型。申请人的特征包括年龄、收入、负债率、信用卡数量、逾期次数等。请思考哪些特征可能需要做特殊处理如归一化、编码模型训练完成后如何向业务部门解释模型的预测结果如果模型的AUC只有0.62你会从哪些方面尝试提升模型性能祝你学习愉快逻辑回归是机器学习世界的“Hello World”掌握它你就迈出了成为数据科学家的第一步