【机器学习】利用Autoencoder进行无监督异常检测(含代码)

本文介绍了Autoencoder,一种基于神经网络的无监督学习模型,用于数据降维和异常检测。通过实例展示了如何使用Keras构建Autoencoder在信用卡欺诈检测中的应用,包括数据预处理、模型训练与评估指标如MSE和MAE的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Autoencoder算法是一种常见的基于神经网络的无监督学习降维方法(其他常见降维方法)。

一、Autoencoder简介

Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。

Autoencoder包含两个主要的部分,encoder(编码器)和 decoder(解码器)。Encoder的作用是用来发现给定数据的压缩表示,decoder是用来重建原始输入。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。

在这里插入图片描述

二、Autoencoder无监督异常检测

异常检测(anomaly detection)通常分为有监督和无监督两种情形。在无监督的情况下,我们没有异常样本用来学习,而算法的基本上假设是异常点服从不同的分布。根据正常数据训练出来的Autoencoder,能够将正常样本重建还原,但是却无法将异于正常分布的数据点较好地还原,导致还原误差较大。

如果样本的特征都是数值变量,我们可以用MSE或者MAE作为还原误差。例如上图,如果输入样本为:
X = ( X 1 , X 2 , ⋯   , X 10 ) X=(X_1,X_2,\cdots,X_{10}) X=(X1,X2,,X10)
经过Autoencoder重建的结果为:
X R = ( X 1 R , X 2 R , ⋯   , X 10 R ) X^R=(X_1^R,X_2^R,\cdots,X_{10}^R) XR=(X1R,X2R,,X10R)
还原误差MSE为:
1 10 ∑ i = 1 10 ( X i − X i R ) 2 \frac{1}{10}\sum_{i=1}^{10}(X_i-X_i^R)^2 101i=110(XiXiR)2
还原误差MAE为:
1 1

推荐系统是一种利用机器学习和统计算法为用户提供个性化推荐的系统。Autoencoder是一种常用的深度学习模型,可以用于实现推荐系统。 在PyTorch中,实现Autoencoder代码相对简单。首先,我们需要导入所需的库,如PyTorch和torchvision: ``` import torch import torch.nn as nn import torch.optim as optim import torchvision.datasets as datasets import torchvision.transforms as transforms from torch.utils.data import DataLoader ``` 接下来,定义Autoencoder模型的类: ``` class Autoencoder(nn.Module): def __init__(self, input_dim, hidden_dim): super(Autoencoder, self).__init__() self.encoder = nn.Linear(input_dim, hidden_dim) self.decoder = nn.Linear(hidden_dim, input_dim) def forward(self, x): x = self.encoder(x) x = self.decoder(x) return x ``` 然后,我们可以定义训练函数: ``` def train_autoencoder(model, trainloader, num_epochs, learning_rate): criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) for epoch in range(num_epochs): running_loss = 0.0 for data in trainloader: inputs, _ = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, inputs) loss.backward() optimizer.step() running_loss += loss.item() print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss / len(trainloader)}") ``` 最后,我们可以加载数据集并进行训练: ``` transform = transforms.Compose([transforms.ToTensor()]) trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) trainloader = DataLoader(trainset, batch_size=64, shuffle=True) input_dim = 784 hidden_dim = 64 model = Autoencoder(input_dim, hidden_dim) train_autoencoder(model, trainloader, num_epochs=10, learning_rate=0.001) ``` 以上就是使用PyTorch实现Autoencoder的推荐系统代码。在实际应用中,可以根据特定需求对模型进行调整和改进。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旅途中的宽~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值