精华内容
下载资源
问答
  • 异常检测-高维数据处理1高维问题的困难2Feature bagging方法2.1feature bagging 原理2.2pyod feature bagging示例孤立森林3.1原理3.2示例: 1高维问题的困难 由于数据维度的上升,数据的样本空间会呈指数级别增长...

    github地址:链接
    异常检测专栏地址:[链接]

    1.异常检测-pyod包入门
    2.异常检测-高维数据处理
    3.异常检测-线性检测模型
    4.异常检测-基于相似度的方法
    5.异常检测-基于统计学的方法

    1高维问题的困难

    1. 由于数据维度的上升,数据的样本空间会呈指数级别增长,使得数据变得稀疏
    2. 维度越高,计算距离的计算量越大,并且由于空间的稀疏性,很多点之间的距离相差都不大

    2Feature bagging方法

    2.1feature bagging 原理

    在这里插入图片描述

    • bagging流程
      如图所示,bagging方法通过使用bootstrap抽样方法(随机有放回抽样),随机地从原始数据集中抽取一定比例的样本用来训练基模型,并将基础模型的预测结果,通过一定方法进行汇总,得到最终结果
    • feature bagging中抽取的不是样本,而是抽取不同的特征来训练模型,抽取的特征数量在(d/2——d-1)之间,d是特征维度
    
    
    • **bagging方法可以降低方差 **

    1 C为常数, 则
    Var ⁡ ( c X ) = E [ ( c X − E [ c X ] ) 2 ] = c 2 E [ ( X − E [ X ] ) 2 ] = c 2 Var ⁡ ( X ) \operatorname{Var}(c X)=E\left[(c X-E[c X])^{2}\right]=c^{2} E\left[(X-E[X])^{2}\right]=c^{2} \operatorname{Var}(X) Var(cX)=E[(cXE[cX])2]=c2E[(XE[X])2]=c2Var(X)
    2. 独立随机变量之和的方差等于各变量的方差之和:
    Var ⁡ ( X 1 + ⋯ + X n ) = Var ⁡ ( X 1 ) + ⋯ + Var ⁡ ( X n ) \operatorname{Var}\left(X_{1}+\cdots+X_{n}\right)=\operatorname{Var}\left(X_{1}\right)+\cdots+\operatorname{Var}\left(X_{n}\right) Var(X1++Xn)=Var(X1)++Var(Xn)
    3. 如果各模型独立, 根据 (1)
    (2) 可知, 整体方差 Var ⁡ ( 1 n ∑ i = 1 n X i ) = 1 n 2 Var ⁡ ( ∑ i = 1 n X i ) = σ 2 n \operatorname{Var}\left(\frac{1}{n} \sum_{i=1}^{n} X_{i}\right)=\frac{1}{n^{2}} \operatorname{Var}\left(\sum_{i=1}^{n} X_{i}\right)=\frac{\sigma^{2}}{n} Var(n1i=1nXi)=n21Var(i=1nXi)=nσ2

    2.2pyod feature bagging示例

    import numpy as np
    from scipy import stats
    import matplotlib.pyplot as plt
    import matplotlib.font_manager
    from sklearn.neighbors import LocalOutlierFactor
    import seaborn as sns 
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    from pyod.utils.data import generate_data,get_outliers_inliers
    
    # 生成二维随机数据
    X_train, Y_train = generate_data(n_train=200,train_only=True, n_features=15)
    
    # 拆分出异常数据和正常数据
    x_outliers, x_inliers = get_outliers_inliers(X_train,Y_train)
    
    # 绘制生成的数据图
    F1 = X_train[:,[0]].reshape(-1,1)
    F2 = X_train[:,[1]].reshape(-1,1)
    sns.scatterplot(F1.reshape(-1),F2.reshape(-1),hue=Y_train)
    plt.xlabel('F1')
    plt.ylabel('F2') 
    plt.show()
    

    在这里插入图片描述

    pyod.models.feature_bagging.FeatureBagging(  
                base_estimator=None, n_estimators=10,   
                contamination=0.1, max_features=1.0,   
                bootstrap_features=False, check_detector=True,   
                check_estimator=False, n_jobs=1,   
                random_state=None, combination='average',   
                verbose=0, estimator_params=None)
    
    • 参数
      • base_estimator 训练的模型,默认为LOF
      • n_estimators 训练模型的数量
      • max_features 每次抽取的最大特征数或特征比例
      • bootstrap_features 是否又放回
      • combination ‘average’ or ‘max’
    from pyod.models.feature_bagging import FeatureBagging
    from pyod.models.lof import LOF
    from pyod.models.knn import KNN
    from sklearn.metrics import accuracy_score
    model1 = LOF()
    model2 = KNN()
    dic = {'bagging_LOF':model1,'bagging_KNN':model2}
    for i,(name,model) in enumerate(dic.items()):
        clf = FeatureBagging(base_estimator=model,max_features=12,n_estimators = 10)
        clf.fit(X_train)
        y_pred = clf.predict(X_train)
        print(name,'准确率:',accuracy_score(Y_train,y_pred))
        ax1 = plt.subplot(1,2,i+1)
        sns.scatterplot(F1.reshape(-1),F2.reshape(-1),hue=Y_train,ax=ax1)
        ax1.set_title(name)
    
    bagging_LOF 准确率: 0.945
    bagging_KNN 准确率: 1.0
    

    在这里插入图片描述

    孤立森林

    3.1原理

    参考:链接

    在这里插入图片描述

    • 原理:
      • 孤立森林方法中,异常数据被定义为“ 容易被孤立的离群点”
      • 通过随机地对数据集进行划分,最终每个子区域将只包含一个样本点
      • 如上图a,b所示,xi点需要划分多次才能独立出来,而x0只需要少次就可以孤立出来,因此x0更有可能是异常点
      • 如上图c所示,当设置不同的tree数量时,通过平均路径长度,来判断一个点是异常点的可能性大小
    • 特点
      • 适用于连续数据的无监督异常检测
      • 样本数较多会降低孤立森林孤立异常点的能力
      • 计算量较小,适宜于高维数据

    3.2示例:

    pyod.models.iforest.IForest(
            n_estimators=100, max_samples='auto', 
            contamination=0.1, max_features=1.0, 
            bootstrap=False, n_jobs=1, 
            behaviour='old', random_state=None, 
            verbose=0)
    
    • 参数
      • n_estimators 训练器数量
      • max_samples 每个子训练器提取的样本数量
      • max_features 每个子训练器提取的特征数量
    from pyod.models.iforest import IForest
    
    clf = IForest(n_estimators = 50,bootstrap = True)
    
    clf.fit(X_train)
    
    y_pred = clf.predict(X_train)
    
    print('异常检测的准确率:',accuracy_score(Y_train,y_pred))
    
    异常检测的准确率: 1.0
    
    展开全文
  • 他的研究兴趣在于高维数据分析、信号处理、计算机视觉和优化领域,曾获2012 COLT 最佳论文奖。 个人主页:https://datascience.columbia.edu/people/john-wright/ 欢迎添加群助手微信,邀请您加入大佬云集-机器学习...

    点击上方,选择星标置顶,不定期资源大放送

    阅读大概需要5分钟

    Follow小博主,每天更新前沿干货

    近日,加州伯克利电气工程与计算机科学系马毅(Yi Ma)教授宣布其与哥大电气工程系副教授John Wright合著的新书《High-Dimensional Data Analysis with Low-Dimensional Models: Principles, Computation, and Applications》开放了预印版,在新书正式出版前,大家可以在线下载抢先阅读了!

    地址:

    https://book-wright-ma.github.io/

    本书涵盖了用于高维数据分析的新的数学原理(统计学和几何学习)、可扩展(凸和非凸)优化方法,以及重要的应用,如科学成像、宽带通信、人脸识别、3D视觉和深度网络。这本书将被用作数据科学、信号处理、优化和机器学习领域的研究生入门教科书。它已被用于课程EECS 290(伯克利)和ELEN 6886(哥伦比亚)。

    在过去的二十年里,高维空间中低维结构的研究有了巨大的发展。在很大程度上,具有代表性的低维模型(如稀疏和低秩以及它们的变体和扩展)的几何和统计特性现在已经很好地理解了。在何种条件下,这些模型可以有效地和高效地从(最小采样量)数据中恢复,已经清楚地描述了。为了从高维数据中恢复低维模型,已经开发了许多高效和可扩展的算法。对这些算法的工作条件和计算复杂性也进行了详细的描述。这些新理论结果和算法已经彻底改变了科学和信号处理的实践数据, 并对传感、成像和信息处理产生了重要的影响。在科学成像、图像处理、计算机视觉、生物信息学、信息检索和机器学习等领域,我们已取得了显著的技术进步。正如我们将从本书中介绍的应用程序中看到的,其中一些发展似乎违背了传统智慧。

    见证了这一历史性的进步,我们认为,现在是全面研究这一新知识体系并在统一的理论和计算框架下组织这些丰富成果的时候了。关于压缩感知和稀疏模型的数学原理,已有许多优秀的书籍。然而,本书的目标是通过真正有效的计算,弥合低维模型在高维数据分析中的原理和应用之间的差距:

    本书将为学生提供关于高维几何、统计和优化概念和方法的系统性和严谨的训练。通过多样化丰富的应用设置和编程练习,本书还将教导学生如何在模型真实数据中正确使用这些概念和方法,以及如何解决现实世界的工程与科学问题。

    本书结构

    这本书的主体包括三个相互关联的部分: 原理、计算和应用(PCA)。本书还对相关的背景知识做了附录。

    第一部分: 原理(2-7章)提出了稀疏、低秩和一般低维模型的基本性质和理论结果。它描述了在保证正确性或精度的情况下,恢复这种低维结构的逆问题变得易于处理并且能够有效地解决的条件。

    第二部分: 计算(第8章和第9章)介绍了凸和非凸优化的方法,以开发用于恢复低维模型的实用算法。这些方法展示了如何系统地提高算法效率和降低整体计算复杂度,从而使生成的算法快速、可扩展到大尺寸和高维数据的强大思想。

    第三部分: 应用(10到16章)演示了如何前面两部分的原理和计算方法可能价格不能提高解决各种现实问题和实践。这些应用还指导如何适当地定制和扩展本书中介绍的理想化的模型和算法,以包含关于应用的其他领域特定知识(先验或约束)。

    最后的附录(A-E)在本书的最后是独立使用的。

    1

    作者简介


    马毅(Yi Ma),加州大学伯克利分校电气工程与计算机科学系教授。他的研究兴趣包括 3D 计算机视觉、高维数据的低维模型、可扩展性优化和机器学习,近年来的研究主题包括大规模 3D 几何重构和交互以及低维模型与深度网络的关系。

    个人主页:https://people.eecs.berkeley.edu/~yima/

    John Wright ,哥伦比亚大学电气工程系副教授。博士毕业于伊利诺伊大学香槟分校电气工程专业,曾年在微软研究院工作两年。他的研究兴趣在于高维数据分析、信号处理、计算机视觉和优化领域,曾获2012 COLT 最佳论文奖。

    个人主页:https://datascience.columbia.edu/people/john-wright/

    欢迎添加群助手微信,邀请您加入大佬云集-机器学习与深度学习交流群!

    ???? 长按识别添加,邀请您进群!

    展开全文
  • Numpy高维数据的理解

    2021-02-11 06:51:10
    当实际处理多维变量时,尤其需要使用到Tensorflow这样深度学习库,比如,图片数据批次其形状为:N×H×W×CN×H×W×C, 高维序列格式存在难以理解的问题。因此如何读懂这些高维序列是一个很基础的问题。>>>...

    9756942a5bc0421433561abfa124e64d.gif

    当实际处理多维变量时,尤其需要使用到Tensorflow这样深度学习库,比如,图片数据批次其形状为:N×H×W×CN×H×W×C, 高维序列格式存在难以理解的问题。因此如何读懂这些高维序列是一个很基础的问题。

    >>>>

    列表和1-D Numpy array

    707708cead5e74738fc9f7c1f6067857.png

    如何检索一个列表中的元素,上图给出了很好的描述

    嵌套列表和2-D Numpy序列

    当嵌套两个List事情就变得很有趣了。2-D表示:矩阵、数据库里的表格、灰度图像

    7c4804b5d857ffb3b3815bf2b9463fb2.png

    上面是一个List里面嵌套了三个List,每个List都表示长方形表中的一个行向量

    在Python中访问一个嵌套列表,通常使用两个方括号,具体如下:

    df8d7645f1abfcd1d5758f2766ee0f73.png

    下面是一些小例子:

    84becde22cf7d839d931b064b7c1c7a4.png

    我们将嵌套结构看做一棵树

    4dbdcab3b2d13b45b6b9bf0d0e4943e5.png

    2-D numpy arrays

    V=np.array([[1, 0, 0],[0,1, 0],[0,0,1]])

    1

    2-D Numpy arrays 的加法运算

    X=np.array([[1,0],[0,1]])

    Y=np.array([[2,1][1,2]])

    Z=X+Y;

    Z:array([[3,1],[1,3]])

    1

    2

    3

    4

    51636c2c810a08b34f775e2febef5847.png

    2-D Numpy arrays 的乘法运算

    X=np.array([[1,0],[0,1]])

    Y=np.array([[2,1][1,2]])

    Z=X*Y;

    Z:array([[2,0],[2,0]])

    1

    2

    3

    4

    7753416a1a5017ead88cab31546abf90.png

    嵌套三个列表和3-DNumpys arrays

    可以看到相比于2-D列表,3-DNumpys arrays增加了一个方括号

    935330941b24b1ef4a555bf8c0a46256.png

    我们可以这样检索其中一个元素。

    e859f5dd90f214e81a324a6004e9918d.png

    为了生活化场景,基本的二维表格形状不变,而增加了相应的多个表格,类似于地址- 楼层- 房间号的表达方式

    21dd99a84b89f2e5122673b907057f81.png

    而检索过程也类似于这样过程

    337b9919226c22c11af4e614847419d0.png

    nDNumpy序列的加法表达是这样:

    5322f00ef309af52904fa8dacfaf19b4.png

    4DNumpy

    f8d862995937201950f097e62c954ddb.png

    a7a335ebdc020864f13bfc15decbba05.png

    思考一下:

    1. 如何表达如下矩阵Tensor?

    1×2×2×11×2×2×1

    3×3×1×13×3×1×1

    3×3×2×13×3×2×1

    3×3×2×23×3×2×2

    给出答案:

    [[[[1],[1]],

    [[1],[1]]]]

    [[[[1]],[[1]],[[1]]],

    [[[1]],[[1]],[[1]]],

    [[[1]],[[1]],[[1]]]]

    [[[[1],[1]],[[1],[1]],[[1],[1]]],

    [[[1],[1]],[[1],[1]],[[1],[1]]],

    [[[1],[1]],[[1],[1]],[[1],[1]]]]

    [[[[1,1],[1,1]],[[1,1],[1,1]],[[1,1],[1,1]]],

    [[[1,1],[1,1]],[[1,1],[1,1]],[[1,1],[1,1]]],

    [[[1,1],[1,1]],[[1,1],[1,1]],[[1,1],[1,1]]]]

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    在原文章中,表达较为清晰,适合新手入门。

    Reference:From Python Nested Lists to Multidimensional numpy Arrays

    —THE END—

    编辑 ∑Gemini

    来源:CSDN@Nianzu_Ethan_Zheng

    文章推荐

    展开全文
  • 高维数据异常检测

    2021-01-24 21:51:20
    许多真实的数据集是高维的。在某些情况下,真实的数据集可能包含数百或数千个维度。随着维数的不断增加,许多传统的异常检测方法并不能非常有效地工作。这是著名的维数灾难的表现。在高维空间中,当进行全维分析时,...

    一、概述

    许多真实的数据集是高维的。在某些情况下,真实的数据集可能包含数百或数千个维度。随着维数的不断增加,许多传统的异常检测方法并不能非常有效地工作。这是著名的维数灾难的表现。在高维空间中,当进行全维分析时,数据变得稀疏,真正的离群值被多个不相关维度的噪声效应所掩盖。

    维数灾难的一个主要原因是难以在高维情况下确定一个点的相关位置。例如,基于距离相似度的方法通过在所有维度上使用距离函数来定义局部性。然而,某些维度可能与特定的测试点无关,这也会影响基础距离函数的质量。例如,在高维空间中,所有的点对几乎等距。这种现象称为数据稀疏或距离集中。由于离群值被定义为稀疏区域中的数据点,这导致了一种不好的区分情况,即所有数据点都位于几乎同样稀疏的全维区域中。维数诅咒所带来的挑战并不是异常检测所特有的。众所周知,许多问题,例如聚类和最近邻搜索分析,在维度不断增加的情况下遇到了挑战。事实上,有人认为,几乎任何基于邻近概念的算法在高维空间都会在质量上退化,因此需要以更有意义的方式重新定义。

    为了进一步解释全维离群点分析算法失效的原因,本文给出了一个实例。在下图中,已经说明了一个假设数据集的四个不同的二维视图。这些视图中的每一个都对应于一组不相交的维。很明显,点“ A”在数据集的第一个视图中被公开为异常值,而点“ B”在数据集的第四个视图中被公开为异常值。但是,在数据集的第二个和第三个视图中,“ A”和“B”这两个数据点都不作为离群值公开。因此,从度量“A”和“B”的离群值的角度来看,这些视图是嘈杂的。在这种情况下,四个视图中的三个视图对于揭示任何特定的离群值“ A”或“B”来说,都是非信息性的和嘈杂的。在这种情况下,离群值在这些视图中的随机分布中丢失了,当距离测量是以完整的维度进行的。这种情况通常会随着维度的增加而自然放大。对于非常高维的数据集,可能只有很小一部分视图可以为离群值分析过程提供信息。
    在这里插入图片描述
    上述图片说明告诉我们问题的局部相关尺寸至关重要。在实际场景中,对这种情况的物理解释是相当直观的。一个物体可能有几个测量量,而这个物体的显著异常行为可能只反映在这些量的一个小子集中。例如,考虑一个飞机机械故障检测场景,其中不同测试的结果以不同的尺寸表示。在同一架飞机上进行的数千次不同机身测试的结果可能大多数是正常的,有一些噪音的变化,这些变化并不显著。另一方面,一小部分测试中的一些偏差可能非常显著,足以表明异常行为。当来自测试的数据以完整的维度表示时,反常的数据点在数据的几乎所有视图中都会显示为正常的,除了维度的一小部分。因此,聚合邻近度量不太可能暴露出异常值,因为大量正常测试的噪声变化会掩盖异常值。此外,当测试不同的对象(不同机体的实例)时,不同的测试(维度子集)可能与识别异常值有关。换句话说,离群值通常嵌入在局部相关的子空间中。

    这对于在这种情况下的全维度分析意味着什么?当使用全维距离来测量偏差时,大量“正常噪声”维度的稀释效应将使得异常值的检测变得困难。在大多数情况下,其他维度的噪音导致距离集中,可能使计算更加错误。此外,噪声在大量不同维度中的累加效应将干扰实际偏差的检测。简单地说,由于全维计算中噪声的掩蔽效应和稀释效应,在使用全维分析时,存在于低维子空间的异常值会被丢失。
    其他基于距离的方法也有类似的效果,比如聚类和最近邻搜索。对于这些问题,已经证明,通过检查子空间中数据的行为,可以设计出更有意义的集群,这些集群特定于问题中的特定子空间。这个广泛的观察结果通常也适用于异常检测问题。由于离群值只能在数据的低维子空间中发现,因此探索低维子空间中感兴趣的偏差是有意义的。这种方法滤除了大量维数的附加噪声影响,从而得到更稳健的离群值。一个有趣的现象是,即使在缺少属性值的数据集中,也经常可以识别这种低维预测。这对于许多实际应用非常有用,因为特征提取是一个困难的过程,而且通常不存在完整的特征描述。例如,在机身故障检测方案中,可能只应用了测试的一个子集,因此只有维度子集中的值可用于离群值分析。这种模型被称为计划异常检测,或者,也可以称为子空间异常检测。

    相关子空间的识别是一个极具挑战性的问题。这是因为高维数据的可能预测数目与数据的维数成指数关系。一个有效的异常检测方法需要以一种综合的方式搜索数据点和维度,以便揭示最相关的离群值。这是因为维度的不同子集可能与不同的离群值相关,这从上图中的例子中可以明显看出。这进一步增加了计算的复杂性。

    一个重要的观察结果是,子空间分析在异常检测问题中通常比在聚类问题中更加困难。这是因为像集群这样的问题是基于聚合行为的,而异常值,从定义上来说,是很少见的。因此,在孤立点分析的情况下,与聚类等基于聚集的问题相比,给定区域内个体维度的统计聚集常常为子空间探索过程提供非常弱的提示。当这种微弱的提示导致相关维度的省略时,效果可能比包含不相关维度更加剧烈,特别是在有趣的情况下,当局部相关维度的数量只是整个数据维度的一小部分。一个常见的错误是假定聚类和离群点分析之间的互补关系可以推广到局部子空间选择问题。特别是,由于对早期子空间聚类方法中的维数选择方法不了解不同问题中子空间分析原理的细微差别,有时会遗漏重要的离群点。在这种情况下,识别离群值分析的相关子空间的困难也是至关重要的。一般来说,为每个数据点选择一个相关的子空间会导致不可预测的结果,因此将多个子空间的结果组合起来是非常重要的。换句话说,子空间异常检测天生就是一个以集成为中心的问题。
    常用的方法有以下几类:

    • 基于稀缺性: 这些方法试图基于底层分布的稀缺性来发现子空间。这里的主要挑战是计算,因为稀有子空间的数量远远大于高维稠密子空间的数量。
    • 无偏: 在这些方法中,子空间的采样是无偏的,得分是跨采样子空间组合。当子空间从原始属性集中采样时,这种方法称为特征包装。在任意取向子空间抽样的情况下,该方法称为旋转套袋抽样或旋转子空间抽样。尽管这些方法非常简单,但往往很有效。
    • 基于聚合: 在这些方法中,使用聚合统计,例如集群统计、方差统计或数据的全局或局部子集的非一致性统计,来量化子空间的相关性。与基于稀有性的统计不同,这些方法量化全局或局部参考点集的统计特性,而不是试图直接识别数据稀疏的子空间。由于这些方法只能提供弱的(和容易出错的)提示来识别相关的子空间,多子空间抽样是至关重要的。

    二、Feature Bagging

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

    1.选择基检测器

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

    在这里插入图片描述

    2.分数标准化和组合方法

    不同检测器可能会在不同的尺度上产⽣分数。例如,平均k近邻检测器会输出原始距离分数,而LOF算法会输出归⼀化值。另外,尽管⼀般情况是输出较⼤的异常值分数,但有些检测器会输出较小的异常值分数。因此,需要将来⾃各种检测器的分数转换成可以有意义的组合的归⼀化值。分数标准化之后,还要选择⼀个组合函数将不同基本检测器的得分进⾏组合,最常⻅的选择包括平均和最⼤化组合函数。
    下图是两个feature bagging两个不同的组合分数⽅法:
    在这里插入图片描述
    在这里插入图片描述
    基探测器的设计及其组合⽅法都取决于特定集成⽅法的特定⽬标。很多时候,我们⽆法得知数据的原始分布,只能通过部分数据去学习。除此以外,算法本⾝也可能存在⼀定问题使得其⽆法学习到数据完整
    的信息。这些问题造成的误差通常分为偏差和⽅差两种。

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

    偏差:是指预测值与真实值之间的差距,特别是在离群点检测问题中,往往没有可⽤的基本真值。

    三、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棵树之后,孤⽴森林的训练就结束,就可以⽤⽣成的孤⽴森林来评估测试数据。

    孤⽴森林检测异常的假设是:异常点⼀般都是⾮常稀有的,在树中会很快被划分到叶⼦节点,因此可以⽤叶⼦节点到根节点的路径⻓度来判断⼀条记录是否是异常的。和随机森林类似,孤⽴森林也是采⽤构造好的所有树的平均结果形成最终结果的。在训练时,每棵树的训练样本是随机抽样的。从孤⽴森林的树的构造过程看,它不需要知道样本的标签,而是通过阈值来判断样本是否异常。因为异常点的路径⽐较短,正常点的路径⽐较⻓,孤⽴森林根据路径⻓度来估计每个样本点的异常程度。

    路径⻓度计算⽅法:
    在这里插入图片描述
    孤⽴森林也是⼀种基于⼦空间的⽅法,不同的分⽀对应于数据的不同局部⼦空间区域,较小的路径对应于孤⽴⼦空间的低维。

    四、总结

    1.feature bagging可以降低方差

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

    • 计算成本相⽐基于距离或基于密度的算法更小。
    • 具有线性的时间复杂度。
    • 在处理⼤数据集上有优势。
      孤⽴森林不适⽤于超⾼维数据,因为孤立森林每次都是随机选取维度,如果维度过⾼,则会存在过多噪⾳。

    五、基于pyod库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

    if name == ‘main’:
    contamination = 0.1
    n_train = 200
    n_test = 100

    X_train, y_train, X_test, y_test = generate_data(n_train=n_train,
                                                     n_test=n_test,
                                                     n_features=10,
                                                     contamination=contamination,
                                                     random_state=42)
    
    clf_name = 'FeatureBagging'
    clf = FeatureBagging(check_estimator=False)
    clf.fit(X_train)
    
    y_train_pred = clf.labels_
    y_train_scores = clf.decision_scores_
    
    y_test_pred = clf.predict(X_test)
    y_test_scores = clf.decision_function(X_test)
    
    # 打印结果
    print("\nOn Training Data:")
    evaluate_print(clf_name, y_train, y_train_scores)
    print("\nOn Test Data:")
    evaluate_print(clf_name, y_test, y_test_scores)
    

    On Training Data:
    FeatureBagging ROC:0.9964, precision @ rank n:0.9

    On Test Data:
    FeatureBagging ROC:0.8244, precision @ rank n:0.6

    #作为对比,看看单个LOF检测器的效果
    clf_name = ‘LOF’
    clf = LOF()
    clf.fit(X_train)

    y_train_pred = clf.labels_
    y_train_scores = clf.decision_scores_
    
    y_test_pred = clf.predict(X_test)
    y_test_scores = clf.decision_function(X_test)
    
    # 打印结果
    print("\nOn Training Data:")
    evaluate_print(clf_name, y_train, y_train_scores)
    print("\nOn Test Data:")
    evaluate_print(clf_name, y_test, y_test_scores)
    

    On Training Data:
    LOF ROC:0.9889, precision @ rank n:0.8

    On Test Data:
    LOF ROC:0.6333, precision @ rank n:0.5

    六、基于pyod库孤立森林算法实现

    from pyod.models.iforest import IForest
    from pyod.utils.data import generate_data
    from pyod.utils.data import evaluate_print
    from pyod.utils.example import visualize

    if name == ‘main’:
    contamination = 0.1
    n_train = 200
    n_test = 100

    X_train, y_train, X_test, y_test = generate_data(n_train=n_train,
                                                     n_test=n_test,
                                                     n_features=10,
                                                     contamination=contamination,
                                                     random_state=42)
    
    
    clf_name = 'IForest'
    clf = IForest()
    clf.fit(X_train)
    
    y_train_pred = clf.labels_
    y_train_scores = clf.decision_scores_
    
    y_test_pred = clf.predict(X_test)
    y_test_scores = clf.decision_function(X_test)
    
    # 打印结果
    print("\nOn Training Data:")
    evaluate_print(clf_name, y_train, y_train_scores)
    print("\nOn Test Data:")
    evaluate_print(clf_name, y_test, y_test_scores)
    

    On Training Data:
    IForest ROC:1.0, precision @ rank n:1.0

    On Test Data:
    IForest ROC:1.0, precision @ rank n:1.0

    可见对于PyOD生成的具有十个特征的高维数据,孤立森林比基于LOF的Feature Bagging效果好,而基于LOF的Feature Bagging的效果好于单个LOF检测器。

    展开全文
  • 一、高维数据 高维数据泛指高维(multidimensional) 和多变量(multivariate)数据 -- 高维是指数据具有多个独立属性 -- 多变量是指数据具有多个相关属性 高维数据可视化的挑战: 如何呈现单个数据点的各属性的...
  • 高维数据可视化示例

    2021-08-16 13:48:35
    高维数据可视化示例 文中代码均在Jupyter Notebook中运行 文中所需两个数据文件在下面给出。 文中数据集下载1 文中数据集下载2 目录高维数据可视化示例单变量分析多变量分析可视化二维数据可视化三维数据可视化四维...
  • 高维数据的异常检测

    2021-01-24 16:23:49
    高维空间中,所有点对的距离几乎都是相等的(距离集中),这使得一些基于距离的方法失效。 集成是子空间思想中常用的方法之一,可以有效提高数据挖掘算法精度。集成方法将多个算法或多个基检测器的输出结合起来。...
  • 五、高维数据的异常检测 1、引言 在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。 维度诅咒不止给异常检测带来了挑战,对...
  • 在实际场景中,很多数据集都是多维度的。在高维空 间中,所有点对的距离几乎都是相等的(距离集中),这使得一些基于距离的方法失效。在高维场景下,一个常用的方法是子空间方法。 常见的方法有Feature Bagging 和...
  • 高维即维度数比较高,随之数据空间的体积也会以指数级别增长,以距离为方法会失效,常用的方法为子空间,而子空间中思想常用的方法为集成方法。 集成方法: 一句话形容是将多个算法或多个基检测器的输出结合起来。...
  • 加载数据血清蛋白质组图谱诊断可用于区分患者和非患者的观测值。图谱是使用表面增强激光解吸电离 (SELDI) 蛋白质质谱法产生的。这些特征是特定质荷比下的离子强度水平。此示例用到了使用 WCX2 蛋白质阵列生成的高...
  • 随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。例如基于邻近度的方法是在所有维度使用距离...
  • t-SNE的主要用途是可视化和探索高维数据。 它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中开发并出版。 t-SNE的主要目标是将多维数据集转换为低维数据集。 相对于其他的降维算法,对于数据...
  • 主成分分析(PCA)是一种旋转数据集的方法,旋转后的特征在统计上不相关。用PCA做数据变换首先,算法在原始数据点集中,找到方差最大的方向(包含最多信息),标记为‘成分1’。->找到与“成分1”正交(成直角)且包含...
  • 随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。例如基于邻近度的方法是在所有维度使用距离...
  • #异常检测——高维数据异常检测 主要内容包括: Feature Bagging 孤立森林 文章目录1、引言2、Feature Bagging3、Isolation Forests4、总结5、练习6、参考文献 1、引言 在实际场景中,很多数据集都是多维度的。...
  • 异常检测——高维数据异常检测 一个物体可能有几个被测量的量,这个物体的显著异常行为可能只反映在这些量的一小部分中。 也即,一小部分的测量的数据中可能可以找到异常值,因为数据维度不高,但是当来自测量的数据...
  • 加载数据血清蛋白质组图谱诊断可用于区分患者和非患者的观测值。图谱是使用表面增强激光解吸电离 (SELDI) 蛋白质质谱法产生的。这些特征是特定质荷比下的离子强度水平。此示例用到了使用 WCX2 蛋白质阵列生成的高...
  • 这使得基于距离的计算方法失效,对于高维数据处理,采用子空间的方法,集成方法是子空间思想中常用的一种。 集成方法:将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些...
  • 背景技术:在数据挖掘的分类任务中,目前针对高维不平衡数据的分类方法都是先解决高维问题或者不平衡问题,再解决另外一个问题,并没有考虑高维特性对不平衡数据分类带来的新问题和不平衡特性对高维数据分类造成的...
  • 2.3时间格式数据处理及查看 3、学习问题与解答 3.1 导入数据 3.1.1 目录格式正确 3.2运行卡顿情况 3.3出现warning 4、学习思考与总结(三点) 参考 本学习笔记为阿里云天池金融风控训练营的学习内容,学习链接为:...
  • 证明为什么低维预测模型在高维中会失败。 进行主成分回归(PCR)。 使用glmnet()进行岭回归、lasso 和弹性网elastic net 对这些预测模型进行评估 1.1数据集 在本文中,我们将使用基因表达数据。这个数据集包含...
  • simple idea: 建立一个高维数据空间到低维空间的映射。 低维空间点的距离表示了数据之间的相似度。 优化相关目标函数(描述了数据相似度以及映射之后的相似度) 这样我们可以可视化低维(2-3维度)数据。 通常将这类...
  • 背景技术:在过去的二十年里,人类收集、存储、传输、处理数据的能力取得了飞速提升,人们积累了越来越庞大和复杂的数据,因此,能有效对数据进行分析和利用的计算机算法是现今迫切需要的。同时,高维数据量和稀疏...
  • 异常检测——高维数据异常检测 主要内容包括: Feature Bagging 孤立森林 文章目录异常检测——高维数据异常检测1、引言2、Feature Bagging2.1 Feature Bagging的通用算法2.2 Feature Bagging 的设计关键点1. ...
  • 随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。 例如基于邻近度的方法是在所有维度使用...
  • 论文Belghazi, Mohamed Ishmael, et al. “ Mutual information neural estimation .” ...利用神经网络的梯度下降法可以实现快速高维连续随机变量之间互信息的估计,上述论文提出了Mutual Information Neural E...
  • Python使用tsne进行高维数据可视化实战:二维可视化、三维可视化 # 绘制二维可视化图像并添加标签字符函数 def plot_embedding(data, label, title): x_min, x_max = np.min(data, 0), np.max(data, 0) ...
  • 数据处理的背后肯定存在某个控制问题,把数据里隐藏的能够用来构造表达一个系统运动规律的最简捷信息, 那就是数据处理的一个动机之一.高维数据分析的挑战是多方面的,当有幸获得一个计算工具时,应该充分的想一想,套用...
  • 数据分析之前奏课程主要内容:常用IDE:本课程主要使用:AnacondaAnaconda:一个集合,包括conda、某版本Python、一批第三方库等-支持近800个第三方库-适合科学计算领域-包含多个主流工具-开源免费-跨平台本身不是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,066
精华内容 18,026
关键字:

高维数据处理