机器学习 - 正则化



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

机器学习中常用的正则化技术有多种,包括L1和L2正则化、dropout正则化和提前停止。在本文中,我们将重点关注L1和L2正则化,这是最常用的技术。

L1正则化

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

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

其中λ是一个控制正则化强度的超参数,𝑤𝑖是模型中的第i个权重。

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

示例

为了在Python中实现L1正则化,我们可以使用scikit-learn库中的Lasso类。以下是如何使用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

# Load the Boston Housing dataset
boston = load_boston()

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# Create a Lasso model with L1 regularization
lasso = Lasso(alpha=0.1)

# Train the model on the training data
lasso.fit(X_train, y_train)

# Make predictions on the test data
y_pred = lasso.predict(X_test)

# Calculate the mean squared error of the predictions
mse = mean_squared_error(y_test, y_pred)
print("Mean squared error:", mse)

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

输出

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

Mean squared error: 25.155593753934173

L2正则化

L2正则化,也称为Ridge正则化,是一种在成本函数中添加惩罚项的技术,该惩罚项等于权重平方和。L2正则化惩罚的公式为:

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

其中λ是一个控制正则化强度的超参数,wi是模型中的第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

# load the Boston housing dataset
boston = load_boston()

# create feature and target arrays
X = boston.data
y = boston.target

# standardize the feature data
scaler = StandardScaler()
X = scaler.fit_transform(X)

# split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# define the Ridge regression model with L2 regularization
model = Ridge(alpha=0.1)

# fit the model on the training data
model.fit(X_train, y_train)

# make predictions on the testing data
y_pred = model.predict(X_test)

# calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error: ", mse)

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

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

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

输出

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

Mean Squared Error: 24.29346250596107
广告