1. 当完美拟合变成灾难:从龙格现象说起
第一次看到龙格现象的实验结果时,我正对着屏幕上的曲线发愣——明明用7次多项式完美穿过了所有样本点,为什么在区间外会像脱缰野马一样疯狂偏离真实函数?这让我想起刚入行时犯过的错误:用一个复杂的深度学习模型完美拟合了训练数据,结果在实际应用中输出了荒谬的预测。
让我们用Python重现这个经典实验。假设真实函数是y=1/(1+25x²),在[-2,2]区间均匀取7个点:
python复制import numpy as np
import matplotlib.pyplot as plt
# 真实函数
x = np.linspace(-2, 2, 1000)
y = 1/(1 + 25*x**2)
# 采样点
testx = np.linspace(-2, 2, 7)
testy = 1/(1 + 25*testx**2)
# 不同次数拟合
degrees = [3, 5, 7]
models = [np.poly1d(np.polyfit(testx, testy, d)) for d in degrees]
当把拟合结果绘制在[-10,10]区间时,7次多项式在|x|>2的区域出现了剧烈的震荡,振幅随着|x|增大呈指数级增长。这就像用记忆代替理解的学生——能在模拟考中拿满分,遇到新题型却一败涂地。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 过拟合的数学本质:误差的两副面孔
2.1 偏差-方差困境的具象化展示
龙格现象生动展示了模型复杂度的双刃剑特性。低次多项式(如3次)虽然不能精确穿过每个样本点,但整体趋势与真实函数相近;而高次多项式在样本点处误差为零,在其他位置却误差爆炸。这对应着机器学习中的偏差-方差分解:
总误差 = (偏差)² + 方差 + 不可约误差
- 偏差:3次多项式由于表达能力有限,始终无法贴近真实函数的峰值,这是欠拟合的表现
- 方差:7次多项式对样本位置极度敏感,微小的数据变动会导致拟合函数剧烈变化
python复制# 添加噪声观察模型稳定性
noisy_testy = testy + np.random.normal(0, 0.05, size=testy.shape)
noisy_models = [np.poly1d(np.polyfit(testx, nois
