【机器学习】利用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进行异常检测 在工业应用中,利用自动编码器(AutoEncoder)来执行无监督学习任务是一种常见方法。这种神经网络架构能够学会压缩输入数据到低表示再重构回原始空间,在此过程中对于正常样本应该能较好地重建而异常则不然。 ```python import torch from torchvision import transforms, datasets from torch.utils.data import DataLoader import numpy as np class Autoencoder(torch.nn.Module): def __init__(self): super().__init__() self.encoder = torch.nn.Sequential( torch.nn.Linear(28 * 28, 128), torch.nn.ReLU(True), torch.nn.Linear(128, 64), torch.nn.ReLU(True)) self.decoder = torch.nn.Sequential( torch.nn.Linear(64, 128), torch.nn.ReLU(True), torch.nn.Linear(128, 28*28), torch.nn.Sigmoid()) def forward(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded def train_autoencoder(): transform = transforms.Compose([transforms.ToTensor()]) dataset = datasets.MNIST(root='./data', download=True, transform=transform) dataloader = DataLoader(dataset, batch_size=64, shuffle=True) model = Autoencoder() criterion = torch.nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) num_epochs = 10 for epoch in range(num_epochs): for data in dataloader: img, _ = data img = img.view(img.size(0), -1) output = model(img) loss = criterion(output, img) optimizer.zero_grad() loss.backward() optimizer.step() train_autoencoder() ``` 上述例子展示了如何构建并训练一个简单的自动编码器用于MNIST手写数字图片集上的特征提取与重建误差最小化[^3]。 为了适应特定类型的缺陷检测场景,可能还需要针对具体问题调整模型结构(比如卷积层代替全连接)、引入正则项防止过拟合等问题,并且收集足够的正常状态下的样本作为训练集以确保良好的泛化能力。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旅途中的宽~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值