13 过拟合与正则化

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

过拟合的概念

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

过拟合的示例

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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(\theta) = \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} |\theta_j| $$

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

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

正则化的案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 正则化可以看到模型在训练数据和新数据上的性能有所改善。正则化通过惩罚较大的系数,使得模型更加平滑,从而提高了其泛化能力。

结论

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

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论