L1, L2和Elastic Net正则化的实现及使用(采用PyTorch框架)

在机器学习中,L1正则化、L2正则化和Elastic Net正则化是用来避免过拟合的技术,它们通过在损失函数中添加一个惩罚项来实现。

正则化介绍
L1 正则化(Lasso回归):
L1 正则化通过向损失函数添加参数的绝对值的和来实施惩罚,公式可以表示为:

在这里插入图片描述

其中 L0 是原始的损失函数,λ 是正则化强度,wi是模型参数。

L1 正则化的特点是它可以产生稀疏模型,即许多模型参数会被设置为零。这种特性使得L1正则化不仅可以防止过拟合,还可以进行特征选择。

L2 正则化(Ridge回归):
L2 正则化通过添加参数的平方和来施加惩罚,公式为:

图片

λ 控制着正则化的强度。

L2 正则化倾向于让参数值趋近于零但不会完全为零,这有助于处理参数值过大的问题,从而减少模型在训练数据上的过拟合。

Elastic Net 正则化:
Elastic Net 正则化是L1和L2正则化的组合,它在损失函数中同时添加了L1和L2惩罚项,公式为:

图片

这种方法结合了L1和L2的优点,既可以产生稀疏模型,也可以平滑模型参数。

在实际应用中,Elastic Net特别适合于那些特征数量多于样本数量,或者特征之间高度相关的情况。

在sklearn中,我们可以使用内置的回归函数来实现

Lasso回归是应用L1正则化的典型模型。它可以通过Lasso类实现;Ridge回归使用L2正则化。它可以通过Ridge类来实现;Elastic Net回归结合了L1和L2正则化。它通过ElasticNet类实现

Pytorch代码实现
但是这些都是最简单的线性回归的扩展,通过上面的介绍,我们看到这些正则化的方式都是通过修改模型本身的权重来实现的,所以我们可以在MLP上也使用这些正则化的方法,下面我们将使用Pytorch来演示这个步骤

首先我们看下L1

 import os
 import torch
 from torch import nn
 from torchvision.datasets import MNIST
 from torch.utils.data import DataLoader
 from torchvision import transforms
 
 class MLP(nn.Module):
   '''
    Multilayer Perceptron.
  '''
   def __init__(self):
     super().__init__()
     self.layers = nn.Sequential(
       nn.Flatten(),
       nn.Linear(28 * 28 * 1, 64),
       nn.ReLU(),
       nn.Linear(64, 32),
       nn.ReLU(),
       nn.Linear(32, 10)
    )
 
 
   def forward(self, x):
     '''Forward pass'''
     return self.layers(x)
   
   def compute_l1_loss(self, w):
       return torch.abs(w).sum()
   
   
 if __name__ == '__main__':
   
   # Set fixed random number seed
   torch.manual_seed(42)
   
   # Prepare CIFAR-10 dataset
   dataset = MNIST(os.getcwd(), download=True, transform=transforms.ToTensor())
   trainloader = torch.utils.data.DataLoader(dataset, batch_size=10, shuffle=True, num_workers=1)
   
   # Initialize the MLP
   mlp = MLP()
   
   # Define the loss function and optimizer
   loss_function = nn.CrossEntropyLoss()
   optimizer = torch.optim.Adam(mlp.parameters
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业小助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值