zoukankan      html  css  js  c++  java
  • 机器学习——异常值检测

    机器学习——异常检测


    在生产生活中,由于设备的误差或者人为操作失当,产品难免会出现错误。然后检查错误对人来说又是一个十分琐碎的事情。利用机器学习进行异常值检测可以让人类摆脱检错的烦恼。

    检测算法

    • 1.选定容易出错的(n)个特征({x_1^{(i)},x_2^{(i)},ldots,x_n^{(i)}})作为变量。
    • 2.计算m个样本的平均值和方差。

    [{mu_j} = {1 over m}sumlimits_{i = 1}^m {x_j^{(i)}} ]

    [{sigma ^2} = {1 over m}sumlimits_{i = 1}^m {(x_j^{(i)}} - {mu _j}{)^2} ]

    • 3.给定监测点(x).计算(p(x))

    [p(x) = prod limits_{j = 1}^n {p({x_j};{mu_j},sigma_j^2)} ]

    • 4.如果(p(x)< epsilon),则为异常值;反之,不是。

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

    异常检测算法是一个非监督学习算法,意味着我们无法通过结果变量判断我们的数据是否异常。所以我们需要另一种方法检测算法是否有效。当我们开发一个系统时,我们从有标签(知道是否异常)的数据入手,从中找出一部分正常数据作为训练集,剩余的正常数据和异常数据作为交叉检验集和测试集。

    具体评价方法如下:

    • 根据测试集数据,估计出特征的平均值和方差,构建(p(x))函数
    • 对于交叉检验集,尝试使用不同的(epsilon)最为阈值,并预测数据是否异常,根据F1值或者查准率与查全率的比例来选择(epsilon)
    • 选出(epsilon)后,针对测试集进行预测,计算异常检验系统的F1值或者查准率与查全率之比

    异常检测与监督学习对比

    异常检测 监督学习
    大量的正常值(y=0)和少量的异常值(y=1) 大量的正向类(y=0)和少量的负向类(y=1)
    异常数据太少,只能根据少量数据进行训练 有足够多的正向和负向数据以供训练
    举例:1.欺诈行为检测;2.生产废品检测;3.检测机器运行状态 举例:1.邮箱过滤器;2.天气预报;3.肿瘤分类

    分布的处理

    • 对于高斯分布的数据,直接运用以上算法就好。
    • 但是对于非高斯分布的数据,虽然也可是使用上面的算法,但是效果不是很好,所以我们尽量将非高斯分布转化成(近似)高斯分布,然后再进行处理。
    • 数据整体偏小,可以求(ln(x))或者(x^a,0<a<1)
    • 数据整体偏大,可以求(e^x)或者(x^a,a>1)

    误差分析

    在误差分析中,如果我们可以发现我的选定的变量是否合适,进而进行相应的改正。如左图所示,异常点(x)对应的概率很高,显然这种分布方式不能很好地识别出异常值。所以我们尝试增加变量或者改变变量的类型来识别异常值。如右图所示,通过增加一个变量,我们能够更好地识别异常点。所以,误差分析对于一个问题来说还是很重要的。

  • 相关阅读:
    利用.net Core 对程序集中的类 进行统一依赖注入
    接口中定义异步的方法
    在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi
    在vs2017 版本15.7.6中不支持2.1.0以上版本的net core sdk
    在.net core不同的版本中 webabi引用的包不同
    SQL语句中使用Group by
    DDD实战12 值对象不创建表,而是直接作为实体中的字段
    src与href的区别。
    cookies,sessionStorage 和 localStorage 的区别
    javascript阻止事件冒泡和浏览器的默认行为
  • 原文地址:https://www.cnblogs.com/connorzx/p/4729353.html
Copyright © 2011-2022 走看看