异常检测——高维数据异常检测

主要内容包括:

  • Feature Bagging
  • 孤立森林

文章目录

  • 异常检测——高维数据异常检测
  • 1、引言
  • 2、Feature Bagging
  • 3、Isolation Forests
  • 4、总结
  • 5、练习
  • 6、参考文献

1、引言

在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。例如基于邻近度的方法是在所有维度使用距离函数来定义局部性,但是,在高维空间中,所有点对的距离几乎都是相等的(距离集中),这使得一些基于距离的方法失效。在高维场景下,一个常用的方法是子空间方法。

集成是子空间思想中常用的方法之一,可以有效提高数据挖掘算法精度。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。

两种常见的集成方法:

2、Feature Bagging

Feature Bagging,基本思想与bagging相似,只是对象是feature。feature bagging属于集成方法的一种。集成方法的设计有以下两个主要步骤:

1.选择基检测器。这些基本检测器可以彼此完全不同,或不同的参数设置,或使用不同采样的子数据集。Feature bagging常用lof算法为基算法。下图是feature bagging的通用算法:

2.分数标准化和组合方法:不同检测器可能会在不同的尺度上产生分数。例如,平均k近邻检测器会输出原始距离分数,而LOF算法会输出归一化值。另外,尽管一般情况是输出较大的异常值分数,但有些检测器会输出较小的异常值分数。因此,需要将来自各种检测器的分数转换成可以有意义的组合的归一化值。分数标准化之后,还要选择一个组合函数将不同基本检测器的得分进行组合,最常见的选择包括平均和最大化组合函数。

下图是两个feature bagging两个不同的组合分数方法:

基探测器的设计及其组合方法都取决于特定集成方法的特定目标。很多时候,我们无法得知数据的原始分布,只能通过部分数据去学习。除此以外,算法本身也可能存在一定问题使得其无法学习到数据完整的信息。这些问题造成的误差通常分为偏差和方差两种。

方差:是指算法输出结果与算法输出期望之间的误差,描述模型的离散程度,数据波动性。

偏差:是指预测值与真实值之间的差距。即使在离群点检测问题中没有可用的基本真值

3、Isolation Forests

孤立森林(Isolation Forest)算法是周志华教授等人于2008年提出的异常检测算法,是机器学习中少见的专门针对异常检测设计的算法之一,方法因为该算法时间效率高,能有效处理高维数据和海量数据,无须标注样本,在工业界应用广泛。

孤立森林属于非参数和无监督的算法,既不需要定义数学模型也不需要训练数据有标签。孤立森林查找孤立点的策略非常高效。

假设我们用一个随机超平面来切割数据空间,切一次可以生成两个子空间。然后我们继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了。孤立森林认为这些很快被孤立的点就是异常点。

用四个样本做简单直观的理解,d是最早被孤立出来的,所以d最有可能是异常。

怎么来切这个数据空间是孤立森林的核心思想。

因为切割是随机的,为了结果的可靠性,要用集成(ensemble)的方法来得到一个收敛值,即反复从头开始切,平均每次切的结果。孤立森林由t棵孤立的数组成,每棵树都是一个随机二叉树,也就是说对于树中的每个节点,要么有两个孩子节点,要么一个孩子节点都没有。

树的构造方法和随机森林(random forests)中树的构造方法有些类似。流程如下:

  1.  从训练数据中随机选择一个样本子集,放入树的根节点;
    
  2.  随机指定一个属性,随机产生一个切割点V,即属性A的最大值和最小值之间的某个数;
    
  3.  根据属性A对每个样本分类,把A小于V的样本放在当前节点的左孩子中,大于等于V的样本放在右孩子中,这样就形成了2个子空间;
    
  4.  在孩子节点中递归步骤2和3,不断地构造左孩子和右孩子,直到孩子节点中只有一个数据,或树的高度达到了限定高度。
    

获得t棵树之后,孤立森林的训练就结束,就可以用生成的孤立森林来评估测试数据。

孤立森林检测异常的假设是:
异常点一般都是非常稀有的,在树中会很快被划分到叶子节点,因此可以用叶子节点到根节点的路径长度来判断一条记录是否是异常的。和随机森林类似,孤立森林也是采用构造好的所有树的平均结果形成最终结果的。在训练时,每棵树的训练样本是随机抽样的。

从孤立森林的树的构造过程看,它不需要知道样本的标签,而是通过阈值来判断样本是否异常。因为异常点的路径比较短,正常点的路径比较长,孤立森林根据路径长度来估计每个样本点的异常程度。

路径长度计算方法:

孤立森林也是一种基于子空间的方法,不同的分支对应于数据的不同局部子空间区域,较小的路径对应于孤立子空间的低维

4、总结

1.feature bagging可以降低方差

2.孤立森林的优势在于:

  • 计算成本相比基于距离或基于密度的算法更小。
  • 具有线性的时间复杂度。
  • 在处理大数据集上有优势。

孤立森林不适用于超高维数据,因为鼓励森林每次都是随机选取维度,如果维度过高,则会存在过多噪音。

5、练习

1.使用PyOD库生成toy example并调用feature bagging

from pyod.models.feature_bagging import FeatureBagging
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print
from pyod.utils.example import visualize# 使用生成样本数据pyod.utils.data.generate_data():contamination = 0.1  # percentage of outliers
n_train = 200  # number of training points
n_test = 100  # number of testing pointsX_train, y_train, X_test, y_test = generate_data(n_train=n_train, n_test=n_test, contamination=contamination)# 初始化检测器,拟合模型,然后进行预测。# train FeatureBagging detector
clf_name = 'FeatureBagging'clf = FeatureBagging()clf.fit(X_train)# get the prediction labels and outlier scores of the training data
y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_  # raw outlier scores# get the prediction on the test data
y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)
y_test_scores = clf.decision_function(X_test)  # outlier scores# 使用ROC和Precision @ Rank n评估预测pyod.utils.data.evaluate_print()。from pyod.utils.data import evaluate_print
# evaluate and print the results
print("\nFeatureBagging On Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nFeatureBagging On Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)
# 在培训和测试数据上查看示例输出。

# 通过可视化所有示例中包含的功能来生成可视化。
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,y_test_pred, show_figure=True, save_figure=True)

2.使用PyOD库生成toy example并调用Isolation Forests

# train Isolation Forests detector
clf_name = 'IsolationForest'
from pyod.models.iforest import IForestclf = IForest()clf.fit(X_train)# get the prediction labels and outlier scores of the training data
y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_  # raw outlier scores# get the prediction on the test data
y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)
y_test_scores = clf.decision_function(X_test)  # outlier scores# 使用ROC和Precision @ Rank n评估预测pyod.utils.data.evaluate_print()。from pyod.utils.data import evaluate_print
# evaluate and print the results
print("\nIsolationForest On Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nIsolationForest On Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)

# 通过可视化所有示例中包含的功能来生成可视化。
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,y_test_pred, show_figure=True, save_figure=True)

3.(feature bagging为什么可以降低方差?)

Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的variance(事实上,各模型的分布也近似相同,但不独立)。

若各子模型独立,则有
Var(∑Xin)=Var(Xi)nVar\left( \frac{\sum{X_i}}{n} \right) =\frac{Var\left( X_i \right)}{n} Var(n∑Xi​​)=nVar(Xi​)​
此时可以显著降低variance。

若各子模型完全相同,则
Var(∑Xin)=Var(Xi)Var\left( \frac{\sum{X_i}}{n} \right) =Var\left( X_i \right) Var(n∑Xi​​)=Var(Xi​)
此时不会降低variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。

参考文章为什么说bagging是减少variance,而boosting是减少bias?

4.(feature bagging存在哪些缺陷,有什么可以优化的idea?)

在高维或者大量数据的情况下bagging会损失一部分样本或者特征始终无法被采样也无法被模型训练到。

缺陷:

bagging的比例始终建议在0.5到0.99之间,特别是存在过多的相关性特征的情况下,bagging很容易不停的采样相关性很高的特征,比如100个特征中有80个相关性非常高的特征,则不管怎么采样这一组高相关特征总会进入到基模型的训练过程中,所以当引入bagging的时候,无论是异常检测集成还是随机森林或者是xgb、lgb、cab的列采样之前,都必须进行严格的相关性分析,人们常常忽视这一点因为很多时候大量相关性特征存在的情况并不多,但是一旦出现就会导致很差的bagging泛化性能的表现。

优化:

衍生出了rotated bagging,对数据进行采样之后使用主成分分析等方式进行rotate然后训练子模型。
就是每次采样之后得到的特征子集进行主成分分析然后再引入基学习器或者基检测器。

6、参考文献

[1]Goldstein, M. and Dengel, A., 2012. Histogram-based outlier score (hbos):A fast unsupervised anomaly detection algorithm . InKI-2012: Poster and Demo Track, pp.59-63.

[2]https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

[3]《Outlier Analysis》——Charu C. Aggarwal

异常检测——高维数据异常检测相关推荐

  1. php心跳检测实时数据,心跳检测 · swoole手册 · 看云

    # 心跳 注意:长链接应用必须加心跳,否则链接可能由于长时间未通讯被路由节点强行断开. 心跳作用主要有两个: 1.客户端定时给服务端发送点数据,防止连接由于长时间没有通讯而被某些节点的防火墙关闭导致连 ...

  2. 数据异常分析方法论总结

    走过路过不要错过 点击蓝字关注我们 数据异常分析作为数据分析日常工作中"再正常不过"的常规工作内容,经常出现在需求方的沟通消息中,"Hello,某某数据很异常啊,能查下原 ...

  3. 网络分流器-DPI深度数据包检测

    网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...

  4. 网络分流器-网络分流器-DPI深度数据包检测

    网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...

  5. 数据异常检测方法以及实际应用

    转载于: 已获得作者同意转载 关于数据的异常检测,看这一篇就够了 - 携程技术中心的文章 - 知乎 https://zhuanlan.zhihu.com/p/65023844 文章目录 前言 一.应用 ...

  6. 基于深度学习的日志数据异常检测

    基于深度学习的日志数据异常检测 数据对象 智能运维(AIOps)是通过机器学习等算法分析来自于多种运维工具和设备的大规模数据.智能运维的分析数据对象多源运维数据包括系统运行时数据和历史记录数据,历史记 ...

  7. 腾讯云TDSQL数据库核心技术理论取得进展 ,同时发布数据异常检测工具

    近日,腾讯云和中国人民大学在数据库基础研究上有了进展,聚焦在"数据异常"领域,这是数据库可串行化理论体系中的重要概念. 数据异常是打开并发访问控制技术大门的金钥匙.在数据库行业中, ...

  8. Yahoo大规模时列数据异常检测技术及其高性能可伸缩架构

    本文已经在InfoQ首发 本文是Yahoo在ACM国际会议上发布的一篇关于时序数据自动异常检测上的学术论文,对在智能监控尤其是趋势预测.异常数据监测和报警等方面的技术同学具有一定研究和参考价值,以下是 ...

  9. Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索、模型初探

    Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索.模型初探 1 前言 分类和回归是强大易学的机器学习技术.需要注意的是:为了对新的样本预测未知的值, 必须从大量已知目标值的样 ...

最新文章

  1. MindSpore基准性能
  2. .NET Core 6.0之读取配置文件
  3. systemstap 脚本 内核开发必备技能 基础讲解 (一)
  4. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc
  5. Linux内核地址空间为什么1GB,为什么Windows为其系统地址空间预留1Gb(或2 Gb)?
  6. mysql 手动配置服务器_Win7系统下手动配置Apache+PHP+MySQL环境WEB服务器 -电脑资料...
  7. java 单例 读写锁_你用对锁了吗?浅谈 Java “锁” 事
  8. 第三方支付将出新规 严防信用卡套现
  9. 无聊的三月终于过去了
  10. 11月23日python笔记(python基础2.6-3.0)
  11. Google 出品的 Java 编码规范和编程指南,权威又科学,强烈推荐
  12. python语言规范_python语言规范
  13. 微软的补丁服务器,Microsoft 安全公告 MS17-010 - 严重
  14. 我的世界java作弊怎么开_我的世界怎么开作弊?如何启用作弊模式?
  15. Mac 怎样安装虚拟机(VMware fusion 12)
  16. 【WebGoat习题解析】Parameter Tampering-Bypass HTML Field Restrictions
  17. [计算机数值分析]四阶龙格-库塔经典格式解常微分方程的初值问题
  18. luogu 3373 线段树懒标记维护乘与加
  19. 限制网页只能在微信浏览器打开
  20. JavaScript 实现异步任务调度器

热门文章

  1. 华为P6刷机包 移动版 基于EmotionUI B508适配 MIUI V5 4.9.22发布 更新优化
  2. 图片在section上下居中_HTML5中的section标签是什么?HTML5中的section标签怎么居中?...
  3. 一元线性回归-最小二乘法推导过程
  4. Open3D CSF地面点滤波(插件,Python版本)
  5. mysql+连接每一行数据_MySQL_深入mysql基础知识的详解,1.每个客户端连接都会从服务 - phpStudy...
  6. 一个域名可以对应多个ip地址的案例说明
  7. 域名中做负载均衡 同一个域名随机访问多个服务器IP(阿里云云解析DNS权重配置)
  8. 接口测试工具及工具分类
  9. PX4无人机飞控开发——第1篇:仿真工具介绍
  10. Linux WIFI驱动编译进内核——RTL8188EUS