摘要本文介绍了机器学习中用于防止过拟合的正则化技术重点讲解了L1和L2正则化。L1正则化通过添加权重绝对值之和的惩罚项促使模型产生稀疏权重L2正则化则通过权重平方和的惩罚项减小权值大小。文章分别提供了使用scikit-learn库实现这两种正则化的Python代码示例并展示了在波士顿房价数据集上的应用效果。正则化能有效控制模型复杂度提高泛化能力。目录机器学习中的正则化L1 正则化示例输出结果L2 正则化示例输出结果机器学习中的正则化在机器学习中正则化是一种用于防止过拟合的技术 —— 过拟合指模型过于复杂对训练数据拟合度过高但无法泛化到新的、未见过的数据。正则化会在损失函数中引入惩罚项促使模型采用更小的权重和更简单的结构从而减少过拟合。机器学习中常用的正则化技术有多种包括 L1 正则化、L2 正则化、丢弃正则化dropout和早停法early stopping。本文将重点介绍最常用的 L1 和 L2 正则化。L1 正则化L1 正则化又称套索正则化Lasso regularization其核心是在损失函数中添加一个惩罚项该惩罚项等于所有权重绝对值的和。L1 正则化的惩罚项公式为λ × Σ |wᵢ|其中λ 是控制正则化强度的超参数wᵢ是模型中的第 i 个权重。L1 正则化的作用是促使模型产生稀疏权重即剔除对输出影响极小或无影响的权重进而简化模型结构、减少过拟合。示例在 Python 中可通过 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 # 加载波士顿房价数据集 boston load_boston() # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test train_test_split(boston.data, boston.target, test_size0.2, random_state42) # 创建带有L1正则化的Lasso模型alpha0.1 lasso Lasso(alpha0.1) # 在训练集上训练模型 lasso.fit(X_train, y_train) # 在测试集上进行预测 y_pred lasso.predict(X_test) # 计算预测结果的均方误差 mse mean_squared_error(y_test, y_pred) print(均方误差:, mse)输出结果运行上述代码后将得到以下输出均方误差: 25.155593753934173L2 正则化L2 正则化又称岭回归正则化Ridge regularization其惩罚项为所有权重平方的和。L2 正则化的惩罚项公式为λ × Σ (wᵢ)²其中λ 是控制正则化强度的超参数wᵢ是模型中的第 i 个权重。L2 正则化的作用是促使模型采用小权重即减小所有权重的数值大小从而平滑模型输出、减少过拟合。示例在 Python 中可通过 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_size0.2, random_state42) # 定义带有L2正则化的岭回归模型alpha0.1 model Ridge(alpha0.1) # 在训练集上训练模型 model.fit(X_train, y_train) # 在测试集上进行预测 y_pred model.predict(X_test) # 计算预测结果的均方误差 mse mean_squared_error(y_test, y_pred) print(均方误差: , mse)输出结果运行上述代码后将得到以下输出均方误差: 24.29346250596107