大咖直播:如何打造 VUCA 时代的 10 倍速 IT 团队?直播预约>> 了解详情
写点什么

利用自编码神经网络,检测未标记数据集中的异常值

2019 年 12 月 20 日

利用自编码神经网络,检测未标记数据集中的异常值

人工智能领域中,带标记数据的重要性不言而喻,然而现实中的开发者们却并不具备这样一个带有标记的数据集,而且未标记的数据中往往还有着异常值的存在。面对这种情况,开发者应该怎样解决这一问题呢?本文作者 Selvaratnam Lavinan 提出了一种有趣的解决方案,他利用自编码神经网络产生的数据,再交由“假正类 Reducer”训练,进而提高了数据的精确率和召回率,排除了数据集中的异常值。


问题与解决方案

在大多数你想用人工智能来解决的实际问题中,很可能你并没有一个带标记的数据集。特别是在预测异常值时,你所拥有的数据集,有可能是包含了数以百万计的历史数据,其中也包括异常值。如果你试图从这样一个未标记的数据集中检测这些异常值 / 离群点,并且担心没有标记的数据集,那么本文将为你提供一个有趣的解决方案。


一直以来,每当你遇到不均衡数据集时,训练一个模型并使其正确拟合应该是个很大的麻烦。但现在这正是我们真正需要的。你所需要的是一个由近 1% 异常值组成的不均衡数据集。


自编码神经网络


自编码器神经网络的架构(来源:Deep-autoencoders)


与给出多个输入并达到一个或多个输出的典型神经网络不同的是,自编码器神经网络在输出层和输入层具有相同数量的神经元。这基本上意味着输入和输出的数量是相同的。不仅是计数,甚至它试图预测的输出也与输入相同。自编码器神经网络的工作是将数据编码为小代码(压缩),然后解码回来,以重现输入(解压缩)。在上图中,你还可以看到,输出向量是输入向量的近似值。这一特殊属性使我们能够将其用于未标记的数据库。


自编码神经网络通常用于计算机视觉到自然语言处理的降维。要了解更多有关自编码器神经网络的知识,请参阅维基百科的“自编码器”词条。


未标记数据集是怎么回事?

由于我们试图用这个模型再现输入,因此,最适合的损失函数是均方误差(mean square error,MSE)。在训练模型时,该模型试图做的工作是将 MSE 最小化。为了将 MSE 最小化,它应该尽可能地对数据集进行拟合,也就是说,它应该尽可能地重现许多数据。在我们的案例中,由于数据集是由 99% 的正常数据和只有 1% 的异常数据组成,所以在训练时模型会忽略一小部分数据,并拟合其余 99% 的数据,因此,MSE 是非常非常小的。这是背后的核心逻辑,这使得使用它来预测异常(即使是未标记的数据集)成为可能。


如何预测异常?

在训练模型时,它将学习正常数据的特征,并将其压缩成一个小元素,然后将其解码回输入,并有一个小错误。当一个异常通过模型发送时,它将无法重现这个异常,因为它被训练为仅重现正常数据,并最终会产生较大的 MSE。我们需要做的是,计算输出与输入的 MSE,并通过检查输出来正确区分异常,根据需要设置 MSE 的阈值,这样它就有良好的预测精确率和召回率。


不止这些

在大多数情况下,通过不断调整超参数并检查输出以得到最佳阈值,很难得到完全令人满意的结果。但是,我们还有更多的选择。



两个神经网络叠加在一起,以提高精确率和召回率。


High Recaller

即使我们用成千上万的数据来训练它,我们得到的异常值也只有几百个。因此,现在可以通过手动检查异常输出,并将其中一些标记为假正类(false positive,FP,即模型将负类别样本错误地预测为正类别)是可能的。因此,我们可以让自编码器神经网络模型作为 High Recaller。这意味着将阈值保持在较低的水平,这样,几乎所有的实际异常都能被检测到(高召回率),同时,还有其他的假正类异常(低精度)。


译注: 此处的 High Recaller 是作者生造词,是指提高召回率的模型。


现在,我们有了一个小数据集,可以手动将其标记为负类(false),并保持其余数据为正类(true)。对于这个手工标注的数据集,让我们引入一个新的人工神经网络模型。


假正类 Reducer

利用现有的数据集,我们可以选择一个神经网络,或者基于复杂性,甚至是随机森林或任何其他典型的机器学习模型,我们都可以简单地对其进行训练。


译注: 此处 Reducer 也是作者生造词,意即减少假正类的模型或方法。


实时预测

现在我们需要做的就是,将这些模型叠加起来,以便在实时预测中,那些由高召回率模型(自编码神经网络)预测为异常的那些通过假正类减少模型(人工神经网络)发送出去。这种神经网络的结合给我们提供了一个具有高召回率和高精度的深度神经网络模型


作者介绍:


Selvaratnam Lavinan,斯里兰卡 Sysco 实验室实习软件工程师,斯里兰卡莫拉图瓦(Moratuwa)大学电子与通信工程系本科生。


原文链接:


https://towardsdatascience.com/autoencoder-neural-network-for-anomaly-detection-with-unlabeled-dataset-af9051a048


2019 年 12 月 20 日 17:282891
用户头像
张之栋 人工智能及AI芯片爱好者

发布了 91 篇内容, 共 33.8 次阅读, 收获喜欢 151 次。

关注

评论

发布
暂无评论
发现更多内容

PHPStrom安装Xdebug及使用

书旅

php Xdebug PHPStrom

C++ 借来的资源,如何还的潇洒?

小林coding

c c++ 编程 编程习惯 内存管理

C++ 互斥锁和条件变量的性能比较

小林coding

c c++ 编程 并发编程

高并发,你真的了解吗?

华为云开发者社区

负载均衡 软件 高并发 操作系统 服务器集群

当代一线城市年轻人生活工作实录(蓝领打工仔篇)

Philips

Java .net 敏捷开发 快速开发 MES系统

学过 C++ 的你,你不得不知的这 10 条细节

小林coding

c c++ 编程 编程之路

lgloo Software 的 Jira Cloud 转型之旅

Atlassian

项目管理 DevOps 敏捷开发 Jira Cloud

Nginx配置80端口用于多个域名

石云升

nginx 域名配置 80端口共用

「分布式一致性协议」从2PC、3PC、Paxos到 ZAB

海星

【得物技术】乘风破浪—优雅代码四部曲

得物技术

Java 代码规范

为什么越来越多的非计算机领域企业,在自主做软件时都选择使用快速开发工具?

Philips

Java 敏捷开发 快速开发 .net core

白话讲解:消息队列到底解决了什么问题?

博文视点Broadview

读书笔记 分布式 RocketMQ 中间件 消息队列

艺术与科技的碰撞!Tristan Easton携手英特尔为漫威粉丝带来十代酷睿《复联》收藏版

最新动态

对于一款软件而言,完备的功能固然重要,但交互体验也不该被忽视

Philips

Java 敏捷开发 UI .net core 交互设计

低/零代码平台的优点有哪些?

代码制造者

编程语言 低代码 零代码 信息化 编程开发

一、GraphQL,你准备好了么?

星期35

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

海星

Java zookeeper 分布式

LeetCode题解:88. 合并两个有序数组,双指针+从后往前,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

实战分享丨MySQL 与Django版本匹配相关经验

华为云开发者社区

MySQL 数据库 django 华为云

初识WebRTC

soolaugust

WebRTC

当代一线城市年轻人工作生活实录(HR篇)

Philips

Java 敏捷开发 快速开发 .net core

当代一线城市年轻人工作生活实录(HR篇)

Learun

Java 敏捷开发 快速开发 .net core

Kotlin这么火!如何快速从Java过渡到Kotlin

华章IT

Java kotlin 协程 安卓

《漫威复联》PC版游戏即将登陆,英特尔为其独家 CPU 合作伙伴

最新动态

linux入门系列3--常见的linux远程登陆管理工具

黑马腾云

Linux xshell securecrt putty finallshell

推荐一款可视化+NoteBook工具

数据社

大数据 可视化 Zeppelin notebook

对于一款软件而言,完备的功能固然重要,但交互体验也不该被忽视

Learun

Java 敏捷开发 快速开发 .net core

为什么越来越多的非计算机领域企业,在自主做软件时都选择使用快速开发工具?

Learun

Java 敏捷开发 快速开发 .net core

十年磨一剑-BIGO全球音视频技术解决方案

InfoQ_3597a20b53cc

人工智能 大数据 技术

Linux入门系列1--环境准备及Linux安装

黑马腾云

Linux centos 运维 操作系统

linux入门系列2--CentOs图形界面操作及目录结构

黑马腾云

Linux centos7 操作系统 系统运维

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

利用自编码神经网络,检测未标记数据集中的异常值-InfoQ