异常检测-自编码

本文记录的目的是方便自己学习和复习,有误之处请谅解,欢迎指出。

    我们日常项目中经常会遇到数据不均衡的情况,这非常普遍,例如某动物分类项目的类别数量占比为300:100:900:500,直接训练模型会导致模型偏向数量多的一类,个人认为模型偏向一侧的原因是:由于数量较多的类别,每次被传递调整的损失就较多,而其他类别可能还没被完全训练好,该类已经完成拟合,如何解决呢?常用的解决方法:增加数据、上采样、下采样以及调整类别权重(Focal Loss)等,可以一定程度解决问题。

      但是还有种非常极端不均衡情况,如类别数量比10W:1的二分类,这可以被认为是异常检测范畴,上述解决方法并不能很好的解决此问题。

      对于异常检测,之前有写过一篇粗略介绍异常检测的文章。今天再记录另外两种异常检测算法——自编码和SVDD(one class svm).

      (1) 自编码

      自编码是一个BP神经网络,模型的输入层和输出层的神经元数量一致,中间层可以有多层,一般中间层的节点个数比输出层少,中间层相当于是对数据进行压缩和抽象,到恢复重建,实现无监督方式学习数据的抽象特征。

    训练自编码只需要正样本数据,没有负样本数据,或者说模型只关注正样本的规律,利用正样本从输入数据-提取特征-恢复数据的方式训练一个自编码器,编码器相当于单分类的模型,对全量数据进行预测时,然后比较输入层和输出层的相似度就可以判断是否属于异常样本,相似度阈值自行设置。

     截取一张模型构建和训练过程的代码图,简单看看应该能比较清楚的理解这个过程

    下图是正样本和负样本的相似度图。能明显观察到异常样本的重构误差的分布不同于正常样本,异常样本的重构误差明显更大。那么我们可以设置一个阈值,超过阈值的样本是异常的,而不超过阈值的样本是正常的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容