机器学习 Regularization 怎么用?正则化技巧详解

文章导读
Previous Quiz Next 机器学习中的正则化 在机器学习中,正则化是一种用于防止过拟合的技术。过拟合发生在模型过于复杂、拟合训练数据过于完美,但无法泛化到新的未见过数据时。正则化通过在损失函数中引入惩罚项,鼓励模型具有较小的权重和更简单的结构,从而减少过拟
📋 目录
  1. A 机器学习中的正则化
  2. B L1 正则化
  3. C L2 正则化
A A

机器学习中的正则化



Previous
Quiz
Next

机器学习中的正则化

在机器学习中,正则化是一种用于防止过拟合的技术。过拟合发生在模型过于复杂、拟合训练数据过于完美,但无法泛化到新的未见过数据时。正则化通过在损失函数中引入惩罚项,鼓励模型具有较小的权重和更简单的结构,从而减少过拟合。

机器学习中常用的正则化技术有多种,包括 L1 和 L2 正则化、dropout 正则化和早停(early stopping)。本文将重点介绍最常用的 L1 和 L2 正则化。

L1 正则化

L1 正则化,也称为 Lasso 正则化,是一种在损失函数中添加惩罚项的技术,该惩罚项等于权重之和的绝对值。L1 正则化惩罚项的公式为 −

$$\lambda \times \Sigma \left|w_{i} \right|$$

其中 $\lambda$ 是一个控制正则化强度的超参数,$w_i$ 是模型中的第 i 个权重。

L1 正则化惩罚项的效果是鼓励模型具有稀疏权重,即消除对输出影响很小或没有影响的权重。这简化了模型并减少了过拟合。

示例

要在 Python 中实现 L1 正则化,可以使用 scikit-learn 库中的 Lasso class。以下是如何在 linear regression 中使用 L1 正则化的示例 −

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载 Boston Housing 数据集
boston = load_boston()

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# 创建带有 L1 正则化的 Lasso 模型
lasso = Lasso(alpha=0.1)

# 在训练数据上训练模型
lasso.fit(X_train, y_train)

# 在测试数据上进行预测
y_pred = lasso.predict(X_test)

# 计算预测的均方误差
mse = mean_squared_error(y_test, y_pred)
print("Mean squared error:", mse)

在这个示例中,我们加载 Boston Housing 数据集,将其拆分为训练集和测试集,并使用 alpha 值 0.1 创建带有 L1 正则化的 Lasso 模型。然后在训练数据上训练模型,并在测试数据上进行预测。最后,计算预测的均方误差。

输出

执行此代码时,将产生以下输出 −

Mean squared error: 25.155593753934173

L2 正则化

L2 正则化,也称为 Ridge 正则化,是一种向损失函数添加惩罚项的技术,该惩罚项等于权重的平方和。其 L2 正则化惩罚项的公式为 −

$$\lambda \times \Sigma\left (w_{i} \right )^{2}$$

其中 $\lambda$ 是一个超参数,用于控制正则化的强度,$w_i$ 是模型中的第 i 个权重。

L2 正则化惩罚项的作用是鼓励模型具有较小的权重,即减小模型中所有权重的幅度。这具有平滑模型并减少过拟合的效果。

示例

要在 Python 中实现 L2 正则化,我们可以使用 scikit-learn 库中的 Ridge 类。以下是如何为线性回归使用 L2 正则化的示例 −

from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
import numpy as np

# 加载波士顿房价数据集
boston = load_boston()

# 创建特征和目标数组
X = boston.data
y = boston.target

# 标准化特征数据
scaler = StandardScaler()
X = scaler.fit_transform(X)

# 将数据分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义带有 L2 正则化的 Ridge 回归模型
model = Ridge(alpha=0.1)

# 在训练数据上拟合模型
model.fit(X_train, y_train)

# 在测试数据上进行预测
y_pred = model.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error: ", mse)

在这个示例中,我们首先加载波士顿房价数据集并将其分割为训练集和测试集。然后,我们使用 StandardScaler 标准化特征数据。

接下来,我们定义 Ridge 回归模型,并将 alpha 参数设置为 0.1,该参数控制 L2 正则化的强度。

我们在训练数据上拟合模型,并在测试数据上进行预测。最后,我们计算均方误差来评估模型的性能。

输出

执行此代码时,将产生以下输出 −

Mean Squared Error: 24.29346250596107