机器学习入门 | 找规律神器,最小二乘法及应用案例

200 阅读3分钟

生活中,你手机上未来几天的天气预报,经济学家预测的物价趋势,甚至健身APP上预测的你下个月的体重,这些看似“未卜先知”的能力,其实都藏着一个数学秘密:最小二乘法。

一、生活中需要 “找规律” 事情

假设你记录了班上5位同学每天的学习时间和考试成绩:

学习时间(小时)考试成绩(分)
150
265
375
485
595

把这些点画在纸上,它们大致会排成一条斜线。但如果你试图用尺子画一条“最合适”的直线穿过这些点,确不知怎么判断哪条线最准,这就是最小二乘法要解决的问题。

二、最小二乘法的智慧

想象地上散落着许多小旗子(数据点),你需要画一条轨道(直线),让所有小旗子尽可能贴近轨道。最小二乘法的策略是:谁离轨道远,就重点“惩罚”谁。

它会做两件事:

  • 计算每个数据点到直线的垂直距离
  • 把所有距离平方后相加,找到总和最小的那条线

为什么用平方?

  • 避免正负距离相互抵消(比如-3和+3相加变0)

  • 放大远离直线的点的“错误”(比如距离2的平方是4,距离3的平方是9)

三、数学原理

假设我们想用直线方程 y = a + bx 描述学习时间和成绩的关系:

  • x 代表学习时间

  • y 代表预测的考试成绩

  • a 是起点分(完全不学习的成绩)

  • b 是学习效率(每多学1小时能提高多少分)

最小二乘法就像个智能调参师,通过计算自动找到最合适的 a 和 b,让预测线尽可能贴近所有真实数据点。

四、现实中的应用

  • 天气预报:根据历史气温数据预测未来温度
  • 股票预测:分析股价变化趋势(注意:股市有风险!)
  • 智能推荐:通过你的观影记录猜你喜欢的电影
  • 医学研究:分析药物剂量与疗效的关系
  • 经济学:预测GDP增长趋势
  • 工程学:校准传感器误差

✅ 擅长:

数据呈现直线趋势时预测精准

计算速度快,适合大数据分析

⛔ 不擅长:

遇到“拐弯”的数据(比如先上升后下降)会失效

容易被极端值带偏(比如有个同学通宵学习却考砸了)

五、现实中的应用

假如你收集到这样一组数据(某小区房价):

面积(㎡)价格(万元)
80320
100380
120420
150480

算法原理

最小二乘法的核心:在一堆数据点中,连接一条直线,使得所有点到这条线的距离平方和最小。

数学表达式为:

minβ0,β1i=1n(yi(β0+β1xi))2\min_{\beta_0,\beta_1} \sum_{i=1}^n (y_i - (\beta_0 + \beta_1x_i))^2

其中:

  • yiy_i:实际观测值(房价)
  • β0\beta_0:直线截距
  • β1\beta_1:直线斜率
  • xix_i:特征值(房屋面积)

代码:

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