基于自编码器实现无监督异常检测系统

作为自编码器的入门项目,我实现了一个无监督的异常检测系统,传统的异常检测手段有很多,在有监督时可以单纯用多分类问题来判别异常,也可以用高斯聚类来帮助判别异常出现的概率。这里我们依赖深度模型——自编码器来帮助我们做无监督的异常检测。
所谓异常检测,它相比于一般的二分类问题有一些特别的性质,其最主要的特点,不在数据分布上,而在数据的比例上。异常之所以称做异常,就是因为它不容易发生。体现在数据集上,就是我们的正常样本数目远超异常样本,这样在训练二分类器时容易受到严重的样本不平衡的影响。
这里用经典的玻璃分类数据集作为训练资料,我们用其中的第七类玻璃作为异常样本,其他玻璃均为正常。

准备工作

一些要用到的数据处理、可视化工具,以及我们的无敌Pytorch

import seaborn as sns
import torch
import torch.nn as nn
from torch.utils.data import DataLoader,TensorDataset
import numpy as np  # linear algebra
import pandas as pd  # read and wrangle dataframes
import matplotlib.pyplot as plt # visualization
from sklearn.base import TransformerMixin # To create new classes for transformations
from sklearn.preprocessing import (FunctionTransformer, StandardScaler)

from sklearn.model_selection import train_test_split
from collections import Counter

glass.csv数据集很容易找到,搜索一下就行。这里先导入数据集,并简单观察一下数据分布

df = pd.read_csv('glass.csv')
features = df.columns[:-1].tolist()
print(df.shape)

sns.countplot(df['Type'])
plt.show()

df.head()

在这里插入图片描述
在这里插入图片描述

训练与测试数据

我们使用10%的正常样本+所有的异常样本组成测试集,90%的正常样本用于无监督训练。

X = df[features].values
y = df['Type'].values

X_nov = X[y==7]
X_nom = X[~(y==7)
  • 5
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值