1. 回归模型基础与核心概念
回归分析是计算机视觉和机器学习中最基础也最强大的工具之一。简单来说,回归就是找到输入特征和输出标签之间的数学关系。想象一下,你有一堆散落在坐标纸上的点,回归就是找到最能描述这些点分布规律的线或曲线。
在计算机视觉中,回归模型的应用无处不在:
- 人体姿态估计:预测关节点的坐标位置
- 目标跟踪:预测物体在下一帧的位置
- 深度估计:从单张图片预测场景深度
- 年龄估计:从人脸照片预测年龄
1.1 线性回归的本质
线性回归假设输入x和输出y之间存在线性关系,用数学表示就是:
y = wx + b + ε
其中:
- w是斜率(权重)
- b是截距(偏置)
- ε是噪声(现实数据总有不完美)
这个简单的公式却有着惊人的实用性。比如在自动驾驶中,可以用回归模型根据前方车辆的距离预测刹车力度;在医疗影像分析中,可以用回归预测肿瘤的大小变化。
关键理解:线性回归不是要完美拟合每一个数据点,而是要找到最能代表数据整体趋势的直线。就像在嘈杂的会议室里,你不是要听清每个人说的话,而是要把握讨论的整体方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 最小二乘法:从数学到代码
2.1 最小二乘法的数学原理
最小二乘法的目标是最小化残差平方和:
RSS = Σ(y_i - (wx_i + b))²
用矩阵表示就是:
ŵ = (XᵀX)⁻¹Xᵀy
这个公式的美妙之处在于:
- 它有解析解(不需要迭代优化)
- 计算效率高(O(n³)复杂度,对小数据集很高效)
- 几何解释直观(在特征空间中的投影)
2.2 Python实现与可视化
让我们用NumPy实现这个公式:
python复制import numpy as np
import matplotlib.pyplot as plt
# 生成带噪声的线性数据
np.random.seed(42)
x = np.linspace(0, 10, 100)
noise = np.random.normal(0, 1, 100)
y = 2 * x + 1 + noise # 真实关系:y=2x+1
# 最小二乘法求解
X = np.vstack([x, np.ones(100)]).T
w = np.linalg.inv(X.T @ X) @ X.T @ y
slope, intercept = w
# 可视化
plt.figure(figsize=(10,6))
plt.scatter(x, y, label='数据点', alpha=0.6)
plt.plot(x, slope*x + intercept, 'r', label=f'拟合直线: y={slope:.2f}x+{intercept:.2f}')
plt.plot(x, 2*x+1, 'g--', label='真实关系')
plt.legend()
plt.show()
运行这段代码,你会看到:
- 蓝色散点是我们的带噪声数据
- 红色直线是最小二乘拟合结果
- 绿色虚线是真实的y=2x+1关系
2.3 实际应用中的注意事项
在实践中,我发现有几点特别重要:
- 数据标准化:当特征量纲差异大时,应先标准化(减均值除标准差)
- 异常值处理:最小二乘法对异常值敏感,可以用RANSAC等鲁棒方法
- 多重共线性检查:当特征高度相关时,XᵀX可能不可逆,需要正则化
经验分享:在计算机视觉项目中,像素值作为特征时,标准化能显著提高回归性能。我曾经在一个手势识别项目中,标准化后模型准确率提升了15%。
3. 线性回归的局限性及解决方案
3.1 线性回归的三大痛点
- 非线性关系:无法拟合y=x²这样的简单曲线
- 异常值敏感:一个离群点就能把直线"拉偏"
- 高维灾难:当特征比样本多时,解不唯一
3.2 可视化展示局限性
python复制# 生成非线性数据
x = np.linspace(-2, 2, 100)
y = x**2 + np.random.normal(0, 0.2, 100)
# 尝试线性拟合
X = np.vstack([x, np.ones(100)]).T
w = np.linalg.inv(X.T @ X) @ X.T @ y
y_pred = w[0]*x + w[1]
plt.figure(figsize=(10,6))
plt.scatter(x, y, label='数据')
plt.plot(x, y_pred, 'r', label='线性拟合')
plt.plot(x, x**2, 'g--', label='真实关系')
plt.legend()
plt.show()
这个例子清楚地展示了线性模型对非线性数据的无力感。红色直线完全无法捕捉二次曲线的趋势。
3.3 解决方案路线图
针对这些限制,我们有多种进阶方法:
- 多项式回归:添加x², x³等高阶项
- 核方法:隐式映射到高维空间
- 正则化:L1/L2正则防止过拟合
- 贝叶斯方法:引入概率视角
4. 贝叶斯线性回归:不确定性量化
4.1 贝叶斯视角的革新
传统线性回归给出一个确定的预测值,而贝叶斯回归给出预测分布。这就像天气预报从"明天25°C"变成"明天24-26°C,置信度90%"。
贝叶斯框架的核心公式:
后验 ∝ 似然 × 先验
对于线性回归:
p(w|X,y) ∝ p(y|X,w) × p(w)
4.2 Python实现与置信区间
python复制from scipy.stats import multivariate_normal
# 设置先验
alpha = 1.0 # 权重先验精度
beta = 10.0 # 噪声精度
# 计算后验
S_N_inv = alpha * np.eye(2) + beta * X.T @ X
S_N = np.linalg.inv(S_N_inv)
m_N = beta * S_N @ X.T @ y
# 预测分布
x_test = np.linspace(-3, 3, 100)
X_test = np.vstack([x_test, np.ones(100)]).T
y_mean = X_test @ m_N
y_var = 1/beta + np.diag(X_test @ S_N @
