自动编码器在Python中的异常检测实现

354 篇文章 101 订阅 ¥59.90 ¥99.00

自动编码器在Python中的异常检测实现

自动编码器是一种无监督学习算法,可以将输入数据压缩到一个低维空间,并重构出与原始数据相似的输出。由于自动编码器模型对原始数据的复原能力很强,因此它们可以被用来进行异常检测。

在Python中,我们可以使用Keras库来实现自动编码器模型,利用训练数据来训练模型并对测试数据进行预测。如果测试数据的预测误差超过了一定的阈值,那么就认为这些测试数据是异常的。

以下是使用Python实现自动编码器异常检测的样例代码:

import numpy as np
from keras.layers import Input, Dense
from keras.models import Model

# 构建自动编码器模型
input_dim = 10
encoding_dim = 5

input_layer = Input(shape=(input_dim,))
encoder = Dense(encoding_dim, activation='relu')(input_layer)
decoder = Dense(input_dim, activation='sigmoid')(encoder)

autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer='adam', loss='mse')

# 生成训练数据和测试数据
train_data = np.random.normal(size=(1000, input_dim))
test_data = np.random.normal(size=(100, input_dim))

# 训练自动编码器模型
autoencoder.fit(train_data, train_data, epoc
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的自动编码器异常检测代码示例,使用了PyTorch框架: ```python import torch import torch.nn as nn import numpy as np 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): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded def train(model, x_train, x_valid, num_epochs, batch_size): criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) train_dataset = torch.utils.data.TensorDataset(torch.Tensor(x_train), torch.Tensor(x_train)) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True) valid_dataset = torch.utils.data.TensorDataset(torch.Tensor(x_valid), torch.Tensor(x_valid)) valid_loader = torch.utils.data.DataLoader(valid_dataset, batch_size=batch_size, shuffle=False) for epoch in range(num_epochs): train_loss = 0.0 valid_loss = 0.0 model.train() for data in train_loader: inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() train_loss += loss.item() * inputs.size(0) model.eval() for data in valid_loader: inputs, labels = data outputs = model(inputs) loss = criterion(outputs, labels) valid_loss += loss.item() * inputs.size(0) train_loss /= len(train_loader.dataset) valid_loss /= len(valid_loader.dataset) print('Epoch: {} \tTraining Loss: {:.6f} \tValidation Loss: {:.6f}'.format(epoch+1, train_loss, valid_loss)) def anomaly_score(model, x): with torch.no_grad(): recon = model(torch.Tensor(x)) mse_loss = np.mean(np.power(x - recon.numpy(), 2), axis=1) return mse_loss if __name__ == '__main__': # 数据准备 x_train = np.loadtxt('train_data.csv', delimiter=',') x_valid = np.loadtxt('valid_data.csv', delimiter=',') x_test = np.loadtxt('test_data.csv', delimiter=',') # 模型训练 input_dim = x_train.shape[1] hidden_dim = 10 model = Autoencoder(input_dim, hidden_dim) num_epochs = 100 batch_size = 32 train(model, x_train, x_valid, num_epochs, batch_size) # 异常检测 threshold = 0.05 scores = anomaly_score(model, x_test) anomalies = np.where(scores > threshold)[0] print('Anomaly indices:', anomalies) ``` 代码使用了一个简单的单层自动编码器模型,以及MSE损失和Adam优化器进行训练。在训练完成后,使用未标记数据集进行异常检测,并通过设置阈值来标识异常值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值