xiaomiaomi 2019-05-07
在这篇文章中,我们将学习如何实现用自动编码器来构建稀有事件分类器。我们将使用来自此处的真实稀有事件数据集。
背景
什么是极端罕见的事件?
在一个罕见的问题中,我们有一个不平衡的数据集。意思是,我们得到的阳性标记样本少于阴性。在典型的罕见事件问题中,带正号的标记数据约占总数的5-10%。在一个极端罕见的事件问题中,我们的标记数据不到1%。例如,在这里使用的数据集中,它约为0.6%。
这种极端罕见的事件问题在现实世界中非常普遍,例如,在制造、点击或在线行业购买时的纸张断裂和机器故障。
对这些罕见事件进行分类非常具有挑战性,深度学习已被广泛用于分类。但是,少量阳性标记样本禁止深度学习应用。无论数据有多大,深度学习的使用都受到正面标记样本数量的限制。
我们为什么还要费心使用深度学习呢?
这是一个合理的问题。为什么我们不应该考虑使用另一种机器学习方法?
答案是主观的。我们总是可以采用机器学习方法。为了使其工作,我们可以从负面标记的数据中取样,以获得接近平衡的数据集。由于我们有大约0.6%的正标记数据,因此欠采样将导致数据集的大小大约是原始数据大小的1%。机器学习方法,例如SVM或随机森林仍然可以适用于处理此大小的数据集。但是,它的准确性会受到限制。我们不会利用剩下的99%的数据中的信息。
如果数据足够,则深度学习方法可能更有效。它还允许通过使用不同的体系结构灵活地进行模型改进。因此,我们将尝试使用深度学习方法。
在这篇文章中,我们将学习如何使用简单的密集层自动编码器来构建罕见的事件分类器。这篇文章的目的是演示一个用于极端罕见事件分类的自动编码器的实现。我们将在用户身上探索自动编码器的不同架构和配置。如果您发现任何有趣的内容,请分享评论。
自动编码器用于分类
用于分类的自动编码器方法类似于异常检测。在异常检测中,我们学习了正常过程的模式。任何不遵循这种模式的东西都被归类为异常。对于罕见事件的二进制分类,我们可以使用类似的方法使用自动编码器(从此处[2]导出)。
快速修订:什么是自动编码器?
图1.自动编码器的图示
如何使用自动编码器为稀有事件分类?
履行
数据和问题
这是来自纸浆和造纸厂的二进制标记数据,用于断纸。纸张断裂是纸张制造中的一个严重的问题。单张纸张破损会造成数千美元的损失,而且工厂每天至少会看到一次或多次断片。这导致每年数百万美元的损失和工作危险。
由于过程的性质,检测中断事件是具有挑战性的。正如[1]中所述,即使断裂减少5%也会给工厂带来显著的好处。
我们的数据包含了15天内收集的大约18k行数据。列y包含二进制标签,其中1表示分页符。其余列是预测变量。大约有124个阳性标记样本(~0.6%)。
代码
导入所需的库。
请注意,我们正在设置随机种子的重现性的结果。
数据预处理
现在,我们读取并准备数据。
df = pd.read_csv("data/processminer-rare-event-mts - data.csv")
这种罕见事件的目的是在碎片发生之前就预测它。我们将尝试提前4分钟预测休息时间。要构建此模型,我们将标签向上移动2行(相当于4分钟)。
df.y = df.y.shift(-2)
现在,我们将数据分为训练集、有效集和测试集。然后我们将仅使用0的数据子集来训练自动编码器。
标准化
对于自动编码器,通常最好使用自动编码器的标准化数据(转换为高斯、平均值为0和方差1)。
自动编码器分类器
初始化
首先,我们将初始化自动编码器架构。我们正在构建一个简单的自动编码器,应该探索更复杂的架构和其他配置。
训练
我们将训练模型并将其保存在一个文件中。保存经过训练有素的模型是为将来的分析节省时间的好实践。
图2.自动编码器训练的损失
分类
在下文中,我们将展示如何将自动编码器重建错误用于罕见事件分类。
如前所述,如果重构错误很高,我们会将其归类为分页符。我们需要确定这个门槛。
我们将使用验证集来确定阈值。
图3.阈值0.8应该在精确度和召回率之间提供合理的权衡
现在,我们将对测试数据进行分类。
我们不应该从测试数据估计分类阈值。这会导致过度拟合。
在图4中,阈值线上方的橙色和蓝色点分别代表真阳性和假阳性。 我们可以看到,我们有很多误报。 为了看得更清楚,我们可以看到一个混淆矩阵。
图5.测试预测的混淆矩阵
我们可以预测21次休息中的4次。大约25%的召回率,这对造纸业来说是一个很好的召回率。假阳性率约为7%。这对于工厂来说并不理想,但也不可怕。
尽管如此,这个模型还可以进一步改进,在假阳性率较小的情况下提高召回率。
Github存储库(GitHub - cran2367/autoencoder_classifier: Autoencoder model for rare event classification)
这里显示了有带注释的整个代码。
这里有什么可以做得更好的?
这是一个(多元)时间序列数据。我们没有考虑数据中的时间信息/模式。在下一篇文章中,我们将探讨使用RNN是否可行。我们将尝试一个LSTM自动编码器。
结论
我们研究了来自造纸厂的极端罕见事件二进制标记数据,以构建自动编码器分类器。我们达到了合理的精度。这里的目的是演示如何使用基本的自动编码器进行罕见的事件分类。我们将进一步开发其他方法,包括可以提取时间特征以获得更高精度的LSTM自动编码器。
编译出品