回归模型知识点总结
回归模型知识点总结 — 上海二手房数据分析项目
目录
- 一、项目概览
- 二、什么是回归模型
- 三、R²(决定系数)
- 四、普通线性回归的过拟合原因
- 五、矩阵接近奇异详解
- 六、Ridge 为什么更好
一、项目概览
数据来源:上海链家二手房数据.xlsx(898 条 → 清洗后 669 条)
特征字段:区域(19类)、朝向(8类)、楼层位置(3类)、卧室数、客厅数、面积、总楼层、建造年份
目标变量:总价(万元)
建模流程:
数据清洗 → EDA → 5种模型对比 → 稳定性验证
5种回归模型对比结果:
| 模型 | R² | 特点 |
|---|---|---|
| LinearRegression | 0.8335 | Baseline,无正则化 |
| Ridge(岭回归) | 0.8424 | 最优,L2惩罚处理共线性 |
| Lasso | 0.8380 | L1惩罚自动特征选择 |
| RandomForest | ~0.82 | 树模型,非线性 |
| GradientBoosting | ~0.80 | 集成学习 |
稳定性测试结果(普通线性回归,50次随机划分):
R² 均值: 0.7178 ± 0.0765
波动范围约 0.50–0.80
二、什么是回归模型
回归模型 = “猜一个连续数字”
输入一堆特征,输出一个连续数值。
数学形式(线性回归):
总价 = β₀ + β₁×区域_黄浦 + β₂×面积 + β₃×卧室数 + β₄×房龄 + …
- 每个特征乘一个权重 β
- 所有权重加起来 = 预测结果
- β 越大说明这个特征越重要
实际学到的结果:
区域=黄浦 → 权重 +很大(正影响)
区域=崇明 → 权重 -很大(负影响)
面积 → 权重 +中等
卧室数 → 权重 +小
房龄 → 权重 -小
回归 vs 分类:
| 回归 | 分类 | |
|---|---|---|
| 输出 | 连续数字 | 类别 |
| 例子 | 房价 800万 | 房子"贵/不贵" |
| 问题 | “多少钱?” | “属于哪类?” |
| 评估指标 | R² 越接近1越好 | 准确率越高越好 |
三、R²(决定系数 / Coefficient of Determination)
定义:模型能解释目标变量百分之多少的波动。
公式(通俗版):
R² = 1 - (模型预测的误差平方和) / (直接猜平均值的误差平方和)
理解:
R² = 1 → 完美拟合,所有预测点全落在线上
R² = 0 → 跟直接猜平均值一样烂
R² = 0.7178 → 房价 71.78% 的波动可以被这些特征解释
等级参考:
| R² | 含义 |
|---|---|
| 0.84 | 模型解释了84%的房价变化 |
| 0.72 | 模型解释了72%的房价变化 |
| 0.5 | 模型解释力只有一半 |
| 0.0 | 模型毫无解释力 |
四、普通线性回归的过拟合原因(为什么只有 R²=0.72)
核心问题:普通线性回归(OLS,普通最小二乘法)没有正则化,在特征相关时不稳定。
-
公式:
β̂ = (XᵀX)⁻¹ Xᵀ y关键在 (XᵀX)⁻¹ —— 矩阵求逆这一步。
-
数据中的共线性问题:
- 区域之间(黄浦/徐汇/长宁)在同个楼市中共同涨跌
- 面积越大 → 卧室数通常越多(r≈0.6~0.7)
- 区域越好 → 单价越高 → 同等面积总价更高
-
过拟合的具体机制:
当特征高度相关时,(XᵀX) 中对应行列几乎成比例,矩阵"接近奇异"。
求逆后逆矩阵中的数字异常大。
训练集的微小随机波动 × 逆矩阵的超大数字 = 系数剧烈抖动。实际表现:
划分A: β₁=50, β₂=30 → 正常预测
划分B: β₁=800, β₂=-720 → 绕大圈但也能预测两个模型在各自训练集上都行,但系数完全不同——这就是过拟合。
换测试集时,只有真正学到规律的模型才能泛化。证据——稳定性测试直接印证:
R² 波动范围约 0.50–0.80 ← 系数在大幅波动
R² 均值 0.7178 ± 0.0765 ← 标准差很大 -
一句话总结:
普通线性回归的过拟合 = 特征多且相关 → (XᵀX)⁻¹ 放大微小噪声 → 系数剧烈波动
→ 换批数据就掉分。
五、矩阵接近奇异详解
什么是奇异矩阵?
- 奇异矩阵 = 行列式为 0,无法求逆
- 接近奇异 = 行列式接近 0,虽然能求逆,但逆矩阵的数字异常大
为什么特征相关会导致奇异?
用面积和房间数举例:
面积 ≈ 40 × 房间数 - 20 (几乎成线性关系)
XᵀX 矩阵:
| 面积 | 房间数 | |
|---|---|---|
| 面积 | 1000 | 800 |
| 房间数 | 800 | 650 |
行列式 = 1000×650 - 800×800 = 10000 (趋近于 0)
逆矩阵:
| 面积 | 房间数 | |
|---|---|---|
| 面积 | 65 | -80 |
| 房间数 | -80 | 100 |
数字很大(65、80、100),远超原始数据的量级。
后果:
逆矩阵 × 训练集的随机波动 → 系数被剧烈放大
换一批数据就得到完全不同的系数
直观类比:
想分清楚"糖贡献了多少甜?奶贡献了多少甜?"
但数据中糖多的奶也多,糖少的奶也少——永远一起变化,没法独立区分。
这就是"信息重叠"——无法独立衡量每个特征的作用。
Ridge 怎么解决?
Ridge 公式:β̂ = (XᵀX + αI)⁻¹ Xᵀ y
多了 αI,在矩阵对角线上加一个小常数:
| 面积 | 房间数 | |
|---|---|---|
| 面积 | 1000+1 | 800 |
| 房间数 | 800 | 650+1 |
行列式 = 1001×651 - 800×800 = 11651(大一截,不再接近 0)
逆矩阵数字变小,系数不再乱跳。
六、Ridge 为什么更好
Ridge(岭回归)= OLS + L2 惩罚
公式:min ||Xβ - y||² + α||β||²
- L2 惩罚 = 所有系数的平方和 × α
- α=0 → 退化为普通线性回归
- α越大 → 系数被强制缩小
三个好处:
- 解决共线性:(XᵀX + αI) 的行列式不再接近 0,求逆稳定
- 防止过拟合:系数被抑制,不会因为数据微小变化而狂跳
- 保留所有特征:和 Lasso 不同,Ridge 不会把系数压到 0
直观类比:
普通线性回归像没有减震的车——路况好跑得不错(R²≈0.80+),
换个路况就颠到不行(R²≈0.50)。
Ridge 的 L2 惩罚相当于加了减震器,不管数据怎么切都稳在 R²≈0.84。
总结:线性模型对比表
| 模型 | 损失函数 | 做什么 | 适用场景 |
|---|---|---|---|
| LinearRegression | OLS(无惩罚) | 纯拟合 | 特征少、样本多、无共线性 |
| Ridge | OLS + L2 | 收缩系数 | 特征较多、有共线性 |
| Lasso | OLS + L1 | 特征选择 | 特征极多、需要降维 |
| LogisticRegression | 交叉熵 | 分类 | 二分类/多分类 |
上海二手房项目的关键设计
- 目标取对数:Y_log = log(Y) 降低总价右偏分布影响
- 数值特征标准化:StandardScaler 让卧室数、面积等在正则化模型中尺度一致
- One-Hot 编码:区域(19类)、朝向(8类)、楼层位置(3类)转为哑变量
- 房龄特征:房龄 = 2024 - 建造年份,替代原始建造年份更直观
- 对数还原:预测后 exp(y_pred_log) 还原为万元