郭震 AI公众号:郭震AI

13 过拟合与正则化

发布日期:

最近更新:

分类: 计算机视觉

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点7 个
图文要点6 张
正文规模1.4k 字
过拟合与正则化流程图查看大图
过拟合与正则化流程图

过拟合在视觉任务里很常见,尤其是样本少、模型大、场景单一时。正则化不是为了让训练慢,而是为了让模型在新图上更稳。

过拟合与正则化实操核对图查看大图
过拟合与正则化实操核对图

我会同时画训练曲线和验证曲线。如果训练越来越好、验证越来越差,就该先查数据增强和模型容量。

在机器学习中,过拟合(Overfitting)正则化(Regularization)都是非常重要的概念,它们直接影响到模型的表现和泛化能力。本文将深入探讨这些概念,并结合实际案例和代码示例来帮助理解。

过拟合的概念

过拟合发生在模型学习到了训练数据中的噪声和细节,而不是真正的信号。这意味着模型在训练数据上表现良好,但在未见过的新数据上性能较差。

视觉过拟合正则化判断卡查看大图
视觉过拟合正则化判断卡

排查视觉模型过拟合时,先看训练验证差距、数据增强、权重衰减、Dropout 和早停策略。

过拟合的示例

设想我们有一个简单的回归问题,使用多项式回归来拟合数据。如果我们用一个高次多项式(如5次或6次多项式)来拟合少量数据,模型可能会曲折地通过每一个数据点,从而导致过拟合

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# 生成一些示例数据
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])

# 过拟合示例 - 使用高次多项式
poly = PolynomialFeatures(degree=15)
X_poly = poly.fit_transform(X)

model = LinearRegression()
model.fit(X_poly, y)

# 预测
X_test = np.linspace(0, 5, 100).reshape(-1, 1)
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)

# 绘制结果
plt.scatter(X, y, color='red', label='数据点')
plt.plot(X_test, y_pred, label='过拟合模型 (15次多项式)')
plt.legend()
plt.title('过拟合示例 - 高次多项式拟合')
plt.show()

在上面的代码中,我们创建了一个高次多项式拟合示例,可以看到这个模型在训练数据上拟合得非常完美,但在新数据上表现较差。

识别过拟合

过拟合的常见迹象包括:

  • 训练误差较低,但验证误差较高。
  • 模型在训练集和验证集之间的性能差异(即模型在训练集上表现良好但在验证集上表现差)。
计算机视觉阅读地图卡查看大图
计算机视觉阅读地图卡

阅读《过拟合与正则化》前,可以先用配图确认主线;读完后再检查哪些步骤能直接操作,哪些还需要补资料。

使用交叉验证(Cross-Validation)是一种检测过拟合的有效方法。通过将数据集分成多个子集并对模型进行多次评估,可以更好地理解模型的泛化能力。

正则化的概念

为了应对过拟合,我们可以使用正则化正则化是引入额外的信息来约束或惩罚模型参数,从而降低模型的复杂度。

常见的正则化方法

  1. L1 正则化(Lasso):加入参数绝对值的惩罚项,使得部分参数为零,达到特征选择的效果。

    J(θ)=i=1m(hθ(x(i))y(i))2+λj=1nθjJ(\theta) = \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} |\theta_j|
  2. L2 正则化(Ridge):加入参数平方的惩罚项,通常不会使参数为零,但可以缩小所有参数的值。

J(θ)=i=1m(hθ(x(i))y(i))2+λj=1nθj2J(\theta) = \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} \theta_j^2

以下是应用L2 正则化的示例代码。

正则化的案例

from sklearn.linear_model import Ridge

# 使用 Ridge 正则化的多项式回归
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_poly, y)

# 进行预测
ridge_y_pred = ridge_model.predict(X_test_poly)

# 绘制结果
plt.scatter(X, y, color='red', label='数据点')
plt.plot(X_test, ridge_y_pred, label='正则化模型 (Ridge, 15次多项式)')
plt.legend()
plt.title('正则化示例 - L2 正则化多项式拟合')
plt.show()

在此示例中,应用了L2 正则化可以看到模型在训练数据和新数据上的性能有所改善。正则化通过惩罚较大的系数,使得模型更加平滑,从而提高了其泛化能力。

过拟合与正则化应用复盘卡查看大图
过拟合与正则化应用复盘卡

复习《过拟合与正则化》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

过拟合与正则化应用检查卡查看大图
过拟合与正则化应用检查卡

练习《过拟合与正则化》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

结论

过拟合正则化是机器学习中不可或缺的概念。理解这些概念并能够运用相关技术,可以显著改善模型的性能。在接下来的内容中,我们将探讨深度学习与神经网络的基础概念,包括神经元模型与激活函数,为理解更复杂的模型打下基础。

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...