数学笔记:最小二乘法(直线拟合)

文章目录

前言

最小二乘法(Least Squares Method)是一种数学优化技术,它的核心思想是:找到一组参数,使得模型预测值与真实值之间的误差平方和最小。

想象你在平面上有一些散点,想画一条直线来拟合这些点。每个点到直线的垂直距离就是"误差"。最小二乘法就是要找到一条直线,让所有点到直线的垂直距离的平方和最小。

公式与使用

针对二维线性分布的数据,我们需要得出一条直线:

y = k x + b y = kx + b y=kx+b

关键的工作就是用一个合适的方法来得到更加贴近现实需求的系数 k 和 b 。最小二乘法的使用的是原始数据到直线差值(这里指 Δy )的平方和最小。

可以推导出结果如下:

k = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 k = \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2} k=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi

b = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 b = \frac{\sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i}{n \sum x_i^2 - (\sum x_i)^2} b=n∑xi2−(∑xi)2∑xi2∑yi−∑xi∑xiyi

n 是数据点的个数, ∑ x i 表示所有 x i 的和, ∑ y i 表示所有 y i 的和, ∑ x i 2 表示所有 x i 2 的和, ∑ x i y i 表示所有 x i y i 的和。 n 是数据点的个数,\sum x_i 表示所有 x_i 的和,\sum y_i 表示所有 y_i 的和,\\ \sum x_i^2 表示所有 x_i^2 的和,\sum x_i y_i 表示所有 x_i y_i 的和。 n是数据点的个数,∑xi表示所有xi的和,∑yi表示所有yi的和,∑xi2表示所有xi2的和,∑xiyi表示所有xiyi的和。

示例计算

现有数据(x, y) :(2, 2.2) (3, 3.8) (4, 5.5) (5, 6.5) (6, 7.0)。

可以计算出中间数据:

然后带入前面公式计算出 k=1.23 和 b=0.08 。

代码实现(Python)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 示例数据
points = [(2, 2.2), (3, 3.8), (4, 5.5), (5, 6.5), (6, 7.0)]
x = np.array([p[0] for p in points])
y = np.array([p[1] for p in points])

# 计算参数k和b

# 方法一
n = len(x)
sum_x = np.sum(x)
sum_y = np.sum(y)
sum_x2 = np.sum(x**2)
sum_xy = np.sum(x * y)
k = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x**2)
b = (sum_x2 * sum_y - sum_x * sum_xy) / (n * sum_x2 - sum_x**2)

# 方法二
# p = np.polyfit(x, y, 1) # 线性拟合
# k, b = p

# 输出结果
print(f'm = {k}')
print(f'b = {b}') 

# 绘制数据
y_fit = k * x + b
plt.scatter(x, y, color='blue')
plt.plot(x, y_fit, color='red', label=f'y = {k:.2f}x + {b:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show() 

缺点

最小二乘法有完整的统计理论支持,计算简单,但是对数据中的异常值很敏感(平方项放大了异常值的影响)。这种情况下稳健回归(Theil Sen,RANSAC,Huber)方法表现会更好。

相关推荐
用户979984807182 小时前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法
threerocks2 小时前
【Muse实战】X 流量作战室搭建保姆级教程 - 拥有你自己的运营团队
算法
GreenTea2 小时前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术2 小时前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术2 小时前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
用户0441440924492 小时前
卫星信号模拟器里的四个坐标转换公式
算法
橘和柠2 小时前
阿里 open-code-review (AI代码审查工具)实战:安装、四层规则链、自定义规则格式与实测避坑
算法·面试
得物技术2 小时前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(4)--- Rollout实现细节
人工智能·算法
罗西的思考2 小时前
机器人 / 物理 Agent Harness 综合分析与对比:从「更强的模型」到「更好的系统」
人工智能·算法·机器学习