auto-encoder异常检测的问题,无标签情况下怎么进行预测?

  统计/机器学习 无监督学习 深度学习 数据预处理    浏览次数:4429        分享
0

看到最新的一期auto encoder用于信用卡欺诈检测,进行重建误差的时候,已明确具体的正负样本,即数据是存在label标签的,这样子绘制reconstruction的mse、mae确实很清楚的看到欺诈样本的误差较大。但在数据集没有label的情况下怎么进行预测测试集中的欺诈样本呢,或者说怎么设定reconstruction MSE/MAE的threshold呢,通过threshold来确定?

 

yinni   2019-01-18 15:03



   2个回答 
4

这里有两个步骤:

1. 先unsupervised learning,训练一个autoencoder得到MSE score。MSE=autoencoder(x)。loss中只有input$x$,并没有label$y$。

2.再根据MSE得到一个binary classifier,目的是确定一个threshold让总体error最小。比如下图中横轴是MSE。最终目的是让typeI和type II error的加权和最小。

$argmin_c [w_0 \int p(MSE>c|y=0) + w_1 \int p(MSE>c|y=1)]$

如果对positive/negative平均看待,$w_1=P(y=1),w_0=P(y=0)$。也可以另外建模。

如果已知$y$,可以估计$p(MSE|y=1)$和$p(MSE|y=0)$。否则只能假设这两个分布。粗糙一点,也可以人为设定$c$,比如$P(MSE>c)=0.001$。


-----------------------------------------------------------------

第一步应用autoencoder中,有个假设是negative 和positive的pattern不同:在某个基(basis)坐标系中positive是远离negative的clusters。只要找到一个basis,能很好表达negative,并且很大概率不能很好表达positive,这样就能在这个basis上区分positive/negative。

autoencoder学习的是数据的nonlinear sparse representation,中间层的Z code就是一个m维的非线性basis。假设要表达所有positive/negative需要n维,[z1,z2,...zn],而表达negative只需要m维,m因为数据中negative占绝大多数,所以autoencoder主要学习negative的pattern,很大概率会忽略positive的需求。

举个例子,一只猪混到一群猴子中,而且对它们只进行爬树的考试。最后根据爬树的结果,很容易就把猪找出来了。而autoencoder学习的是如何在[吃饭,跑步,爬树,跳高,...]等考试中把爬树找出来。


SofaSofa数据科学社区DS面试题库 DS面经

Zealing   2019-01-19 01:40

谢谢老哥,醍醐灌顶 - yinni   2019-01-21 11:11
2

好像的确挺不好办的,很多时候非监督学习也是有ground truth的。但是如果完全不知道真实情况的非监督异常检验,那就只能凭直觉或者应用场景了。

比如你知道0.1%的信用卡有异常,那么你的threshold就可以选择重建误差最大的0.05%或者0.1%,基于你是想保守点还是冒险点了。

SofaSofa数据科学社区DS面试题库 DS面经

WinJ   2019-01-18 15:14

谢谢老哥回答, 之前也有这样想过。虽然合理,但觉得还是简单了些。 - yinni   2019-01-21 11:13


  相关讨论

学习auto-encoder, 自己写的demo, 关于拟合的问题,帮忙看下loss-acc图?

关于autoencoder做无监督学习的验证问题

autoencoder 架構問題

离群点、孤立点、异常点有什么区别吗?

单一变量下的异常检测该怎么做?

如果数据不是正态分布,能用3sigma原则剔除异常值吗?

在训练前数据处理的时候,怎么剔除异常值?

kNN用来做异常点检测?

如果不去掉异常值(outlier),会对线性回归模型有什么影响?

学习曲线异常分析

  随便看看

逻辑回归模型中变量的系数怎么理解?

前馈神经网络如何选择隐藏层的数量

Python的Jupyter Notebook环境下怎么制作一个动态显示的进度条?

行数很多的pandas DataFrame如何在jupyter中完整显示?

cvr和ctr的区别是什么?