12 贝叶斯学习与统计推断:模型选择之过拟合与正则化
系列进度
贝叶斯学习入门 · 第 12 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
贝叶斯学习的重点是把已有判断和新证据合在一起,并明确表达不确定性。阅读时可以按「过拟合 -> 过拟合的案例 -> 正则化 -> 正则化的原理」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「过拟合」,再查「过拟合的案例」。
在上一篇中,我们探讨了贝叶斯因子和模型比较,了解了如何在不同模型之间进行选择。接下来,我们将深入讨论与模型选择密切相关的两个概念:过拟合与正则化。这两个概念对于确保我们的贝叶斯学习模型的泛化能力至关重要。
过拟合(Overfitting)
过拟合是指模型在训练数据上表现良好,但在新数据上的表现却急剧下降的现象。这通常发生在模型过于复杂时,即模型具有过多的参数,能够非常好地拟合训练数据中的噪声。
理解过拟合与正则化时,先看训练误差、验证误差、参数复杂度、先验约束和泛化表现。
过拟合的案例
以线性回归为例,假设我们有一组数据点,我们使用一个高阶多项式来拟合这些数据。在训练集上,该高阶多项式可以很好地通过所有的数据点,但在验证集上,模型的预测能力却显著下降。这个现象就是过拟合的表现。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
# 生成数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
# 使用不同的多项式阶数
degrees = [1, 3, 5, 10]
plt.figure(figsize=(15, 10))
for i, degree in enumerate(degrees):
model = make_pipeline(PolynomialFeatures(degree), LinearRegression())
model.fit(X, y)
y_pred = model.predict(X)
plt.subplot(2, 2, i + 1)
plt.scatter(X, y, s=10, label='Data')
plt.plot(X, y_pred, label='Prediction (degree={})'.format(degree), color='red')
plt.title('Polynomial Degree: {}'.format(degree))
plt.legend()
plt.show()
在上面的图中,我们可以看到随着多项式阶数的增加,模型在训练数据上的表现越来越好,但在测试数据上的预测能力并没有显著提高,甚至开始下降,这就是过拟合的体现。
正则化(Regularization)
为了对付过拟合,我们可以采用正则化技术。正则化通过向损失函数中加入一个惩罚项来限制模型的复杂度,从而减少过拟合的风险。常见的正则化方法有L1正则化(Lasso)和L2正则化(Ridge)。
读完《贝叶斯学习与统计推断:模型选择之过拟合与正则化》不要只停在“看懂了”。回头挑一个步骤动手做一遍,再记录哪里卡住,后面的学习会更稳。
正则化的原理
在贝叶斯框架下,我们可以将正则化视为对参数施加先验分布。一种常见的选择是对参数引入一个Gaussian先验,这导致了L2正则化;而使用Laplace先验则导致L1正则化。
正则化的案例
继续使用上面的例子,我们将引入Ridge回归(L2正则化)来对抗过拟合。
from sklearn.linear_model import Ridge
# 使用Ridge回归
plt.figure(figsize=(10, 5))
ridge_model = make_pipeline(PolynomialFeatures(10), Ridge(alpha=1.0))
ridge_model.fit(X, y)
y_ridge_pred = ridge_model.predict(X)
plt.scatter(X, y, s=10, label='Data')
plt.plot(X, y_ridge_pred, label='Ridge Prediction (degree=10)', color='green')
plt.title('Ridge Regression with Regularization')
plt.legend()
plt.show()
在上面的图中,我们引入了Ridge回归来平衡模型的复杂度与拟合性能。虽然模型未能完全通过每个数据点,但其在新数据上的泛化能力得到了改善。
读到这里,可以把《贝叶斯学习与统计推断:模型选择之过拟合与正则化》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《贝叶斯学习与统计推断:模型选择之过拟合与正则化》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
小结
在贝叶斯学习过程中,过拟合与正则化是两个非常重要的概念。了解如何识别过拟合以及通过正则化技术来改善模型的泛化能力,将帮助我们更好地进行模型选择。在下一篇中,我们将进一步探讨贝叶斯回归,特别是线性回归模型的具体应用和实现。
通过这篇教程,我们希望你能够将在选择中考虑到模型的复杂度,使用正则化技术来提高良好的拟合能力,同时避免过拟合现象的发生。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
贝叶斯学习与统计推断:模型选择之过拟合与正则化适合谁读?
这是 贝叶斯学习入门 系列第 12 / 24 篇,适合正在学习贝叶斯学习入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇贝叶斯学习入门教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读