简介这份线性回归算法小组报告PPT面向机器学习入门学习者与课程小组汇报场景围绕回归预测的基本流程梳理线性回归、误差建模与逻辑回归的核心知识适合用于课堂展示、复习串讲和公式推导参考。压缩包内仅含1个PPTX文件约860KB以幻灯片形式组织理论讲解、示例数据与公式推导便于直接演示或按页摘录。内容从工资与年龄预测贷款额度的案例切入涵盖拟合平面、误差高斯分布假设、似然函数与最小二乘法、目标函数求偏导、R²评估以及批量、随机、小批量梯度下降和学习率选择随后延伸到逻辑回归的Sigmoid函数、决策边界、参数更新与Softmax多分类。已有320人学习可用于快速建立从线性回归到逻辑回归的知识框架并对照示例理解模型假设、优化与评估要点。1. 从一张贷款额度表出发这份线性回归笔记的地图长什么样一张只有三列的表——年龄、工资、银行批下来的额度——就能把线性回归整套东西串起来。年龄和工资是两个特征额度是标签报告要回答的是「这两个特征各自对额度有多大影响」也就是参数。围绕这张表一份完整的小组报告其实要回答四件事模型长什么样、误差凭什么假设成高斯、参数怎么从似然函数推到最小二乘、闭式解推不动时梯度下降怎么接手。再往后一步逻辑回归借着 Sigmoid 把回归值翻译成概率分类任务也接上了。这份线性回归算法笔记按「骨架 → 推导 → 求解 → 分类 → 易漏点 → 复习清单」铺开适合正在系统学机器学习、或者手里正攥着一份小组报告 PPT 要复习的人对着目录就能定位自己哪一段是虚的。2. 建模骨架两个特征、一个偏置项和那条拟合平面2.1 特征、标签、参数三个角色别混这张表最容易被讲糊的地方是把「谁是给定的、谁是学出来的」混成一锅。年龄和工资是特征是你在建模前就决定要喂进去的东西额度是标签是数据里已经带着的答案而「年龄每大一岁额度大概涨多少」这个系数才是模型要学出来的参数。三者身份不同复习时各问一句就能自检特征问「我为什么选它」标签问「它是不是连续值」参数问「它是怎么被解出来的」。角色在这张表里是谁公式里的符号自检问题特征年龄、工资X1、X2它和标签真的有关系吗标签银行批的额度Y它是连续值还是类别参数每个特征的影响力度θ1、θ2它是解出来的还是拍出来的偏置与特征无关的基准量θ0去掉它模型会怎样把这三者的关系写成式子就是拟合平面h(x) θ0 θ1·X1 θ2·X2。特征只有两个时它是一张平面特征变成 n 个时它就是 n 维空间里的超平面但「线性」这两个字始终指的是对参数线性不是对特征线性——这一点在后面讲逻辑回归的决策边界时还会再撞上。2.2 偏置项为什么模型里必须留一个 θ0很多报告写到 h(x) θ1·X1 θ2·X2 就停了把 θ0 当成可有可无的装饰这是典型的概念漏项。偏置项代表的是「所有特征都取零时模型的基准输出」。放到贷款场景里想一个人年龄为零、工资为零额度显然不该是零模型得有一个自己能学的基准线这个基准线就是 θ0。硬把它去掉等于强行要求拟合平面必须穿过原点在绝大多数真实数据上都会带来系统性偏差。工程上的处理办法很统一给设计矩阵补一列全 1把 θ0 当成「特征恒为 1 的那个权重」这样所有参数就能用一个向量一次写完梯度也好、正规方程也好写法都统一了。import numpy as np # 三列原始数据年龄、工资、额度 age np.array([25, 30, 28, 33, 40]) salary np.array([4000, 8000, 5000, 7500, 12000]) amount np.array([20000, 70000, 35000, 50000, 85000]) # 设计矩阵补一列全 1对应偏置项 theta0 X np.column_stack([np.ones(len(age)), age, salary]) y amount print(X.shape) # (5, 3)5 个样本3 个待求参数column_stack把全 1 列放在最前面顺序要和后面 θ 的顺序一致否则解出来的系数会张冠李戴。X.shape的第二维就是参数个数样本数少于这一维时后面的正规方程会直接失效这一点在第 3 章会展开。2.3 误差的三条假设独立、同分布、高斯真实值和预测值之间一定存在差距写成 y θᵀx ε这个 ε 就是误差。整份报告最关键的转折点在于误差不是随便一个随机数它被假设成独立、同分布、且服从均值为 0 的高斯分布。这三条不是从数据里推出来的结论而是建模前就摆上桌面的前提后面的似然函数、最小二乘全都建立在它上面。独立性说的是样本之间互不干扰两个客户一起来贷款批多少互不影响不能因为一个人批得多另一个人就被压缩。同分布说的是所有样本来自同一套规则、同一个数据生成过程如果数据里混了不同渠道、不同时期的记录这条就不成立。高斯分布说的是浮动范围银行可能多给也可能少给但绝大多数情况下浮动不大极端值很少这正好对上正态分布中间高、两边低的形状。提示这三条假设在报告里最好单独列一页因为它们是后面所有推导的地基评审最常追问的也是「你凭什么假设高斯」。把假设写成式子就是 ε ~ N(0, σ²)代入模型得到 y 在给定 x 和 θ 时也服从均值 θᵀx、方差 σ² 的高斯分布。这一步没什么花哨技巧但它是从「建模」跨到「概率」的那道门跨过去之后参数估计就变成了概率论问题。2.4 似然函数把「哪组参数最像真的」写成连乘有了误差的概率密度就可以问一个反过来的问题手上这组已经发生的数据在哪组参数下出现的可能性最大这就是似然。单个样本在参数 θ 下出现的概率密度是 1/(√(2π)σ)·exp(-(y-θᵀx)²/(2σ²))把所有样本乘起来就得到似然函数 L(θ) ∏ P(yᵢ|xᵢ;θ)。独立假设在这里派上用场——正因为样本独立联合概率才能写成连乘。似然不是「参数的概率」参数没有分布它是一个待定的数。似然描述的是「参数取某个值时观测到这组数据的相对可能性」理解错这一句后面取对数、求极值全都会变成背公式。报告里把这句解释清楚比多写一页推导更能体现理解了模型。到这里第 2 章给出的其实是一张骨架图特征和标签是原料参数是待求量偏置负责平移误差三假设负责把问题翻译成概率语言似然函数负责给出「好」的判定标准。剩下的问题只有一个怎么把似然最大化的那个 θ 解出来。3. 求解与评估从对数似然到最小二乘再到梯度下降3.1 取对数连乘变连加的那一步似然函数是连乘直接求导几乎没法做所以第一步一定是取对数。对数函数单调递增最大化 L(θ) 和最大化 ln L(θ) 得到的是同一组参数这个等价性是整条推导链的通行证。取完对数连乘变成连加ln L(θ) Σ [ ln(1/(√(2π)σ)) - (yᵢ - θᵀxᵢ)²/(2σ²) ]拆开看第一项里没有 θ是常数对「哪组参数最好」没有任何影响可以直接扔掉第二项里 σ² 也是常数同样不影响极值点的位置。剩下的就只有 -Σ(yᵢ - θᵀxᵢ)² 这一块。最大化它等价于最小化 Σ(yᵢ - θᵀxᵢ)²——这就是最小二乘的来历。梳理下来会发现一个很容易被忽略的点最小二乘不是谁拍脑袋规定的损失函数它是「误差服从高斯」这条假设 「最大似然」这个准则推导出来的必然结果。如果误差换一种分布推出来的目标函数就不再是平方和。报告里如果只写「我们用平方误差」等于把推导链里最有价值的一环剪掉了。3.2 偏导置零正规方程与它的适用边界把目标函数写成 J(θ) ½Σ(h(xᵢ) - yᵢ)²前面乘 ½ 只是为了求导时把平方的 2 消掉不影响极值点。对每个 θⱼ 求偏导得到 Σ(h(xᵢ) - yᵢ)·xⱼ⁽ⁱ⁾令其等于 0整理成矩阵形式就是 XᵀXθ Xᵀy解出 θ (XᵀX)⁻¹Xᵀy这就是正规方程也叫最小二乘的闭式解。# 正规方程theta (X^T X)^(-1) X^T y theta np.linalg.inv(X.T X) X.T y print(theta) # [theta0, theta1, theta2]X.T是转置是矩阵乘法np.linalg.inv求逆。这段代码在样本少、特征少时一步到位但它有两个硬边界必须写进报告一是求逆的复杂度大约是特征数的三次方特征上千时基本不可用二是当特征之间存在强共线性比如工资和「月收入」几乎同一条信息时XᵀX 接近奇异求逆会给出数值上极不稳定的结果甚至直接报错。闭式解好用但不是万能钥匙。3.3 R²拟合好坏的一把尺子模型解出来了得有个刻度判断它到底好不好。最常用的评估项是 R²写法是 1 减去残差平方和与总平方和的比值R² 1 - SS_res / SS_tot。直观理解是「模型解释掉了多少波动」——SS_tot 是全部用均值预测时的误差SS_res 是模型预测后的误差两者一比就知道模型比「无脑猜均值」强了多少。R² 越接近 1 说明拟合越好等于 1 表示残差为零这在实际数据里几乎不可能出现。要注意它可以是负数模型差到比直接用均值预测还离谱时R² 就会掉到 0 以下这不是算错了而是模型真的不行。另外 R² 会随特征增多而单调不降哪怕加进去的是纯噪声所以拿它比较不同特征数的模型时得换成调整后的 R²这一点是很多报告翻车的地方。3.4 梯度下降下山三步与三种更新方式闭式解有边界就有了梯度下降。它的比喻很直白你站在山谷的某个位置目标是走到最低点。下山分三步——先找到当前最陡的下坡方向梯度再决定迈多大一步学习率最后按方向和步长更新参数。写成式子就是 θⱼ : θⱼ - α·∂J/∂θⱼ负号是因为要往梯度的反方向走。alpha 0.01 # 学习率相当于每步迈多大 epochs 1000 # 迭代轮数 theta np.zeros(X.shape[1]) for _ in range(epochs): pred X theta # 当前参数下的预测值 grad X.T (pred - y) / len(y) # 均方误差对 theta 的梯度 theta - alpha * grad # 沿负梯度方向更新grad里除以样本数是为了让梯度的量级不随数据量膨胀否则样本一多同样的学习率就会直接迈过头。alpha决定收敛快慢epochs决定最多走多少步两者要配合着调。这段代码跑完得到的 θ 和正规方程解出来的应当非常接近如果差很多先怀疑学习率而不是数据。按每次更新用多少样本梯度下降分成三种这是报告里必须讲清的一块方式每次用的样本优点代价批量梯度下降全部样本方向稳容易收敛到最优解每步都要遍历全量速度慢随机梯度下降1 个样本单步极快能跳出局部坑方向抖不一定朝收敛方向走小批量梯度下降一小批如 32/64兼顾速度与稳定工程上最常用多了一个批大小要调3.5 学习率与批大小两个最常被随手填的超参数学习率是这套方法里最玄学的一个数。设大了每一步都迈过山谷损失曲线来回震荡甚至越来越大最后发散设小了收敛慢到你以为代码卡死。稳妥的路子是从小往大试先取一个很小的值确认损失在稳定下降再逐步放大直到出现震荡就退回来一档。学习率对最终结果的影响远超很多人的预期它不是随便填个 0.01 就完事的参数。批大小常见取 32、64、128取值背后是内存和效率的账。批太小梯度噪声大训练过程抖批太大单步计算量上去了内存也吃紧而且迭代轮数内更新的次数变少。实际选择时先看显存或内存能放下多少再在一个量级内试几个值别迷信某个「标准数字」。这一节写进报告时最好附一张不同学习率下的损失曲线对比比干巴巴写「我们取了 0.01」有说服力得多。4. 逻辑回归Sigmoid 把回归值翻译成概率4.1 名字骗人它做的是分类逻辑回归名字里带着「回归」干的却是分类的活而且是经典的二分类算法。之所以还叫回归是因为它的内部结构仍然是先算一个线性组合 θᵀx只不过最后多加了一层映射把任意实数压到 0 到 1 之间当作「属于正类的概率」。算法选择的经验是先上逻辑回归再考虑复杂模型能简单就不往复杂里堆这一条在报告里值得单独强调。把线性回归的输出直接当概率用是不行的它可能算出 -3也可能算出 200都不在概率的取值范围内。所以问题的核心不是「怎么拟合一条线」而是「怎么把一个无界的分数变成有界的概率」Sigmoid 就是干这个的。4.2 Sigmoid 与预测函数的整合写法Sigmoid 的形式是 g(z) 1/(1 e⁻ᶻ)自变量取任意实数值域落在 (0,1) 开区间。它有几个性质值得记住z0 时输出正好 0.5这是天然的分类阈值z 越大越贴近 1z 越小越贴近 0它的导数有个漂亮的形式 g(z) g(z)(1 - g(z))后面推梯度时全靠这一条把式子化简开。def sigmoid(z): # z 极负时 exp(-z) 会溢出工程上通常对 z 做截断 return 1.0 / (1.0 np.exp(-z)) z np.array([-2.0, 0.0, 2.0]) print(sigmoid(z)) # [0.119 0.5 0.881]把线性组合塞进去预测函数就是 h(x) g(θᵀx) 1/(1 e^(-θᵀx))。得到的是一个概率通常以 0.5 为界切成两类。二分类的标签是 0 和 1正好可以把两种情况写成一个式子P(y|x;θ) h(x)^y · (1-h(x))^(1-y)。y 取 0 时前半部分变成 1只留下后半部分y 取 1 时后半部分变成 1只留下前半部分。这个整合写法不是炫技它是下一步写似然函数的前提。4.3 决策边界直线只是最朴素的一种当 h(x) 大于 0.5 时判为正类而 Sigmoid 在 z0 时输出大于 0.5所以分类的边界就落在 θᵀx 0 这条线上。特征只有两个时它是一条直线特征更多时是一个超平面。但这只是最朴素的情形——如果对特征做变换比如引入 x₁²、x₁x₂ 这样的高次项边界在原始特征空间里就可以是曲线甚至闭合区域。这里有个常见误解逻辑回归的决策边界可以是非线性的但模型对参数仍然是线性的。区分「对特征线性」和「对参数线性」是理解这一族模型的关键也是后面讲易错点时绕不开的一句。4.4 对数似然与参数更新梯度上升怎么改写成下降有了整合后的概率表达式似然函数就是把所有样本的概率乘起来取对数后变成 l(θ) Σ[y·ln h(x) (1-y)·ln(1-h(x))]。目标是让它越大越好所以原本用的是梯度上升。但工程上大家习惯统一成「最小化损失」于是给它加个负号定义 J(θ) -(1/m)·l(θ)任务就从上升转成了下降。求导之后会得到一个非常眼熟的结果梯度正比于 Σ(h(xᵢ) - yᵢ)·xⱼ⁽ⁱ⁾参数更新式是 θⱼ : θⱼ - α·(1/m)·Σ(h(xᵢ) - yᵢ)·xⱼ⁽ⁱ⁾。把它和线性回归的更新式并排放形式几乎一模一样唯一的区别是 h(x) 一个是线性函数、一个是 Sigmoid 之后的概率。这个「长得像」不是巧合而是广义线性模型框架下的必然报告里点出这一句能把两个算法从「两套知识」缝成「一套框架」。对比项线性回归逻辑回归任务回归预测连续值二分类输出概率预测函数θᵀxg(θᵀx)输出范围全体实数(0,1)损失来源高斯假设下的最大似然伯努利分布下的最大似然优化方向最小化平方和最小化负对数似然4.5 Softmax多分类接口二分类解决了多分类怎么办Softmax 是逻辑回归的自然推广。它对每个类别给一个线性得分 θₖᵀx然后做指数归一化P(yk|x) e^(θₖᵀx) / Σⱼ e^(θⱼᵀx)。所有类别的概率加起来等于 1取概率最大的那一类作为预测结果。类别数退化成 2 时Softmax 和 Sigmoid 是等价的所以它常被称作多分类版的逻辑回归。写报告时容易漏掉的一点是数值稳定指数运算容易上溢实际实现里要先减去每行的最大值再取指数结果不变但数值安全得多。这个细节不写不影响理解写了会显得你真的动过手。5. 易漏点五处最容易在报告里被一笔带过的地方5.1 易漏点一把「误差服从高斯」当成结论为什么漏推导链条太长写到最后只记得「最小二乘」忘了它是被高斯假设推出来的于是把假设当成了定理。怎么补在报告里明确写一句「误差服从高斯是建模假设不是数据验证的结论」再补一句「若误差换成拉普拉斯分布对应的就是最小绝对偏差而不是平方和」。能说出假设变了、目标函数跟着变才算真懂这条链。5.2 易漏点二偏置项当成可有可无的装饰为什么漏写公式时习惯从 θ1x1 开始代码里也常忘了补那一列全 1模型照样能跑出数于是没人回头检查。怎么补把「设计矩阵第一列全 1」当成固定动作跑完看一眼参数向量的长度是不是等于特征数加一。再加一句解释去掉偏置等于强制拟合平面过原点在目标值均值明显不为零的数据上会引入系统偏差。5.3 易漏点三学习率只写一个数字不写怎么试出来的为什么漏跑通了就完事损失曲线没存调参过程没记最后报告上只剩一个孤零零的 0.01。怎么补至少保留三组不同学习率的损失曲线做对比写清哪一组震荡、哪一组收敛太慢、最终为什么选中间那档。这一步做扎实比多写两页公式更能说明你理解了优化过程。5.4 易漏点四把 R² 越高当成模型越好为什么漏R² 是个很顺手的单一数字看着涨了就觉得改进有效没注意特征数也在涨。怎么补凡是增加特征后比较模型一律换成调整后的 R²同时补一个均方误差说明两者一个看解释比例、一个看绝对误差量级别只拿一个指标下结论。R² 为负的情况也要能解释那不是代码错了是模型真不如均值基线。5.5 易漏点五逻辑回归的损失函数写成平方误差为什么漏线性回归刚讲完平方误差顺手就搬过来了形式上看更新式又长得像更容易糊弄过去。怎么补回到概率来源——逻辑回归的标签服从伯努利分布最大似然推出来的是交叉熵形式的负对数似然不是平方和。把两个损失函数的来源并排写一次再指出「更新式长得像是因为它们同属广义线性模型」这个坑就填上了。6. 复习清单把这份报告压缩成一张可自测的表复习到这个阶段最有效的动作不是再读一遍推导而是拿一张空表自测能不能在不看笔记的情况下把每一格的「是什么」和「为什么」都说出来。下面这张表可以直接当自测卡用说不上来的格子就是你要回头补的章节。知识点要能说清的核心对应位置特征、标签、参数谁是给定的谁是学出来的2.1偏置项去掉它等于强制过原点2.2误差三假设独立、同分布、高斯分别对应什么现实含义2.3似然函数它描述的是数据的可能性不是参数的概率2.4取对数单调性保证极值点不变连乘变连加3.1最小二乘高斯假设加最大似然推出来的不是拍脑袋定的3.1正规方程闭式解的形式与两个失效边界3.2R²可以为负特征变多会虚高3.3三种梯度下降批量稳、随机快、小批量实用3.4学习率与批大小大震荡小慢批大小看内存和效率3.5Sigmoid值域 (0,1)导数 g(1-g)4.2整合写法h^y·(1-h)^(1-y) 怎么合并两种情况4.2决策边界对参数线性对特征可以非线性4.3参数更新和线性回归同形不同 h4.4Softmax多分类归一化二分类退化为 Sigmoid4.5自测时建议按「公式 → 一句话解释 → 一个反例」三层走。比如正规方程公式是 (XᵀX)⁻¹Xᵀy一句话是「让残差平方和最小的闭式解」反例是「特征强共线时求逆不稳定」。三层都能过才算真掌握只能背出公式的考场上换个问法就会卡住。还有一个具体的查漏技巧把整份报告的公式全部遮住只留文字描述看能不能反过来把公式默写出来。默不出来的地方往往不是记性问题而是那一步的逻辑你没真的走通。反过来也可以只看公式用大白话讲给一个没学过的人听讲不清的地方就是理解断层。我当时整理这份笔记最大的教训是太早开始背梯度下降的更新式结果被问「为什么负号」时愣了半天。从那以后我每次复习这类算法都强制走一遍「假设 → 似然 → 取对数 → 求导 → 更新式」的完整链条哪怕慢一点也不再单独背结论。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?