专栏首页嘘、小点声按部就班的吴恩达机器学习网课用于讨论(13)

按部就班的吴恩达机器学习网课用于讨论(13)

异常检测-问题动机

为了进行数据条目的异常检测(正样本很少的二分类问题),使用密度估计的方法,在每条数据中,每个x的特征可能性为?(?)。

当模型概率?(?)累乘值小于epsilon,则认为是一条异常条目。在下图中,数据集中的中心区域,其概率累乘p则大一些,更可能是正常的样本。

高斯分布

高斯分布也是正态分布,其均值mu,方差sigma^2。 其主要描述是,如下中文笔记参考:其中~为服从的意思,即x服从N正态分布。

均值和方差的计算过程,也在以下有详述。当方差大,则分布更宽,当方差小,则中心的均值概率密度更高。

如下是正态分布一些参数与图形对应的关系。其面积为1,并为对称形式。

算法

详细的算法如下图中,根据数据选择特征后,根据数据计算出mu和sigma^2。sigma^2计算过程直接可以使用矩阵方式。

计算完成后,再来一个检测样本,根据之前得到的mu和sigma,得到该检测样本的p值。当p小于某个数,即密度估计不够,则认为是一条异常。

开发和评价一个异常检测系统

在数据集的选择方面,仍然是6,2,2,方式,将正常的数据集分为训练集,验证集,测试集。异常的数据集放到验证集和测试集中。验证集和测试不要混用,数据内容应该保持不同。

根据训练集得到mu和sigma后,在验证集上,使用不同的epsilon作为阈值,预测数据是否异常,使用F1-score或查准、查全率等作为度量,来得到一个较好的epsilon。

选出epsilon后,在测试集上测试,使用相同的方法进行度量,得到模型的评价。

异常检测与监督学习对比

下图是对比,最显著的是,异常检测的正样本数量明显更少,而且正样本的可能会是一个从来没有见过的样本。

认为:欺诈行为检测,发动机生产,计算机运行情况等方向,是异常检测。而邮件过滤,天气预报,肿瘤分类,则是监督学习。

选择特征

首先是当特征的分布不是高斯分布的时候,可以通过开方或求对数的方法,将数据转换为高斯分布。选择开方或log的参数时,通过多次取值,绘图查看是否符合要求。

一般情况,当p小于epsilon时,为异常样本。但是当p大于epsilon,即该样本的密度估计值和正常样本无异,却为异常样本,则应该考虑增加样本的特征。

这些特征是根据分析得到的,可以通过已知特征的线性组合新的特征。该新的特征当异常大或者异常小(即与正常样本的值不同),则认为是可能的异常样本。

在如下所示的例子中,当特征x4的影响使得x3变大,则是一个正常的现象。而x4没有影响却有x3变大,则不正常。

将x3/x4或x3^2/x4作为一个新的特征,表明了该cpu负载导致的结果与网络交通无关,比值异常大则为异常样本。

多元高斯分布

在两个相关的特征形成的数据集中,异常检测因普通的高斯分布模型而不能很好识别异常数据。下图中,正圆为一般高斯分布,斜椭圆为多元高斯分布。后者更能拟合数据。

多元高斯分布的计算过程如下:和一般高斯分布中p的累乘不同,这里计算得到mu后,则计算协方差。其中,x-mu大小为n行1列吧(等号前面的部分)。X-mu为n行m列。

协方差矩阵sigma为n*n的特征大小的矩阵。通过协方差矩阵和mu向量,得到最终的p。

多元高斯分布的对应图如下:可以看出多元高斯分布通过协方差,能够自动得到特征之间的相关性。

使用多元高斯分布进行异常检测

使用过程如下图:通过训练集计算得到mu和sigma,其中sigma为n*n的矩阵。(每一列表示一条数据,每一行是一个特征n)。在测试过程中,使用x代入得到p,p小于epsilon,则为异常值。

多元高斯分布和原始高斯分布的关系中,p的计算方式总结如下:其中多元高斯分布中sigma为n*n矩阵。原始模型是多元模型的一种特例。

下两图是原始模型和多元高斯模型的比较,其中,原始模型针对数据特征之间的关系,需要手动处理,如进行特征之间的相除等(之前介绍过),但是其计算成本低。

多元高斯模型通过协方差获得了特征之间的相关性,但是其sigma在进行求逆的过程中,会比较耗时,尤其是在特征n比较大的时候。

另外,当数据量m远远大于特征n的时候,多元高斯模型才进行应用。数学观点上认为,当m>n时候,才有sigma的逆矩阵。尽管如此,数据量只是稍大一点,也没有必要使用多元高斯模型。在实际数据集中,有各种各样的冗余特征,那么,当数据量远远大于特征,才应用多元高斯分布。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python网络爬虫(5)BeautifulSoup的使用示范

    结点中的contents输出直接子节点数组,可以通过for逐个输出,通过string属性直接输出内容

    嘘、小点声
  • 按部就班的吴恩达机器学习网课用于讨论(10)

    比如在一个肿瘤预测的问题上,当大量的样本为负样本(实际上没有肿瘤99.5%),只有少数的样本为正样本(实际存在肿瘤0.5%)。那么评判一个机器学习模型的指标,就...

    嘘、小点声
  • 按部就班的吴恩达机器学习网课用于讨论(12)

    将二维数据降低到一维数据的方法,有直接替换的方法。下图中,将数据条目的二维特征x1,x2,转化为了一维特征z1。其中,x1和x2是直接相关的(因为四舍五入出现了...

    嘘、小点声
  • 这个男人嫁还是不嫁?懂点朴素贝叶斯(Naive Bayes)原理让你更幸福

    达观数据
  • The Clean Architecture in PHP 读书笔记(七)

    MVC的关键是给我们提出了一个原则:怎么对项目进行合理的关注点分离。Model负责业务领域,controller负责对model进行工作安排,而view则负责门...

    zhuanxu
  • Angular的scope. apply和CRM WebClient UI的modify方法

    在每一次Javascript代码执行序列执行结束后,Angular都去检查绑定的数据是否发生改变,通过调用scope.apply完成。scope. apply最...

    Jerry Wang
  • Linux如何查看进程栈信息示例

    今天在Linux上调试程序程序的时候发现有时候程序会莫名其妙的hang住,于是就想能不能找到当时程序有那些线程,都在做什么。找了一下linux命令,还真可以满足...

    砸漏
  • 太牛逼了,Markdown 几行字符就可以生成思维导图了!

    刚开始的文章排版很乱,Markdown 编辑器这东西也从来没听说过,随着时间的流逝,认识了业界内的大佬,从中吸取了经验,后来我才开始逐步抛弃富文本编辑器,拥抱 ...

    杰哥的IT之旅
  • S/4HANA中的销售计划管理

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • Linux查看进程栈信息

    kongxx

扫码关注云+社区

领取腾讯云代金券