线性回归完全指南:从公式到实战,大数据工程师的机器学习第一课
第1篇:线性回归 — 机器学习的"Hello World"
目标读者:有编程/数据基础,机器学习零基础
阅读时间:约 15 分钟
前置知识:无
1. 机器学习到底在干什么?
用一句话说:机器学习就是让计算机从数据中自动找出规律,然后用这个规律做预测。
举个例子:你是券商的数据工程师,老板说"能不能根据用户的账户余额、交易频率、持仓品种,预测这个用户下个月会续费多少钱?"
这就是一个典型的预测问题。而线性回归,就是解决这类预测问题最简单、最经典的模型。
数据 → 找规律 → 预测
你的数据:
用户A:余额10万 + 月交易20次 + 持仓3只股票 → 月续费 500 元
用户B:余额50万 + 月交易50次 + 持仓8只股票 → 月续费 2000 元
用户C:余额5万 + 月交易5次 + 持仓1只股票 → 月续费 200 元
规律(肉眼可见):余额越高、交易越频繁、持仓越多 → 续费越高
机器学习的任务就是把这种规律量化出来,变成一个公式。
2. 模型长什么样?
线性回归的模型非常简单,就一个公式:
ŷ = w₁·x₁ + w₂·x₂ + w₃·x₃ + b
这是什么东西?我们一个一个来看。
2.1 特征 x:模型的"输入"
x 就是你的数据。在上面的券商例子中:
- x₁ = 账户余额(10万、50万、5万…)
- x₂ = 月交易次数(20次、50次、5次…)
- x₃ = 持仓数量(3只、8只、1只…)
特征,本质上就是数据仓库里的字段。你从 Hive 表里 SELECT 出来的每一列,都可能成为模型的一个特征。
2.2 权重 W:每个特征的"重要性"
权重 W 回答的问题是:这个特征对预测结果影响有多大?
如果 w₁ = 0.01:
余额每多1万元,续费多 0.01 × 10000 = 100 元
如果 w₂ = 5:
每月多交易1次,续费多 5 元
W 是模型自己学出来的,不需要你手工设置——这正是机器学习的核心。
数仓工程师视角: W 就像你做归因分析时,算出"营销渠道贡献 60%,产品品类贡献 30%,地区贡献 10%",只不过机器学习是自动算的。
2.3 偏差 b:模型的"保底输出"
b 的意思是:当所有特征都为零时,模型的基础输出是多少。
如果 b = 100:
一个新用户,余额 0,交易 0,持仓 0
模型也会预测他续费 100 元(基础保底)
b 的作用是给模型一个"起点",不让模型被特征完全绑架。
2.4 ŷ:模型的"预测值"
ŷ 读作 “y-hat”,就是模型的输出——它预测的结果。在我们的例子中就是预测的月续费金额。
3. 怎么判断模型好不好? — 损失函数
模型一开始的 W 和 b 是随机的,预测肯定不准。我们需要一个标准来衡量"有多不准"。这个标准就是损失函数(Loss Function)。
最常用的两种损失函数是 MSE(均方误差) 和 MAE(平均绝对误差),它们看似差不多,但侧重点完全不同。
3.1 MSE(均方误差)— 严惩大错误
MSE = 所有样本的(预测值 - 真实值)² 的平均值
MSE 的核心特点:对大误差给予"平方级"的惩罚。
券商案例:
预测用户持仓 100万,实际 80万 → 误差 20万 → 平方 = 400
预测用户持仓 50万,实际 48万 → 误差 2万 → 平方 = 4
误差只差 10 倍,但惩罚差了 100 倍!
MSE 会逼着模型优先解决那些"错得离谱"的样本
MSE 的侧重点:
- 让整体数据的离散度更低,所有预测都尽量靠近真实值
- 对离群点(异常值)非常敏感——因为平方放大了它们的影响
- 结果:模型会努力让所有样本都"差不多准",但可能被少数离群点带偏
3.2 MAE(平均绝对误差)— 一视同仁
MAE = 所有样本的 |预测值 - 真实值| 的平均值
MAE 的核心特点:每个误差一视同仁,不管大误差还是小误差,惩罚都是线性的。
同样的券商案例:
预测用户持仓 100万,实际 80万 → 误差 20万 → 绝对值 = 20
预测用户持仓 50万,实际 48万 → 误差 2万 → 绝对值 = 2
误差差 10 倍,惩罚也只差 10 倍——公平对待
MAE 的侧重点:
- 允许模型离离群点远一点,但让大多数普通样本预测得更准
- 对离群点不敏感——不会被少数异常值绑架
- 结果:模型可能对少数离群点预测较差,但对大多数样本表现更好
3.3 一张图看懂区别
假设有 5 个样本,真实值都是 100:
样本1: 预测 98 → 误差 2
样本2: 预测 99 → 误差 1
样本3: 预测 101 → 误差 1
样本4: 预测 102 → 误差 2
样本5: 预测 150 → 误差 50(离群点)
MSE = (4 + 1 + 1 + 4 + 2500) / 5 = 502
MAE = (2 + 1 + 1 + 2 + 50) / 5 = 11.2
现在把离群点从 150 改成 120(误差从 50 降到 20):
MSE = (4 + 1 + 1 + 4 + 400) / 5 = 82 ← 下降了 84%!
MAE = (2 + 1 + 1 + 2 + 20) / 5 = 5.2 ← 只下降了 54%
结论:MSE 对离群点的变化反应剧烈,MAE 反应温和
3.4 什么时候用哪个?
| 场景 | 推荐用 | 原因 |
|---|---|---|
| 数据干净,离群点很少 | MSE | 让所有样本都尽量准,数学性质好(可导) |
| 数据有噪音/离群点 | MAE | 不被少数异常值绑架,关注大多数样本 |
| 需要梯度下降优化 | MSE | MSE 处处可导,MAE 在零点不可导 |
| 模型评估报告 | 两个都看 | MSE 看整体离散度,MAE 看典型误差 |
券商实战建议:
预测用户续费金额:
- 如果数据经过清洗,离群点已剔除 → 用 MSE
- 如果数据还有异常大额交易没处理 → 用 MAE 或先做异常值检测
预测用户持仓(可能有大户):
- 大户的误差本身就大,用 MSE 会逼模型过度关注大户
- 用 MAE 更公平,让模型对普通用户也负责
3.5 为什么线性回归默认用 MSE?
两个原因:
- 数学性质好:MSE 处处可导,梯度下降可以顺畅计算;MAE 在误差为零的点不可导,优化起来麻烦。
- 统计意义清晰:最小化 MSE 等价于让预测值逼近真实值的"期望",有明确的概率解释。
4. 怎么让模型变好? — 梯度下降
现在我们知道了模型有多差(MSE),下一步就是让模型变好。方法就是梯度下降法(Gradient Descent)。
4.1 直觉理解
想象你蒙着眼睛站在一座山上,目标是走到山谷最低点。你只能感受脚下的坡度:
- 脚感往下斜 → 往那个方向走一步
- 脚感往上斜 → 反方向走一步
- 每走一步重新感受坡度
- 反复走,直到感觉不到坡度(到了最低点)
这就是梯度下降的全部逻辑。
4.2 四步循环
第1步:用当前的 W、b 算出所有预测值 ŷ
第2步:用 ŷ 和真实值 y,算出 MSE(损失)
第3步:求 MSE 对 W 的斜率(梯度)—— 告诉你哪个方向让损失变大
第4步:往斜率的反方向走一小步,更新 W 和 b
w_new = w_old - 学习率 × 斜率
这个四步循环重复 N 次,直到损失降到满意为止——这就是"训练"。
4.3 学习率:步子迈多大?
学习率(Learning Rate,记作 α)决定了每次更新的步长。
| 学习率太大 | 学习率太小 |
|---|---|
| 步长太大,可能直接跨过最低点 | 步长太小,收敛太慢 |
| 损失曲线剧烈震荡,甚至发散 | 需要更多轮次才能到达最低点 |
类比:
就像你用 Hive 调参数,
mapreduce.map.memory.mb 设太大浪费资源,设太小跑不动。
学习率就是模型训练中的"资源配置参数"。
4.4 更新公式的含义
新参数 = 旧参数 - 学习率 × 梯度
拆解每个部分:
┌──────────┬────────────────────────────────┐
│ 旧参数 │ 你当前站在哪里 │
│ 学习率 │ 这步走多远 │
│ 梯度 │ 脚下坡度(正 = 上坡,负 = 下坡) │
└──────────┴────────────────────────────────┘
斜率为正 → 当前参数偏大 → 减去一点 → 往左走
斜率为负 → 当前参数偏小 → 加上一点 → 往右走
5. 训练的"调参" — 超参数
训练前你需要设置几个关键参数,这些叫超参数(Hyperparameters):
| 超参数 | 是什么 | 调大效果 | 调小效果 |
|---|---|---|---|
| 学习率 | 每步的步长 | 收敛快但可能震荡 | 收敛慢但更稳定 |
| 批次大小 | 每批用多少样本算梯度 | 算得快但梯度不准 | 梯度准但算得慢 |
| 周期数 | 完整遍历数据多少遍 | 可能过拟合(死记硬背) | 可能欠拟合(没学够) |
大数据工程师视角: 批次大小很像 Spark 的 partition 数量。批次越大,一次处理的数据越多(像大 partition),但梯度估计可能不够精细。mini-batch 梯度下降本质上就是分布式计算中的分批处理思想。
6. 噪音 — 学不会的那部分
就算你把模型训练到极致,损失也不会降到零。为什么?
因为数据中有噪音(Noise)——真实标签中天然存在的、无法用特征解释的随机波动。
券商例子:
用户A 和 用户B 的特征几乎一样(余额、交易量、持仓都差不多),
但 A 突然因为个人原因(买房急需用钱)大额赎回,
这个行为跟你的特征(余额、交易量、持仓)没有任何关系。
这就是噪音——模型无法从特征中学会的随机性。
数据治理视角: 你从 ODS 层拿到的原始数据天然有噪音。数据治理中的异常值检测,本质上就是识别和降低噪音。噪音越低,模型能学到的信号就越多。
7. 小结
本篇你学到了:
┌─────────────────────────────────────┐
│ │
│ 线性回归模型:ŷ = W·X + b │
│ │
│ W = 特征的重要性(模型自己学) │
│ b = 基础输出水平(模型自己学) │
│ │
│ 训练过程: │
│ ① 用当前参数算出预测值 │
│ ② 用 MSE 衡量预测有多差 │
│ ③ 用梯度下降更新参数 │
│ ④ 重复直到满意 │
│ │
│ 关键概念: │
│ 损失函数 = 衡量"有多差" │
│ 梯度下降 = 让模型"变好"的方法 │
│ 学习率 = 每次"进步多少" │
│ 噪音 = 永远学不会的部分 │
│ │
└─────────────────────────────────────┘
一个让大数据工程师会心一笑的类比
| 机器学习概念 | 你熟悉的大数据概念 |
|---|---|
| 特征 X | 数据仓库的字段/列 |
| 权重 W | 归因分析中的贡献系数 |
| 预测 ŷ | SQL 聚合函数算出的指标 |
| 损失 MSE | 数据一致性校验的偏差 |
| 梯度下降 | Spark MLlib 迭代计算 |
| 批次处理 | 微批处理 / partition 分批 |
| 噪音 | 数据质量中的噪声数据 |
下一篇预告: 线性回归预测的是连续数值(比如续费金额)。但如果你的任务是「判断用户会不会流失」——输出是「会」或「不会」,那该怎么办?这就需要逻辑回归登场了。
上一篇:无(这是第1篇)
下一篇:第2篇:逻辑回归 — 从数值预测到概率判断
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)