生活中,你手机上未来几天的天气预报,经济学家预测的物价趋势,甚至健身APP上预测的你下个月的体重,这些看似“未卜先知”的能力,其实都藏着一个数学秘密:最小二乘法。
一、生活中需要 “找规律” 事情
假设你记录了班上5位同学每天的学习时间和考试成绩:
| 学习时间(小时) | 考试成绩(分) |
|---|---|
| 1 | 50 |
| 2 | 65 |
| 3 | 75 |
| 4 | 85 |
| 5 | 95 |
把这些点画在纸上,它们大致会排成一条斜线。但如果你试图用尺子画一条“最合适”的直线穿过这些点,确不知怎么判断哪条线最准,这就是最小二乘法要解决的问题。
二、最小二乘法的智慧
想象地上散落着许多小旗子(数据点),你需要画一条轨道(直线),让所有小旗子尽可能贴近轨道。最小二乘法的策略是:谁离轨道远,就重点“惩罚”谁。
它会做两件事:
- 计算每个数据点到直线的垂直距离
- 把所有距离平方后相加,找到总和最小的那条线
为什么用平方?
-
避免正负距离相互抵消(比如-3和+3相加变0)
-
放大远离直线的点的“错误”(比如距离2的平方是4,距离3的平方是9)
三、数学原理
假设我们想用直线方程 y = a + bx 描述学习时间和成绩的关系:
-
x 代表学习时间
-
y 代表预测的考试成绩
-
a 是起点分(完全不学习的成绩)
-
b 是学习效率(每多学1小时能提高多少分)
最小二乘法就像个智能调参师,通过计算自动找到最合适的 a 和 b,让预测线尽可能贴近所有真实数据点。
四、现实中的应用
- 天气预报:根据历史气温数据预测未来温度
- 股票预测:分析股价变化趋势(注意:股市有风险!)
- 智能推荐:通过你的观影记录猜你喜欢的电影
- 医学研究:分析药物剂量与疗效的关系
- 经济学:预测GDP增长趋势
- 工程学:校准传感器误差
✅ 擅长:
数据呈现直线趋势时预测精准
计算速度快,适合大数据分析
⛔ 不擅长:
遇到“拐弯”的数据(比如先上升后下降)会失效
容易被极端值带偏(比如有个同学通宵学习却考砸了)
五、现实中的应用
假如你收集到这样一组数据(某小区房价):
| 面积(㎡) | 价格(万元) |
|---|---|
| 80 | 320 |
| 100 | 380 |
| 120 | 420 |
| 150 | 480 |
算法原理
最小二乘法的核心:在一堆数据点中,连接一条直线,使得所有点到这条线的距离平方和最小。
数学表达式为:
其中:
- :实际观测值(房价)
- :直线截距
- :直线斜率
- :特征值(房屋面积)
代码:
import numpy as np
import matplotlib.pyplot as plt
# 模拟房屋数据
areas = np.array([80, 100, 120, 150]) # 面积
prices = np.array([320, 380, 420, 480]) # 价格
# 构造设计矩阵
X = np.vstack([np.ones_like(areas), areas]).T
# 最小二乘解析解
beta = np.linalg.inv(X.T @ X) @ X.T @ prices
# 提取参数
intercept = beta[0]
slope = beta[1]
print(f"回归方程:y = {slope:.2f}x + {intercept:.2f}")
# 可视化结果
plt.scatter(areas, prices, color='blue', label='实际房价')
plt.plot(areas, slope*areas + intercept, color='red', label='预测模型')
plt.xlabel('面积(㎡)')
plt.ylabel('价格(万元)')
plt.title('房屋面积-价格回归分析')
plt.legend()
plt.grid(True)
plt.show()
运行结果:
回归方程:y = 2.40x + 124.00