在上一节中,我们研究了一元线性回归:
但现实问题中:
多个变量共同作用于结果
1多元线性模型
设:
写成矩阵形式:
其中:
2最小二乘问题
定义损失函数:
展开:
求导并令为 0:
👉 得到正规方程(Normal Equation):
若 可逆:
3几何解释
回归的本质是:
把 投影到 的列空间
👉 误差:
满足:
👉 含义:
残差与解释变量正交
4Python验证(投影性质)
# file: projection_property.pyimport numpy as npdefmain(): np.random.seed(0) X = np.random.randn(100, 2) X = np.hstack([np.ones((100,1)), X]) beta = np.array([1,2,3]) y = X @ beta + np.random.randn(100) beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y residuals = y - X @ beta_hat check = X.T @ residuals print("X^T residuals (应接近0):") print(check)if __name__ == "__main__": main()
执行结果如下:5统计性质
在假设:
下,有:
无偏性:
方差:
分布:
👉 结论:
回归系数可以做统计推断!
6多重共线性
如果:
则:
👉 现象:
系数极不稳定
7Python验证(共线性)
# file: multicollinearity.pyimport numpy as npdefmain(): np.random.seed(0) x1 = np.random.randn(100) x2 = x1 + np.random.normal(0, 0.01, 100) X = np.column_stack([np.ones(100), x1, x2]) y = 2 + 3*x1 + np.random.randn(100) beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y print("系数:", beta_hat)if __name__ == "__main__": main()
执行结果如下:8Ridge回归(稳定化)
为解决:
不可逆 / 不稳定
引入惩罚项:
👉 解:
👉 关键作用:
9Python验证(Ridge稳定性)
# file: ridge_stability.pyimport numpy as npdefmain(): np.random.seed(0) x1 = np.random.randn(100) x2 = x1 + np.random.normal(0, 0.01, 100) X = np.column_stack([np.ones(100), x1, x2]) y = 2 + 3*x1 + np.random.randn(100) ridge_beta = np.linalg.inv(X.T @ X + 1*np.eye(3)) @ X.T @ y print("Ridge系数:", ridge_beta)if __name__ == "__main__": main()
执行结果如下:10Lasso回归(稀疏性)
定义:
👉 特性:
11Python验证(Lasso稀疏)
# file: lasso_sparse.pyimport numpy as npfrom sklearn.linear_model import Lassodefmain(): np.random.seed(0) X = np.random.randn(100, 5) y = X @ np.array([1,0,3,0,5]) + np.random.randn(100) model = Lasso(alpha=0.1) model.fit(X, y) print("系数:", model.coef_)if __name__ == "__main__": main()
执行结果如下:12偏差-方差权衡
引入正则化后:
👉 核心:
用一点“偏差”换取“稳定性”
13工程意义
多元回归与正则化是:
14本节总结
15下期预告
下一讲将深入:
📌 点赞 + 转发,持续更新《统计学入门》