正则化(Regularization)是机器学习中防止模型过拟合的技术,通过在损失函数中添加惩罚项来约束模型复杂度。以下是常见的正则化方法及其实现:
L1正则化(Lasso)
L1正则化通过添加权重的绝对值之和作为惩罚项,倾向于产生稀疏权重矩阵(部分特征权重为0)。
损失函数公式: $$ J(w) = \text{MSE}(w) + \alpha \sum_{i=1}^n |w_i| $$
Python示例(Scikit-learn):
from sklearn.linear_model import Lasso
model = Lasso(alpha=0.1) # alpha为正则化强度
model.fit(X_train, y_train)
L2正则化(Ridge)
L2正则化添加权重的平方和作为惩罚项,使权重均匀减小但通常不为0。
损失函数公式: $$ J(w) = \text{MSE}(w) + \alpha \sum_{i=1}^n w_i^2 $$
Python示例:
from sklearn.linear_model import Ridge
model = Ridge(alpha=0.1)
model.fit(X_train, y_train)
弹性网络(Elastic Net)
结合L1和L2正则化,平衡两者的效果。
损失函数公式: $$ J(w) = \text{MSE}(w) + \alpha \rho \sum_{i=1}^n |w_i| + \frac{\alpha (1-\rho)}{2} \sum_{i=1}^n w_i^2 $$
Python示例:
from sklearn.linear_model import ElasticNet
model = ElasticNet(alpha=0.1, l1_ratio=0.5) # l1_ratio控制L1/L2比例
model.fit(X_train, y_train)
提前停止(Early Stopping)
在训练迭代过程中监控验证集误差,当误差不再下降时终止训练,防止过拟合。
Keras示例:
from keras.callbacks import EarlyStopping
early_stop = EarlyStopping(monitor='val_loss', patience=5)
model.fit(X_train, y_train, validation_split=0.2, callbacks=[early_stop])
Dropout(神经网络)
训练过程中随机丢弃部分神经元,强制网络学习冗余表征。
TensorFlow示例:
from tensorflow.keras.layers import Dropout
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5)) # 丢弃50%神经元
数据增强(图像任务)
通过旋转、平移等方式生成更多训练数据,增加模型泛化能力。
PyTorch示例:
from torchvision import transforms
transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomRotation(10),
])
选择正则化方法需考虑数据特征和任务类型:L1适合特征选择,L2适用于大部分线性问题,Dropout对深度网络效果显著。超参数(如alpha)通常通过交叉验证调优。