本章学习目标:
- 理解回归的本质:预测一个连续的数值
- 掌握线性回归的原理(知道"找一条最合适的线"就够了)
- 了解决策树回归和随机森林回归的基本思想
- 掌握回归模型的评估指标(MSE、RMSE、MAE、R²)
- 核心能力:知道什么时候用回归、如何评估回归模型好坏
一、回归是什么?
1.1 回归的定义
回归 是一种监督学习算法,用于预测连续数值。
| 对比维度 | 回归 | 分类 |
|---|---|---|
| 预测输出 | 数字(有大小、可比较) | 类别(标签、无大小) |
| 例子 | 价格、温度、销量 | 是否流失、猫/狗 |
| 输出形式 | "3500元" | "是" 或 "否" |
1.2 回归能解决什么问题?
| 业务场景 | 回归应用 | 价值 |
|---|---|---|
| 二手车平台 | 预测车辆成交价 | 合理定价、避免亏损 |
| 电商 | 预测商品销量 | 备货决策、仓储优化 |
| 房地产 | 预测房价 | 评估房产价值 |
| 金融 | 预测股票价格 | 投资决策 |
| 人力 | 预测员工绩效 | 人才管理 |
1.3 二手车价格预测 ------ 回归问题
在二手车数据集中,我们的目标是:根据车辆的特征(车龄、里程、品牌等),预测一个具体的价格。
输入(特征) 输出(标签)
车龄 3年 →
里程 5万公里 → 模型 → 价格 = 65,000元
品牌 丰田 →
功率 120马力 →
这显然是一个回归问题。
1.4 为什么叫"回归"?
这个名称源于19世纪英国科学家高尔顿的研究。他发现:
"高个子的父亲,儿子身高往往会比父亲矮一些(向平均身高回归)"
这就是"回归"一词的由来------向均值"回归"。虽然现代回归算法的应用远不止于此,但这个名字一直沿用至今。
二、线性回归
2.1 什么是线性?
线性指的是两个变量之间的关系可以用一条直线来描述。
| 关系类型 | 特征 | 例子 |
|---|---|---|
| 线性 | 图中点大致在一条直线附近 | 车龄 ↑ → 价格 ↓(大致均匀下降) |
| 非线性 | 图中点形成曲线 | 学习时间与成绩(增长先快后慢) |
2.2 线性回归的核心思想
一句话概括:找到一条最合适的直线,让这条线能够最好地"穿过"所有的数据点。
数学形式 :价格 = a × 车龄 + b × 里程 + c × 功率 + ... + 常数
a、b、c叫做系数(coefficients)- 模型的目标就是找到最优的系数
2.3 线性回归如何工作?
单变量线性回归(只有一个特征):
价格
↑
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
│ ╱
└────────────────────────→ 车龄
每个点是一辆车
直线是模型预测
找到最佳直线:模型会计算每条候选直线的"总误差",选择误差最小的那条。
实际关系的假设:
- 车龄每增加1年,价格下降X元(线性关系)
- 里程每增加1万公里,价格下降Y元
- 功率每增加10马力,价格上涨Z元
2.4 线性回归的优缺点
| 优点 | 缺点 |
|---|---|
| 简单易懂,结果可解释 | 只能学习线性关系 |
| 计算速度快 | 对异常值敏感 |
| 不容易过拟合 | 需要特征独立(无多重共线性) |
| 适合作为基线模型 | 真实关系往往不是完全线性的 |
2.5 什么时候用线性回归?
| 适合 | 不适合 |
|---|---|
| 特征与目标大致呈线性关系 | 存在明显的非线性关系(如U型) |
| 需要可解释性 | 特征之间高度相关 |
| 数据量适中,异常值少 | 存在大量异常值 |
三、决策树回归
3.1 为什么需要决策树?
线性回归能做很多事情,但它有一个大问题:它假设变量之间的关系是线性的。
但现实世界往往是非线性的:
| 场景 | 非线性关系 | 线性回归的局限 |
|---|---|---|
| 车龄 | 5年内贬值快,5年后贬值慢 | 直线无法准确描述这个曲线 |
| 收入 | 低收入时消费少,中等收入消费多,高收入消费比例下降 | 需要更复杂的曲线 |
决策树就是用来解决这个问题的。
3.2 决策树的核心思想
一句话概括:把数据一层一层地"切分",每一层根据一个特征的条件(如"车龄是否大于5年")分成两个更纯净的子集,直到每个子集里的价格非常接近。
3.3 决策树预测二手车价格
所有车辆
│
┌───────────┴───────────┐
│ 车龄 ≤ 3年? │
│ │
是 ↓ ↓ 否
┌─────┐ ┌─────┐
│3年内│ │3年以上│
└──┬──┘ └──┬──┘
│ │
┌─────┴─────┐ ┌─────┴─────┐
│里程≤4万公里?│ │品牌是否为奔驰?│
│ │ │ │
是 ↓ ↓ 否 是 ↓ ↓ 否
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│价格 │ │价格 │ │价格 │ │价格 │
│80000│ │55000│ │45000│ │25000│
└─────┘ └─────┘ └─────┘ └─────┘
决策树的预测结果:每个"叶子"上的值就是该组车辆的价格预测值。
3.4 决策树回归的优缺点
| 优点 | 缺点 |
|---|---|
| 可以学习复杂的非线性关系 | 容易过拟合(树太深) |
| 不需要数据缩放 | 对数据微小变化敏感 |
| 可解释性强(业务可理解) | 不稳定(方差大) |
| 自动处理特征交互 | 预测可能不平滑(阶梯状) |
3.5 决策树的可视化价值
决策树的一大优势是可以画出来:
[车龄 ≤ 3年]
/ \
[是] [否]
| |
[里程 ≤ 4万] [品牌 ∈ 奔驰?]
/ \ / \
80000 55000 45000 25000
业务人员可以直接看懂规则。
3.6 防止过拟合:限制树深度
过拟合:模型把训练数据里的"噪音"也当成了规律。
限制方法:
| 参数 | 作用 | 经验值 |
|---|---|---|
| max_depth | 限制最大深度 | 5-10层 |
| min_samples_leaf | 叶子最少样本数 | 5-50 |
四、随机森林回归
4.1 为什么需要随机森林?
决策树虽然好,但它有一个致命问题:不稳定。
假设你在同一个数据集上训练10棵决策树,可能会得到10个不同的树结构。这就是高方差问题。
类比:一个将军可能判断失误,但让100个将军投票,结果更可靠。
4.2 随机森林的核心思想
一句话概括:建造多棵决策树,每棵树只看一部分数据和一部分特征,最后让所有树投票/平均。
三步核心:
| 步骤 | 说明 |
|---|---|
| 1. Bootstrap采样 | 每棵树随机抽取不同样本(有放回) |
| 2. 随机特征 | 每棵树只用部分特征 |
| 3. 集成投票 | 所有树的结果取平均(回归)或投票(分类) |
4.3 为什么随机森林效果更好?
| 机制 | 解决的问题 | 效果 |
|---|---|---|
| 多棵树平均 | 降低方差 | 预测更稳定 |
| 随机特征 | 避免个别强特征主导 | 泛化能力更强 |
| 集成学习 | 减少过拟合 | 对新数据更好 |
4.4 随机森林的优缺点
| 优点 | 缺点 |
|---|---|
| 预测精度高 | 模型可解释性差(黑箱) |
| 不容易过拟合 | 训练慢(需要建很多树) |
| 能输出特征重要性 | 内存占用大 |
| 对异常值不敏感 | 预测速度慢 |
| 自动处理非线性 | --- |
4.5 特征重要性
随机森林可以告诉你:"哪个特征对预测贡献最大?"
python
特征重要性排序(二手车示例):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
车龄 ████████████████████████████████████ (0.45)
里程 ██████████████████████████████ (0.38)
品牌 ██████████████████████ (0.28)
功率 ██████████████████ (0.22)
变速箱 ██████████ (0.12)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
业务价值:
- 知道哪些因素最重要
- 可以删掉不重要的特征
- 向业务方解释模型
五、模型评估指标
5.1 核心指标总览
| 指标 | 全称 | 含义 | 越小越好 |
|---|---|---|---|
| MSE | 均方误差 | 误差平方的平均值 | ✅ |
| RMSE | 均方根误差 | MSE的开方,与y同单位 | ✅ |
| MAE | 平均绝对误差 | 误差绝对值的平均值 | ✅ |
| R² | 决定系数 | 模型解释了多少方差 | ❌(越大越好) |
5.2 直观理解:预测误差
假设你有3辆车的真实价格和预测价格:
| 车辆 | 真实价格 | 预测价格 | 误差 | 误差绝对值 | 误差平方 |
|---|---|---|---|---|---|
| 车A | 10,000 | 9,000 | -1,000 | 1,000 | 1,000,000 |
| 车B | 20,000 | 22,000 | +2,000 | 2,000 | 4,000,000 |
| 车C | 15,000 | 15,000 | 0 | 0 | 0 |
| 合计 | 3,000 | 5,000,000 |
5.3 MAE ------ 平均绝对误差
MAE = 平均 |真实价格 - 预测价格|
MAE = (1000 + 2000 + 0) / 3 = 1000元
含义:平均预测偏差约1000元。
优点:直观易懂,与价格单位一致。
缺点:对大小误差一视同仁。
5.4 MSE 和 RMSE ------ 均方误差与均方根误差
MSE = 平均 (误差²) = 5,000,000 / 3 ≈ 1,666,667
RMSE = √MSE = √1,666,667 ≈ 1,291元
RMSE与MAE的区别:
- MAE:平均误差 1000元
- RMSE:平均误差 1291元
为什么RMSE更大?因为平方放大了大误差(2000² = 4,000,000)。
业务含义 :如果你对大误差更在意,优先看RMSE;如果所有误差同等对待,看MAE。
5.5 R² ------ 决定系数
R²:模型解释了多少数据波动?
| R² 值 | 含义 |
|---|---|
| 0 | 模型跟瞎猜差不多 |
| 0.5 | 解释了50%的波动 |
| 0.8 | 解释了80%的波动 |
| 1.0 | 完美预测(几乎不可能) |
例子:
- 用"车龄"预测价格,R² = 0.37(车龄可以解释37%的价格波动)
- 用"车龄+里程+品牌"预测,R² = 0.65(增加了更多信息)
注意:业务上R²达到0.7-0.8就算不错了。自然现象(如身高预测体重)很难超过0.9。
5.6 如何选择评估指标
| 场景 | 推荐指标 | 理由 |
|---|---|---|
| 向业务汇报 | MAE 或 RMSE | 与价格单位一致,易懂 |
| 模型对比调优 | RMSE 或 R² | 对大误差更敏感 |
| 学术论文 | R² | 标准化,可比 |
| 预算敏感场景 | RMSE | 大误差代价大 |
六、回归算法对比总结
| 对比维度 | 线性回归 | 决策树 | 随机森林 |
|---|---|---|---|
| 核心思想 | 找一条直线 | 层层切分数据 | 多棵树投票平均 |
| 可解释性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| 预测精度 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 训练速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| 过拟合风险 | 低 | 高(需剪枝) | 低 |
| 是否需要缩放 | 是 | 否 | 否 |
| 非线性处理 | 否 | 是 | 是 |
| 异常值敏感 | 高 | 中 | 低 |
如何选择?
| 你的需求 | 推荐算法 |
|---|---|
| 第一次预测,快速建立基线 | 线性回归 |
| 业务需要解释"为什么" | 线性回归 或 决策树 |
| 追求预测精度,不在乎解释 | 随机森林 |
| 数据量小(<1000条) | 线性回归 或 决策树(控制深度) |
| 数据量大(>10万条) | 随机森林 |
七、二手车价格预测实战预览
7.1 数据准备
- 特征:车龄、里程、功率、品牌编码、变速箱、燃油类型
- 标签:价格
7.2 模型训练
| 步骤 | 内容 |
|---|---|
| 1. 划分数据 | 训练集 80%,测试集 20% |
| 2. 训练线性回归 | 作为基线 |
| 3. 训练决策树 | 调整 max_depth |
| 4. 训练随机森林 | 调整 n_estimators |
7.3 模型评估对比
| 模型 | RMSE(元) | R² | 解读 |
|---|---|---|---|
| 线性回归 | 8,500 | 0.42 | 只能解释42%的波动 |
| 决策树 | 6,800 | 0.55 | 比线性回归好 |
| 随机森林 | 5,200 | 0.68 | 最好,解释68%的波动 |
7.4 特征重要性(随机森林输出)
| 特征 | 重要性 | 解读 |
|---|---|---|
| 车龄 | 0.38 | 最重要 |
| 里程 | 0.25 | 第二重要 |
| 品牌 | 0.18 | 品牌差异明显 |
| 功率 | 0.10 | 有一定影响 |
| 变速箱 | 0.06 | 有影响但较小 |
| 燃油类型 | 0.03 | 影响较小 |
八、如何向AI描述回归建模需求
| 你的需求 | 你应该这样告诉AI |
|---|---|
| 训练模型 | "用随机森林训练一个二手车价格预测模型" |
| 评估模型 | "计算模型的MAE、RMSE和R²,告诉我模型表现如何" |
| 特征重要性 | "输出特征重要性排序,哪些特征对价格预测最重要" |
| 预测新数据 | "用训练好的模型预测这批新车的价格" |
| 对比模型 | "同时训练线性回归、决策树、随机森林,对比它们的RMSE和R²" |
九、本章总结
回归核心概念速记
| 概念 | 一句话 |
|---|---|
| 回归 | 预测连续数值 |
| 线性回归 | 找一条最合适的直线 |
| 决策树回归 | 层层切分数据 |
| 随机森林 | 多棵树投票平均 |
| MAE | 平均误差多少元 |
| RMSE | 大误差惩罚更重 |
| R² | 模型解释了多少波动 |
算法选择速记
| 场景 | 选什么 |
|---|---|
| 快速基线 | 线性回归 |
| 要解释 | 线性回归 或 决策树 |
| 要精度 | 随机森林 |
评估指标速记
| 指标 | 问的问题 |
|---|---|
| MAE/RMSE | "平均差多少钱?" |
| R² | "模型解释了多少?" |
核心心法
"回归模型的终极问题不是'用哪个算法',而是'你的预测准不准'。选一个基线模型,然后不断迭代优化。"
十、思考题
-
线性回归假设特征与目标之间是线性关系。在二手车价格预测中,哪些特征可能与价格呈非线性关系?为什么?
-
如果决策树的深度设得太大(如max_depth=50),会发生什么?设得太小(如max_depth=2)呢?
-
随机森林为什么比单棵决策树更稳定?用"集体智慧"的思路解释。
-
假设你的模型RMSE=2000元,MAE=1500元。这说明什么?什么时候RMSE会比MAE大很多?
-
特征重要性显示"车龄"最重要。这个结果对业务方有什么价值?可以指导什么决策?
下一节预告:7.3 分类 ------ 预测一个类别 ------ 如果问题是"这个客户会流失吗?"而不是"价格是多少?",该怎么建模?