实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

在这篇文章中,我们将学习如何实现用自动编码器来构建稀有事件分类器。我们将使用来自此处的真实稀有事件数据集。

背景

什么是极端罕见的事件?

在一个罕见的问题中,我们有一个不平衡的数据集。意思是,我们得到的阳性标记样本少于阴性。在典型的罕见事件问题中,带正号的标记数据约占总数的5-10%。在一个极端罕见的事件问题中,我们的标记数据不到1%。例如,在这里使用的数据集中,它约为0.6%。

这种极端罕见的事件问题在现实世界中非常普遍,例如,在制造、点击或在线行业购买时的纸张断裂和机器故障。

对这些罕见事件进行分类非常具有挑战性,深度学习已被广泛用于分类。但是,少量阳性标记样本禁止深度学习应用。无论数据有多大,深度学习的使用都受到正面标记样本数量的限制。

我们为什么还要费心使用深度学习呢?

这是一个合理的问题。为什么我们不应该考虑使用另一种机器学习方法?

答案是主观的。我们总是可以采用机器学习方法。为了使其工作,我们可以从负面标记的数据中取样,以获得接近平衡的数据集。由于我们有大约0.6%的正标记数据,因此欠采样将导致数据集的大小大约是原始数据大小的1%。机器学习方法,例如SVM或随机森林仍然可以适用于处理此大小的数据集。但是,它的准确性会受到限制。我们不会利用剩下的99%的数据中的信息。

如果数据足够,则深度学习方法可能更有效。它还允许通过使用不同的体系结构灵活地进行模型改进。因此,我们将尝试使用深度学习方法。

在这篇文章中,我们将学习如何使用简单的密集层自动编码器来构建罕见的事件分类器。这篇文章的目的是演示一个用于极端罕见事件分类的自动编码器的实现。我们将在用户身上探索自动编码器的不同架构和配置。如果您发现任何有趣的内容,请分享评论。

自动编码器用于分类

用于分类的自动编码器方法类似于异常检测。在异常检测中,我们学习了正常过程的模式。任何不遵循这种模式的东西都被归类为异常。对于罕见事件的二进制分类,我们可以使用类似的方法使用自动编码器(从此处[2]导出)。

快速修订:什么是自动编码器?

  • 自动编码器由两个模块组成:编码器和解码器。
  • 编码器学习过程的基本特征。这些特征通常在一个简化的维度中。
  • 解码器可以从这些底层特征中重建原始数据。
实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

图1.自动编码器的图示

如何使用自动编码器为稀有事件分类?

  • 我们将数据分为两部分:正标记和负标记。
  • 带负标记的数据被视为流程的正常状态。正常状态是指该过程无事件。
  • 我们将忽略带正号的数据,并仅在负标记数据上训练自动编码器。
  • 这个自动编码器现在已经学习了正常过程的特性。
  • 一个训练有素的自动编码器将预测任何来自正常状态的新数据(因为它将具有相同的模式或分布)。
  • 因此,重建误差会很小。
  • 但是,如果我们尝试从稀有事件重建数据,则自动编码器会很困难。
  • 这将使罕见事件期间的重构误差变高。
  • 我们可以捕获如此高的重建误差,并将其标记为罕见事件预测。
  • 该过程类似于异常检测方法。

履行

数据和问题

这是来自纸浆和造纸厂的二进制标记数据,用于断纸。纸张断裂是纸张制造中的一个严重的问题。单张纸张破损会造成数千美元的损失,而且工厂每天至少会看到一次或多次断片。这导致每年数百万美元的损失和工作危险。

由于过程的性质,检测中断事件是具有挑战性的。正如[1]中所述,即使断裂减少5%也会给工厂带来显著的好处。

我们的数据包含了15天内收集的大约18k行数据。列y包含二进制标签,其中1表示分页符。其余列是预测变量。大约有124个阳性标记样本(~0.6%)。

代码

导入所需的库。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

请注意,我们正在设置随机种子的重现性的结果。

数据预处理

现在,我们读取并准备数据。

df = pd.read_csv("data/processminer-rare-event-mts - data.csv")

这种罕见事件的目的是在碎片发生之前就预测它。我们将尝试提前4分钟预测休息时间。要构建此模型,我们将标签向上移动2行(相当于4分钟)。

df.y = df.y.shift(-2)

现在,我们将数据分为训练集、有效集和测试集。然后我们将仅使用0的数据子集来训练自动编码器。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

标准化

对于自动编码器,通常最好使用自动编码器的标准化数据(转换为高斯、平均值为0和方差1)。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

自动编码器分类器

初始化

首先,我们将初始化自动编码器架构。我们正在构建一个简单的自动编码器,应该探索更复杂的架构和其他配置。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

训练

我们将训练模型并将其保存在一个文件中。保存经过训练有素的模型是为将来的分析节省时间的好实践。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类
实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

图2.自动编码器训练的损失

分类

在下文中,我们将展示如何将自动编码器重建错误用于罕见事件分类。

如前所述,如果重构错误很高,我们会将其归类为分页符。我们需要确定这个门槛。

我们将使用验证集来确定阈值。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

图3.阈值0.8应该在精确度和召回率之间提供合理的权衡

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

现在,我们将对测试数据进行分类。

我们不应该从测试数据估计分类阈值。这会导致过度拟合。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类
实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

在图4中,阈值线上方的橙色和蓝色点分别代表真阳性和假阳性。 我们可以看到,我们有很多误报。 为了看得更清楚,我们可以看到一个混淆矩阵。

实操讲解:使用Keras中的自动编码器进行极端罕见事件分类
实操讲解:使用Keras中的自动编码器进行极端罕见事件分类

图5.测试预测的混淆矩阵

我们可以预测21次休息中的4次。大约25%的召回率,这对造纸业来说是一个很好的召回率。假阳性率约为7%。这对于工厂来说并不理想,但也不可怕。

尽管如此,这个模型还可以进一步改进,在假阳性率较小的情况下提高召回率。

Github存储库(GitHub – cran2367/autoencoder_classifier: Autoencoder model for rare event classification

这里显示了有带注释的整个代码。

这里有什么可以做得更好的?

这是一个(多元)时间序列数据。我们没有考虑数据中的时间信息/模式。在下一篇文章中,我们将探讨使用RNN是否可行。我们将尝试一个LSTM自动编码器。

结论

我们研究了来自造纸厂的极端罕见事件二进制标记数据,以构建自动编码器分类器。我们达到了合理的精度。这里的目的是演示如何使用基本的自动编码器进行罕见的事件分类。我们将进一步开发其他方法,包括可以提取时间特征以获得更高精度的LSTM自动编码器。

Image placeholder
tangzwgo
未设置
  93人点赞

没有讨论,发表一下自己的看法吧

推荐文章
使用kubei一步部署k8s高可用集群(包含docker安装、k8s组件安装、master初始化和加入nodes节点)

kubei(kubernetesinstaller)是一个go开发的用来部署kubernetes高可用集群的命令行工具,该工具可在Windows、Linux、Mac中运行kubei原理:通过ssh连接

网络工程师眼中的自动化运维

本文从一名网工从业者的角度出发,探讨了在企业网运维过程中,网络工程师可以用什么样的工具让网络更加透明高效。上篇文章回顾:ApacheRanger——HadoopACL控制工具引言“网络就像wifi,没

CSS选择器进阶笔记

后代选择器 ulli{};ul下的所有li后代 div>a{};div下一级子元素a,直接关系。p+span{};兄弟,同级第一个元素。p~span{};p所有的同级span。

CSS选择器进阶笔记

伪类选择器,冒号定义。通过元素的状态操作元素的样式。动态 :link超链接未被访问前的样式:visted超链接被访问前的样式 :hover鼠标悬停在元素的样式:active鼠标按下在元素的样式 lvh

CSS选择器进阶笔记

div:not(.d1){};div标签中除了class等于d1的是所有元素。li:first-child;父元素的第一个子元素,被选择元素为第一个子元素。第一个子元素为li的元素。 li:last-

如何应对Kubernetes中的存储管理挑战?

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。对于那些工作负载多样化、不断变化的企业来说,使用Kubernetes是非常有利的。与容器一样,

数据库中间件分片算法之stringhash

前言又是一个夜黑风高的晚上,带上无线耳机听一曲。突然很感慨一句话:生活就像心电图,一帆风顺就证明你挂了。就如同我们干运维的,觉得很简单的事情,有时候能干出无限可能。还是言归正传吧,这一次我们来说说st

Vue.js中的无渲染行为插槽

在本文中我们讨论Vue中的无渲染插槽模式能够帮助解决哪些问题。在Vue.js2.3.0中引入的作用域插槽显著提高了组件的可重用性。无渲染组件模式应运而生,解决了提供可重用行为和可插入表示的问题。在这里

Vuejs中的监察院"watch"

最近刚刚追完庆余年,心思还总是在剧情里,然后就觉得在vuejs里watch就是监察院,一个不折不扣的特务机构。在Vue中watch被称为监听者,它随时观察这vue实例中每一个数据的变化,当数据发生改变

js中的高阶函数

高阶函数高阶函数是函数式编程的一种代码实现方案,一般把接受一个或多个函数作为参数,或者返回一个函数的函数叫做高阶函数。js中最常见的一些高阶函数如闭包(返回函数),一些内置函数(传入函数)等。Arra

了解Node.js中的流(Stream)

Node.js中的流(Stream)是出了名的难用甚至是难以理解。用DominicTarr的话来说:“流是Node中最好的,也是最容易被误解的想法。”即使是Redux的创建者和React.js的核心团

如何使用TensorFlow机器学习对图像进行分类?

本文将介绍如何使用迁移学习使用TensorFlow机器学习平台对图像进行分类。在机器学习环境中,迁移学习是一种技术,使我们能够重用已经训练的模型并将其用于另一个任务。图像分类是将图像作为输入并为其分配

关于 Python3 的编码(walker)

Python3中str与bytes的转换Thebytes/strdichotomyinPython3字符与Unicode编号之间的转换字符转Unicode编号>>>ord('A') 65 >>>hex

hover在css中有什么用?

hover在css中有什么用?以下是我总结出的hover在css中的作用,供各位参考:修改鼠标悬浮时a标签的颜色使用hover实现悬浮显示二维码仿html元素的title属性效果给网页增加动效,如鼠标

雅虎数据泄露事件后续:拟1.175亿美元进行赔偿

对于雅虎数据泄露事件,相信大家都不会陌生,甚至不少企业都将雅虎数据泄露事件作为警示,纷纷加强网络安全建设工作。雅虎(Yahoo)目前隶属于Verizon通信公司,近年来也可谓是吃尽了苦头,接二连三的数

2019全球PostgreSQL生态报告出炉,PG为何从RDBMS中脱颖而出?

墨墨导读:本文是近期ScaleGrid发布的2019PG趋势报告,从不同的角度解读了PostgreSQL如何在众多优秀的RDBMS中脱颖而出,原文:https://scalegrid.io/blog/

技术峰会归来,AWS中国赢在何处?

摘要:以『即刻构建』为主题的AWS技术峰会2019,其目的是为了推进企业上云,让企业上云不再只是一个想法,而是立即行动起来变成事实。这与此前结束的阿里云峰会,阿里云喊出“全面上云的拐点到来”异曲同工。

js中如何引入css文件以及路径问题

js中如何引入css文件以及路径问题一、在js中引入css文件的方法:1、通过document.createElement方法创建link标签;2、通过setAttribute方法设置link标签的c

css中怎么把图片颜色反转

css中怎么把图片颜色反转css把图片颜色反转可以使用invert滤镜效果,invert滤镜就是为了设置元素的反色效果,它的值设置范围为:0-100%,100%为完全反色,0为显示正常的颜色。.nor

css中Position属性图文详解

1.介绍1.1说明Position属性:规定元素的定位类型。即元素脱离文档流的布局,在页面的任意位置显示。1.2主要的值①absolute:绝对定位;脱离文档流的布局,遗留下来的空间由后面的元素填充。

css中怎么设置没有内容时高度为0

css中怎么设置没有内容时高度为0默认情况下HTML元素没有内容时,高度就是0,不需要手动设置。但这时有些元素仍然具有margin属性,这会对其他元素造成影响,如p标签。(相关课程推荐:css视频教程

css中ul怎么定位

css中ul怎么定位css中所有的元素默认都是static定位,要改变ul的定位方式,我们只需要指定元素的cssposition属性即可。关于定位的几种方式1、static定位(普通流定位)--默认定

css中背景透明的图片不透明怎么解决

css中背景透明的图片不透明怎么解决一、使用滤镜解决img{ background:transparent; -ms-filter:"progid:DXImageTransform.Microsoft

asp怎么调用css中样式

asp怎么调用css中样式asp调用外部css文件有以下三种方式:1、link链接方式在需要调用的asp文件中写入一下语句:(相关课程推荐:css视频教程)2、@import导入方式在需要调用的asp