多元线性回归 (Multiple Linear Regression)
1. 从一元到多元
2. 损失函数 (Loss Function)
使用均方误差 (MSE) 作为损失函数,衡量所有样本预测值与真实值差值的平方和的平均值:
- 目标:找到使 最小的 和 。
3. 求解方法
3.1 正规方程(解析解 Normal Equation)
若将偏置项 并入参数向量,令 3(在特征矩阵前加一列全为1的列),令 ,则可以直接通过矩阵运算求得最优解:
3.2 梯度下降(迭代解 Gradient Descent)
4. 核心评估指标:为什么需要 Adjusted ?
在多元回归中,如果我们不断加入新的特征,即使是毫无关系的垃圾特征(比如预测房价时加入了“房主抛硬币的结果”),普通的 也只会增加或保持不变,这会带来虚假的“拟合变好”的错觉。
-
校正决定系数 (Adjusted ) 引入了对特征数量的惩罚项:
(其中 是样本量, 是特征数量)
-
作用:只有当新加入的特征对模型的提升大于纯概率带来的提升时,Adjusted 才会增加。因此,在多元回归中,必须参考 Adjusted 而不仅是 。
5. 线性回归的四大基本假设 (LINE)
进行严谨的多元回归分析时,数据需要满足以下假设:
6. 注意事项与常见问题排查
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 多重共线性 (特征间高度相关,如“面积”与“卧室数”) | 模型权重方差大、极不稳定,甚至出现符号与常识相反。 | 1. 采用岭回归 (L2 正则化) 2. 删除冗余特征 (如用 PCA 降维) |
| 特征量纲不一 (如“面积”是 100,“房龄”是 5) | 梯度下降呈“之字形”震荡,收敛极慢。 | 对特征进行 归一化 (Min-Max) 或 标准化 (Z-score) |
| 非线性关系 (实际关系是曲线) | 散点图不呈直线,残差分布有明显的规律(非随机散落)。 | 进行升维操作(如引入多项式特征 等),转化为线性可解问题。 |
7. Python 示例 (Scikit-Learn)
from sklearn.linear_model import LinearRegressionimport numpy as np
# 训练数据:X = [面积(m²), 楼层, 房龄(年)]X = np.array([ [80, 5, 3], [120, 10, 8], [60, 2, 1], [150, 15, 10]])y = np.array([300, 500, 200, 600]) # 房价(万元)
model = LinearRegression()model.fit(X, y)
print("特征权重 (w1, w2, w3):", model.coef_)print("截距项 (b):", model.intercept_)print("新数据预测:", model.predict([[100, 7, 5]]))Footnotes
-
如果你的特征有 4 个、100 个(比如看房子的面积、楼层、朝向、学区等 100 个指标),这是 101 维空间,人类的脑子已经想象不出来了。数学家就统称这种高维空间里用来切分数据的“平整界面”叫做超平面。 ↩
-
这里加粗的 和 代表它们不是单个数字,而是一串数字(叫做向量)。右上角的 叫做“转置”(就是把竖着写的一串数字横过来)。 ↩
-
千万别被这堆符号吓到。你只需要知道,普通的方程是 ,求 就是用 。但在多元回归里,我们面对的是一个巨大的 Excel 表格(这就是矩阵 )。 ↩
-
矩阵是不能直接做除法的,所以数学家发明了矩阵的**“逆”**(右上角的 ) ↩
-
乘以一个矩阵的逆,就相当于在做“除法”。 ↩
-
详细解释:刚才讲过“多重共线性”是信息重复。完全共线性是它的极端致命版本。
-
比如你预测房价,特征A是“房屋面积(平方米)”,特征B是“房屋面积(平方分米)”。
-
在数学上,特征B永远等于特征A乘以100(即 ),两者形成了100%的完美线性关系。
-
为什么致命? 当计算机去解方程(求逆矩阵)寻找最优权重时,它会彻底精神分裂。因为它可以把所有权重都给A(比如A的权重是10000,B是0),也可以都给B(A是0,B是100),甚至一人一半。因为有无限多种可能的正确答案,计算机的底层数学公式就会直接崩溃报错(矩阵奇异)。
-
-
当矩阵是“奇异”的(分母变成了 0 算不下去时),计算机科学家写了一个算法,找一个“最接近、最合理的替代品”来完成这步除法,保证程序不会报错崩溃。 ↩
-
- 大白话翻译:“给模型套上紧箍咒,防止它走极端”。
- 有时候模型为了强行拿满分(过拟合),会给出非常夸张的权重,比如“面积每多1平米,房价加1个亿,同时楼层每高1层,房价减1个亿”。
- L2 正则化就是给损失函数加上一条规则:“权重数值越庞大,扣分越狠”。这样就逼着模型老老实实地给出温和、符合常理的权重。
-
详细解释:在刚才笔记的“梯度下降”算法中,计算机就像一个被蒙上眼睛的人,被丢在一个山坡上。它的目标是走到“谷底”(也就是误差最小的地方)。
-
每次它都会用脚探一探路,感知哪边是下坡(计算梯度),然后迈出一步。这一步跨得有多远,就是“学习率”决定的。
-
步子太小(学习率太低):就像蚂蚁爬,虽然肯定能安全走到谷底,但要花几个月(训练极其缓慢,浪费大量时间)。
-
步子太大(学习率太高):就像绿巨人瞎跳,本来离谷底只剩十米,他一跳五十米,直接跳到了对面的山坡上;再往回一跳,又过了头。最后在山谷两边反复横跳,永远找不到最低点(这叫“模型无法收敛”,甚至“发散”)。
-
结论:找一个不多不少的“合适步子”,是炼丹师(算法工程师)的日常工作之一。
-
-
这就是为了强行把所有特征拉到“同一个起跑线”上,消除单位(量纲)带来的不公平对待 ↩
-
归一化: 把所有数据按比例压缩到 到 之间(或者 到 ) ↩
-
标准化: 不强求固定范围,而是把数据的“平均值”强行变成 ,“标准差”强行变成 ↩
-
正态分布: 一个中间高、两边低、左右完美对称的形状 ↩
-
- 残差 = 真实值 - 预测值
-
残差与损失的区别:
-
几十上百个残差(零碎的差距) 变成了 1 个 Loss(模型的最终总成绩)。
-
我们之前学的 MSE(均方误差),它的全称其实就是:均(求平均)方(求平方)误差(其实就是残差)。所以 MSE 就是把所有残差的平方加起来求平均。
-