【机器学习】数据清洗之识别异常点

🎈个人主页:甜美的江
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

数据清洗之识别异常点

  • 一 认识异常值
    • 1.1 概念
    • 1.2 危害
    • 1.3 和缺失值的比较
  • 二 基于统计方法的异常值检测
    • 2.1 标准差方法:
    • 2.2 Z-Score 方法:
    • 2.3 两种方法的优缺点
  • 三 箱线图(Box Plot):
    • 3.1 箱线图概念
    • 3.2 箱线图检测异常值
  • 四 密度估计方法:
    • 4.1 数据的密度与密度分布
    • 4.2 使用密度估计方法检测异常值
  • 五 聚类方法:
    • 5.1 聚类的概念
    • 5.2 使用聚类方法检测异常值
  • 六 孤立森林(Isolation Forest):
    • 6.1 孤立森林的概念
    • 6.2 孤立森林检测异常值
  • 七 DBSCAN(密度聚类):
    • 7.1 DBSCAN 概念
    • 7.2 DBSCAN 检测异常值
  • 八 使用可视化工具:
  • 九 各种方法的优缺点及使用场景
    • 9.1 基于统计方法的异常值检测:
    • 9.2 箱线图(Box Plot):
    • 9.3 密度估计方法(Density Estimation Methods):
    • 9.4 聚类方法(Clustering Methods):
    • 9.5 孤立森林(Isolation Forest):
    • 9.6 DBSCAN(密度聚类):
    • 9.7 使用可视化工具:
    • 9.8 综合使用方法的建议:
  • 十 总结

在这里插入图片描述

引言:

数据是现代社会中的一种宝贵资源,但在利用数据之前,我们需要进行数据清洗以确保数据的质量和准确性。

异常值是数据中常见的问题之一,它们可能会对分析和建模产生负面影响,因此识别和处理异常值是数据清洗过程中的重要步骤之一。

本文将介绍异常值的概念、危害以及与缺失值的比较,并探讨了多种识别异常值的方法,包括基于统计方法、箱线图、密度估计方法、聚类方法、孤立森林和DBSCAN等。

通过本文的阅读,读者将能够深入了解异常值的检测方法及其优缺点,为数据清洗工作提供指导和参考。

一 认识异常值

1.1 概念

在机器学习数据预处理中,异常点(Outliers)是指与大多数数据明显不同的观测值。

这些值可能是由于测量误差、数据录入错误、真实的特殊情况或者是数据分布中的真实但罕见的极端值。

异常点可能对机器学习模型的性能产生负面影响,因此在数据清洗阶段通常需要检测和处理异常点。

1.2 危害

对统计分析的影响:
异常值可以显著影响统计分析的结果,特别是对于一些对极端值敏感的统计指标,如均值和标准差。这可能导致对数据整体趋势的误解。

对机器学习模型的影响:
异常值可能会干扰机器学习模型的性能。某些模型对异常值非常敏感,可能导致模型的预测不准确。在一些情况下,模型可能会过度拟合到异常值而失去泛化能力。

对数据可视化的影响:
在数据可视化中,异常值可能导致图表的拉伸,使得正常值的分布难以辨认。这会对数据的直观理解产生误导。

对数据分布的影响:
异常值可能导致数据分布的偏斜,使得分布不再符合正态分布等假设,从而影响一些基于分布的统计测试。

对模型解释的影响:
在解释模型结果时,异常值可能导致对模型行为的错误理解。模型可能会试图适应异常值,导致对一般数据模式的不准确理解。

因此,在数据清洗的过程中,识别和处理异常值是十分重要的。这可以包括删除异常值、用合适的替代值替换异常值,或者采用一些专门设计用于处理异常值的方法,如截断、转换等。处理异常值有助于提高数据质量,确保在后续分析和建模过程中得到更可靠的结果。

1.3 和缺失值的比较

缺失值(Missing values):

定义:

缺失值是指在数据集中某些变量的某些位置上缺少数值或信息。
这可能是由于测量错误、数据采集问题或者某些样本中的特定信息确实不存在引起的。

影响:

缺失值可能导致数据不完整,影响模型的训练和性能。如果不适当地处理,缺失值可能导致模型偏差或错误的分析。

主要区别:

性质不同:
异常点是数据中与其余值差异明显的观测值,而缺失值是在数据中缺少某些值或信息。

原因不同:
异常点可能是由于测量误差、录入错误等引起,而缺失值可能是由于数据采集问题或者特定信息确实不存在引起。

处理方式不同:
处理异常点通常涉及检测和修复,可以删除、替换或进行其他处理。
处理缺失值可能涉及填充缺失值(插值)、删除包含缺失值的行或列,或者使用专门的缺失值处理技术。

在数据预处理阶段,处理异常点和缺失值是确保数据质量和模型性能的重要步骤。

二 基于统计方法的异常值检测

基于统计方法的异常值检测是一种常用的数据清洗技术,它基于数据的统计特性来判断某个数据点是否为异常点。

下面我将介绍几种常见的基于统计方法的异常值检测方法:

2.1 标准差方法:

标准差方法是一种简单而直观的异常值检测方法,它通过测量数据点与均值偏离程度来识别异常点,超出某个阈值范围的数据点被视为异常。

均值
均值,也称为平均值,是统计学中最基本的描述性统计量之一。它代表着一组数据的中心趋势,通常用来表示数据的集中程度,它是将所有数据值相加后除以数据的总数得到的结果。

具体来说,异常点通常被定义为距离均值一定数量的标准差之外的数据点。常见的做法是,将均值加上或减去多少个标准差的倍数作为阈值,超出这个阈值的数据点被认为是异常点。

通常情况下,数据点超过均值加减2到3个标准差的范围可能被认为是异常的,但具体的阈值取决于数据的分布以及对异常点的容忍程度。

更高的标准差倍数意味着更严格的异常点检测,而更低的标准差倍数则意味着更宽松的检测。

标准差
标准差是用来衡量数据集合中数值的离散程度或者变化程度的一种统计量。标准差越大,代表数据的波动越大,反之则越稳定。标准差通常用希腊字母σ表示。

在这里插入图片描述

具体步骤如下:

1 计算数据的均值(mean)和标准差(standard deviation)。

2 定义一个阈值,通常是均值加上或减去几个标准差的倍数。

3 如果某个数据点的值超过阈值,则被认为是异常点。

4 使用标准差方法可以较好地处理服从正态分布的数据,对于偏态分布的数据则可能不够准确。

2.2 Z-Score 方法:

Z-Score 方法是另一种基于统计的异常值检测方法。它通过计算数据点与均值之间的偏差,并将偏差转化为标准偏差的倍数,以识别数据集中的异常值。

它以标准差为单位度量数据点与均值的偏差。

在了解这个方法之前我们需要先了解Z-Score 值。

Z-Score 值(也称为标准化得分或标准分数)是一种统计量,用于度量一个数据点与其所在数据集的均值的偏离程度,以及该偏离程度相对于数据集的标准差的大小。它通常用于标准化数据,使得不同数据集之间的比较更加方便。

在统计学和数据分析中,偏离程度指的是一个数据点相对于数据集的中心位置(通常是均值或中位数)的距离。偏离程度越大,表示该数据点与中心位置之间的差异越大。

Z-Score 的计算公式如下:

Z-Score 表示了一个数据点与均值之间的偏差程度,以标准差为单位。
如果数据点的 Z-Score 为正数,表示该数据点的值高于均值;如果 Z-Score 为负数,则表示该数据点的值低于均值。绝对值越大,偏离均值的程度就越大。

具体步骤如下:

1 计算数据的均值和标准差。

2 计算每个数据点与均值的差异,即(数据点 - 均值)/ 标准差。

3 设置一个阈值,通常为正负几倍的标准差。

4 如果某个数据点的 Z-Score 值超过阈值,则被认为是异常点。

与标准差方法相比,Z-Score 方法能够更好地处理不服从正态分布的数据,因为它考虑了数据点与均值的偏差。

2.3 两种方法的优缺点

Z-Score 方法和标准差方法都是常用于检测异常值的统计方法,它们各自具有一些优点和缺点:

1 Z-Score 方法:

优点:

标准化处理: Z-Score 方法将数据标准化,使得不同数据集之间的比较更加方便和准确。

考虑数据分布: Z-Score 方法不需要假设数据分布的情况下,即可进行异常值检测,适用范围更广。

灵活性: 可以根据实际需求自由选择阈值,调整异常值的识别程度。

缺点:

对数据分布敏感: Z-Score 方法对于数据的分布要求较高,如果数据不符合正态分布,可能导致误判。

受异常值影响: 在计算均值和标准差时,异常值会对结果产生影响,进而影响Z-Score 值的计算和异常值的识别。

2 标准差方法:

优点:

简单直观: 标准差方法简单易懂,计算方便,适用于快速检测异常值。

基于数据集分布: 标准差方法依赖于数据的分布特征,可以较好地反映数据的离散程度。

缺点:

对数据分布敏感: 与Z-Score 方法类似,标准差方法也对数据的分布要求较高,不适用于非正态分布的数据。

受极端值影响: 在计算过程中,极端值会对均值和标准差产生较大影响,可能导致异常值的误判。

无法区分异常值类型: 标准差方法只能判断数据点是否偏离了均值,但无法区分异常值的类型和原因。

综上所述,Z-Score 方法和标准差方法都有各自的优点和局限性,选择合适的方法取决于数据的特点、分布情况以及分析目的。在实际应用中,通常需要综合考虑多种方法,以提高异常值检测的准确性和可靠性。

这些基于统计方法的异常值检测方法都是基于数据的分布情况来识别异常点。它们具有简单直观、易于实现的优点,可以在快速进行数据清洗时提供有用的指导。

但需要注意的是,它们假设数据服从某种分布,对于不符合该分布的数据可能不够准确。因此,在使用这些方法时,需要了解数据的分布情况,并根据具体问题进行调整和适应。

三 箱线图(Box Plot):

3.1 箱线图概念

箱线图(Boxplot),也称为盒须图或盒式图,是一种用于显示数据分布情况的可视化工具。它可以展示数据的中位数、上下四分位数、极值以及异常值的存在情况,帮助人们更直观地理解数据的分布和离散程度。

箱线图通常由以下几个部分组成:

1 箱子(Box):

箱子代表了数据的四分位数范围,上边界表示第三四分位数(Q3),下边界表示第一四分位数(Q1),箱子内部的线表示中位数(Median)。箱子的长度即为数据的四分位距(Interquartile Range,IQR),即 ( IQR = Q3 - Q1 )。

2 触须(Whiskers):

触须延伸自箱子,通常会延伸至最大和最小非异常值数据点。触须的长度可以基于数据的最大值和最小值,或者根据一定的距离(例如1.5倍的IQR)来确定。

3 异常值(Outliers):

落在触须之外的数据点被认为是异常值。异常值可能是数据记录中的错误或异常情况,需要进行额外的分析和处理。

箱线图的绘制步骤如下:

1 计算数据的五数概括:最小值、第一四分位数、中位数、第三四分位数和最大值。

2 根据五数概括绘制箱子,确定箱子的上下边界和中位数线。

3 根据触须的定义,确定触须的长度和位置。

4 标记异常值,并将其显示在图中。

示例:
在这里插入图片描述

箱线图能够帮助人们快速了解数据的分布情况,识别异常值和离群点,并与其他数据集进行比较。它是数据探索和分析中常用的工具之一,有助于发现数据集中的特征和规律。

3.2 箱线图检测异常值

箱线图(Boxplot)是一种常用的可视化工具,它通过显示数据的分布情况,以及数据的中位数、上下四分位数和异常值的存在情况,帮助我们直观地发现异常值。

以下是使用箱线图检测异常值的方法:

1 绘制箱线图:

首先,对数据集进行可视化,绘制箱线图。箱线图通常由一个矩形箱子和两条“触须”组成。
箱子的上边界表示第三四分位数(Q3),下边界表示第一四分位数(Q1),箱子内部的线表示中位数。箱线图的触须则延伸至数据集的最大值和最小值,或者在一定倍数的四分位距之外。

2 识别异常值:

根据箱线图的观察,可以识别出位于触须之外的数据点,这些点被认为是异常值。具体来说,通常会将落在 ( Q1 - 1.5 \times IQR> ) 和 ( Q3 + 1.5 \times IQR ) 之外的数据点定义为异常值,其中 IQR 代表四分位距(Interquartile Range),即 ( IQR = Q3 - Q1 )。

3 标记异常值:

一旦发现异常值,可以将其在箱线图中用不同颜色或形状进行标记,以便进一步分析和处理。

4 重新绘制箱线图:

处理完异常值后,可以重新绘制箱线图,检查异常值是否被正确处理,确保数据的质量和可靠性。

箱线图检测异常值的优点包括直观易懂、不受数据分布影响、能够发现单个和多个变量中的异常值。但同时,箱线图也存在一些局限性,例如无法确定异常值的类型和原因,对于高维数据的可视化较为困难等。

四 密度估计方法:

4.1 数据的密度与密度分布

数据点的密度是指在数据集中某个特定位置附近的数据点数量或概率分布。

密度反映了数据在特征空间中的分布紧密程度,即在某一位置附近有多少数据点。

密度通常用来描述数据的局部分布情况,可以在不同位置上提供有关数据集的详细信息。

在一维情况下,密度可以通过直方图来表示,其中每个柱子的高度表示该区间内数据点的数量。在多维情况下,特别是在高维数据集中,密度的计算变得更为复杂。

常见的方法之一是核密度估计,它通过在每个数据点周围放置核函数(通常是高斯核函数),然后计算核函数的加权和来估计数据点的密度。

数据点的密度分布则是指描述数据集中每个数据点在其周围的分布密度情况。

它反映了数据点在特征空间中的分布情况,即数据点在不同位置的密度大小。

密度分布可以用来了解数据集的聚集程度和分散程度,从而帮助理解数据的结构和特征。

它可以用数学方式表示为概率密度函数(Probability Density Function,PDF)。PDF描述了在每个可能取值处的数据点的密度,即在特定点的概率密度。

在异常值检测中,较低的密度通常被认为是异常值的迹象,因为它可能表示该点在特征空间中相对孤立,与其他数据点的距离较远。

类比:

假设你是一家零售商,经营着一家超市。你想要了解超市内各个区域的顾客流量密度,以更好地安排商品陈列、提高服务效率。

在这个例子中,超市的不同区域可以看作是特征空间中的不同位置,而购物顾客则是数据点。那么,每个区域的顾客密度就对应于该区域附近的顾客数量或购物顾客的概率分布。

高密度区域:
如果在某个特定区域,比如收银台附近,有很多顾客聚集,那么这个区域的顾客密度就很高。这可能表示这是一个热门的购物区域,需要更多的收银台或者有机会进行促销活动。

低密度区域:
相反,如果某个角落或某个货架附近的顾客数量相对较少,那么这个区域的顾客密度就较低。这可能意味着这个区域的商品不够吸引人,需要重新安排商品陈列或者考虑调整促销策略。

异常值:
假设在某个区域突然发现有异常少的顾客,可能是由于该区域商品摆放不当、有货架缺货或者其他原因。这个区域的低密度可能是异常的,需要进一步调查和处理。

通过分析超市中各个区域的顾客密度,你可以更好地了解超市的运营情况,做出合理的决策,例如优化货架摆放、改进促销策略,以提高整体销售效果。这个例子可以类比为在数据集中不同位置的数据点密度分布,从而指导业务决策和改进。

总体来说,数据点的密度是描述数据在不同位置上的分布情况,对于理解数据集的结构和特征具有重要的意义。密度估计方法可以帮助量化这种分布,进而支持各种数据分析任务。

4.2 使用密度估计方法检测异常值

在机器学习数据预处理中,使用密度估计方法检测异常值是一种常见的技术,它基于数据点的密度分布来识别异常值。

它不依赖于数据的分布假设,并且适用于各种类型的数据。

以下是使用密度估计方法检测异常值的详细步骤:

1 选择密度估计方法:

密度估计方法有许多种类,包括核密度估计(Kernel Density Estimation,KDE)、局部离群因子(Local Outlier Factor,LOF)等。根据数据的特点和需求,选择合适的密度估计方法。

2 计算数据点的密度:

对数据集中的每个数据点进行密度估计,得到每个数据点的密度值。核密度估计通常是通过在数据点周围放置核函数并计算核函数的加权和来完成的,而LOF方法则是通过计算每个数据点周围的局部密度与其邻居的密度之比来估计异常程度。

3 设定阈值:

可以根据实际需求和数据特点,设定异常值的阈值。一般来说,密度较低的数据点会被认为是异常值,但具体的阈值可以根据具体情况调整。

4 识别异常点:

通过比较数据点的密度值,识别密度较低的数据点作为异常值。在核密度估计中,密度较低的数据点通常位于密度图中的尾部或孤立的区域;而在LOF方法中,具有较低局部密度的数据点被认为是异常值。

密度估计方法检测异常值的优点包括不依赖于数据的分布假设、适用于各种类型的数据、能够发现局部异常点等。但同时,密度估计方法也存在一些局限性,例如计算复杂度较高、对参数的选择较为敏感等。

五 聚类方法:

5.1 聚类的概念

聚类是一种无监督学习的机器学习技术,旨在将数据点分组成具有相似特征的簇(cluster)。

聚类算法试图发现数据内在的结构,即将数据分成若干组,使得同一组内的数据点彼此相似,而不同组之间的数据点尽可能不同。

它的目标是实现簇内相似性最大化和簇间相似性最小化。

它的基本思想是基于数据点之间的相似度或距离来划分数据。

通常情况下,聚类算法会尝试将数据点划分为具有高度相似特征的簇,并且簇内的数据点相互之间的距离较小,而与其他簇内的数据点之间的距离较大。

以下是聚类的一些重要概念:

簇(cluster): 由聚类算法划分出的数据子集,具有相似的特征。每个簇可以看作是数据的一个子群体或类别。

相似度度量: 聚类算法根据数据点之间的相似度或距离来确定它们应该被分配到同一个簇中。常用的相似度度量包括欧氏距离、曼哈顿距离、余弦相似度等。

聚类中心: 对于一些聚类算法,如K均值(K-means),每个簇都有一个代表性的点,称为聚类中心。聚类中心通常是簇内所有数据点的平均值或中心点。

聚类算法: 用于执行聚类任务的算法,常见的聚类算法包括K均值、层次聚类、DBSCAN等。

簇的数量: 在使用聚类算法时,需要预先设定簇的数量。簇的数量可能影响聚类结果,因此通常需要根据实际情况进行调整和优化。

聚类的应用非常广泛,包括但不限于市场细分、异常检测、模式识别、推荐系统、图像分割等领域。通过聚类,可以发现数据之间的潜在关系和结构,帮助人们更好地理解和利用数据。

类比:

假设你是一家餐厅的经理,你想要了解你的顾客群体并提供更好的服务。你可以将聚类的概念应用于餐厅的顾客数据。

簇(cluster):
在餐厅的顾客数据中,簇代表着不同类型的顾客群体,每个簇包含具有相似特征的顾客。例如,可能会出现"家庭用餐者"、“商务聚餐者”、"情侣约会者"等簇。

相似度度量:
为了将顾客划分到不同的簇中,你可以使用顾客之间的相似度度量,例如他们的用餐时间、消费水平、点菜偏好等。如果两位顾客在这些方面相似,他们很可能属于同一个簇。

聚类中心:
对于每个簇,你可以找到代表该簇的典型顾客,这就是簇的中心。例如,在"家庭用餐者"簇中,聚类中心可能是一个典型的家庭,他们通常在周末晚上来餐厅用餐,并点一些适合家庭共享的菜品。

聚类算法:
你可以使用聚类算法,如K均值,对顾客数据进行聚类分析,从而将顾客划分为不同的簇。

簇的数量: 在使用聚类算法时,你需要预先决定簇的数量,即不同类型的顾客群体的数量,可能需要多次尝试不同的簇数量,然后选择最合适的数量,以便更好地理解顾客群体。

通过对顾客数据进行聚类分析,你可以更好地理解不同类型的顾客群体,了解他们的偏好和习惯。这可以帮助你优化菜单、提供更个性化的服务、制定针对性的促销活动,从而提高餐厅的盈利能力和顾客满意度。

5.2 使用聚类方法检测异常值

聚类方法通过将数据点分组成簇(clusters),并识别与其他簇差异显著的数据点作为异常值。

在机器学习数据预处理中,使用聚类方法检测异常值是一种常见的技术。

以下是使用聚类方法检测异常值的详细步骤:

1 选择聚类算法:

首先选择合适的聚类算法,常见的算法包括K均值(K-means)、层次聚类(Hierarchical Clustering)、DBSCAN等。

选择聚类算法时要考虑数据的特点,例如数据是否线性可分、是否有噪声等。

2 设置聚类参数:

根据数据的特点和需求,设置聚类算法的参数,如簇的数量、距离度量方法等。

这些参数的选择可能会影响聚类结果和异常值的检测效果。

3 进行聚类分析:

使用选择的聚类算法对数据进行聚类分析,将数据点划分为多个簇。

每个簇代表了数据中一个紧密相连的群体或子集。

4 设定阈值:

可以根据实际需求和数据特点,设定异常值的阈值。

一般来说,与其他簇差异显著的数据点会被认为是异常值,但具体的阈值可以根据具体情况调整。

5 识别异常值:

识别与其他簇差异显著的数据点作为异常值。这些异常值可能出现在不属于任何簇或属于稀疏簇的数据点中。

通过分析簇的分布密度和异常值与其他数据点的距离等因素来确定异常值。

类比:

假设你是一家电子商务公司的数据分析师,你负责处理网站用户的点击数据,以改进用户体验和提高转化率。你决定使用聚类方法来检测异常的用户行为,例如点击异常高的用户或者表现异常的购买行为。

1 选择聚类算法:

你首先选择了K均值聚类算法,因为它是一个常见且易于实现的算法,并且适用于大型数据集。

2 设置聚类参数:

你设置了K均值算法的簇数量为5,距离度量方法为欧氏距离。

3 进行聚类分析:

使用选择的聚类算法对用户点击数据进行聚类分析。每个簇代表了用户在点击模式上的不同行为,例如频繁点击某个特定商品、点击某个广告的用户等。

4 设定阈值:

你设定了一个点击频率的阈值,如果用户的点击频率超过该阈值,则将其认为是异常值。

5 识别异常值:

在聚类结果中,你发现有一个簇包含了只有极少量用户的点击行为,而且这些用户的点击模式与其他簇非常不同。经过分析,你认为这些用户可能是机器人或者异常的行为模式,因此将它们识别为异常值。

通过使用聚类方法检测异常值,你可以及时发现并处理异常的用户行为,从而提高网站的安全性和用户体验,进而改善转化率和用户满意度。

聚类方法检测异常值的优点包括不依赖于数据的分布假设、能够发现局部异常点、适用于各种类型的数据等。

但同时,聚类方法也存在一些局限性,例如对参数的选择敏感、需要事先确定簇的数量等。

六 孤立森林(Isolation Forest):

6.1 孤立森林的概念

孤立森林(Isolation Forest)是一种用于异常检测的无监督机器学习算法,由Fei Tony Liu、Kai Ming Ting和Zhou Zhi-Hua于2008年提出。

它的主要思想是通过随机切割数据空间,快速、有效地识别异常值。

与其他异常检测方法不同,孤立森林采用的是树结构而不是传统的基于距离或概率分布的方法。

以下是孤立森林的基本概念:

树结构:

孤立森林采用二叉树的结构,通过递归地将数据空间划分为两个子空间。每个节点都代表一个特征,并且通过选择一个特定的特征和相应的阈值将数据集划分成两个子集。

孤立度量:

孤立森林的核心思想是异常值相对于正常值更容易被孤立。在树的构建过程中,异常值在数据空间中所占的空间较小,因此需要较少的分割操作才能将其隔离。因此,孤立度量的概念被引入,即树的高度。异常值在树中的深度相对较浅,而正常值则在深层。

随机切割:

孤立森林通过随机选择一个特征和在该特征上的随机阈值来进行切割。这样的随机性能够有效地捕捉异常值的分布,而不受数据分布的影响。

路径长度:

在孤立森林中,每个数据点在树中的路径长度即为从根节点到达该数据点所经过的边的数量。异常值的路径长度相对较短,正常值的路径长度相对较长。

异常度计算:

通过构建多棵孤立树,可以计算每个数据点的平均路径长度。异常度的计算通常使用路径长度的平均值,通过比较路径长度与平均路径长度的关系来判断数据点是否为异常值。

类比:

想象一下你是一位园丁,负责管理一个庞大的公园。

你的工作是确保公园的植被和树木保持健康,并且及时发现并处理任何有害的入侵物或异常情况。

现在,假设你使用孤立森林算法来帮助你检测可能存在的异常情况,比如植物生长异常、有害入侵物、或者树木受到疾病或损伤的影响。

以下是如何将孤立森林算法应用于你的园艺工作中的一个类比:

树结构:
你将整个公园视为一个大的数据空间,而树木、植物等各种元素则是该空间中的特征。孤立森林算法通过将公园空间划分为不同的区域,类似于将数据空间划分为树的节点和叶子。

孤立度量:
在公园中,某些异常情况(比如有害入侵物)可能会比正常植物更容易被孤立,因为它们可能生长在较为隐蔽或不寻常的地方。这就像在孤立森林中,异常值相对于正常值更容易被孤立一样。

随机切割:
孤立森林算法会随机选择树木或地理特征,并根据这些特征来切割公园空间。类似地,你可能会随机选择一个区域,然后根据该区域内的植被状况来判断是否存在异常情况。

路径长度:
在孤立森林中,路径长度表示从根节点到达某个数据点所经过的边的数量。在公园中,你可能会记录异常情况发生的位置,并测量从园子的入口到达该位置所需的时间或距离。

异常度计算:
通过对多个路径长度进行平均,你可以计算出在公园中各个区域的平均异常度。如果某个区域的异常度显著高于平均水平,那么你可能会怀疑该区域存在异常情况,需要进一步调查或处理。

综上所述,你可以将孤立森林算法类比为在园艺工作中的使用,帮助你快速、有效地检测和处理公园中的异常情况,从而保持公园的健康和美观。

孤立森林在异常检测中具有一些优点,如对高维数据集的高效处理、对大型数据集的较好扩展性以及对多维数据的关联性的处理。然而,对于低维数据集的表现可能不如高维数据集,而且在某些情况下,对于密集簇的检测可能不够精确。

6.2 孤立森林检测异常值

孤立森林(Isolation Forest)是一种用于检测异常值的无监督机器学习算法,特别适用于高维数据集中的异常值检测。

它基于以下假设:异常值相比于正常值在特征空间中更加孤立,因此可以通过观察其在决策树中的分裂情况来快速识别。

以下是孤立森林检测异常值的详细方法:

1 随机选择特征和阈值:

孤立森林首先随机选择数据集中的一个特征,然后在该特征的最小值和最大值之间随机选择一个分割阈值。

这个过程会重复多次,产生多个随机切割平面。

2 构建孤立树:

通过递归地切分数据空间,构建孤立树。每次切分将数据集分为两个子集,一个包含小于阈值的样本,另一个包含大于阈值的样本。

这个过程会一直进行下去,直到每个子集中只包含一个样本或者达到了树的最大深度。

3 重复构建多棵孤立树:

重复步骤2,构建多棵孤立树。每棵树都是独立构建的,没有共享信息。

4 计算异常度:

对于每个数据点,计算其在每棵孤立树中的路径长度(即从根节点到达该数据点的路径长度)。

异常值通常会在树的较浅层被孤立,因此其路径长度较短。
为了识别异常值,可以计算每个数据点的平均路径长度,并使用路径长度的平均值作为异常度的度量。

5 识别异常值:

基于计算出的异常度,可以设定阈值来识别异常值。

通常情况下,路径长度远远短于平均路径长度的数据点会被识别为异常值。

孤立森林检测异常值的优点包括对高维数据集效果良好、对大型数据集有较高的计算效率、能够处理多维数据的关联性等。然而,孤立森林也有一些局限性,例如对于低维数据集的表现可能不如高维数据集、对于密集的簇可能不够精确等。

七 DBSCAN(密度聚类):

7.1 DBSCAN 概念

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种常用的基于密度的聚类算法,用于将数据点根据它们的密度分布划分到不同的簇中,并能有效地识别出噪声点。

DBSCAN算法的核心思想是基于数据点的密度来确定簇的形成,而不是像K均值这样的算法那样基于距离。

以下是DBSCAN算法的基本步骤:

1 定义核心点(Core Point):

对于给定的eps(邻域半径)和min_samples(邻域内最小数据点数)参数,一个数据点被认为是核心点,如果在其eps半径邻域内至少有min_samples个数据点。

2 定义边界点(Border Point):

如果一个数据点不是核心点,但它在某个核心点的eps邻域内,那么它被认为是一个边界点。

3 定义噪声点(Noise Point):

如果一个数据点既不是核心点也不是边界点,那么它被认为是一个噪声点(或者异常点)。

4 构建簇:

从任意一个未被访问的数据点开始,DBSCAN算法遍历数据集中的每个点,并根据其密度与邻近点之间的连接来逐步构建簇。

具体来说,如果一个数据点是核心点,那么它和其eps邻域内的所有数据点被分配到同一个簇中;如果一个数据点是边界点,那么它将被分配到与其邻近的核心点所在的簇中。

5 识别噪声点:

数据集中的任何未被分配到任何簇的数据点都被标记为噪声点,表示它们是孤立的或者不满足最小密度要求的点。

7.2 DBSCAN 检测异常值

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,但它也可以用于识别异常点。

在机器学习数据预处理中,数据清洗的过程中,使用DBSCAN来检测异常值的方法如下:

1 参数设置:
DBSCAN有两个主要参数需要设置:eps(邻域半径)和min_samples(邻域内最小数据点数)。

eps定义了一个数据点的邻域范围,min_samples定义了一个核心点所需的邻域内最小数据点数。适当设置这两个参数对于检测异常值至关重要。

2 标记聚类结果:

DBSCAN将数据点分为核心点、边界点和噪声点。

核心点是在邻域内至少包含min_samples数量的数据点的点,边界点是在邻域内包含少于min_samples数量但落在核心点邻域内的点,而噪声点是既不是核心点也不是边界点的点。

3 检测异常值:

在DBSCAN中,噪声点通常被认为是异常点。一旦聚类完成,所有被标记为噪声点的数据点都可以被视为异常值。

这是因为它们不属于任何明确的聚类簇,说明它们处于数据空间的相对较低密度区域。

4 调整参数和检查结果:

进行异常点检测时,需要仔细调整eps和min_samples参数,以确保对异常点有良好的检测能力。

通常,可以通过观察聚类结果、可视化数据分布以及根据问题背景进行调整。

总体而言,DBSCAN是一种强大的方法,特别适用于检测基于密度的异常值,能够有效处理具有复杂形状和不均匀密度的数据。然而,合适的参数选择对于其性能至关重要,需要在实际应用中进行调试和验证。

八 使用可视化工具:

机器学习数据预处理中,使用可视化工具来检测异常值是一种直观而有效的方法。可视化可以帮助你观察数据的分布、趋势和异常模式,从而更容易发现潜在的异常点。

以下是一些常用的可视化方法和工具来识别异常点:

1 散点图(Scatter Plots):

通过绘制数据的散点图,你可以直观地观察数据点的分布和相互关系。异常点通常会在图中表现为与其他数据点明显不同的点。

例如,对于二维数据,你可以使用散点图观察是否有偏离主要数据群的点。

2 箱线图(Boxplots):

箱线图展示了数据的分布情况,包括中位数、上下四分位数和异常值。异常值通常被定义为在1.5倍四分位距之外的点。

通过观察箱线图,你可以很容易地发现是否存在超出正常范围的异常值。

3 直方图(Histograms):

直方图可以显示数据的分布情况,帮助你观察数据是否符合正态分布。异常点可能表现为分布中的尾部或峰值。

通过观察直方图,你可以判断数据是否包含异常的分布模式。

4 3D 散点图和平行坐标图:

对于多维数据,可以使用3D 散点图或平行坐标图来可视化数据的分布。

这样可以更全面地了解数据之间的关系,从而更容易发现异常点。

5 交互式可视化工具:

使用交互式可视化工具如Plotly、Tableau或matplotlib中的交互式图表,可以允许你以更灵活的方式探索数据。通

过放大、缩小和筛选数据,你可以更容易地发现异常点。

6 地理信息系统(GIS)可视化:

如果数据涉及地理位置信息,使用地图可视化工具如GeoPandas、Leaflet等可以帮助你观察地理上的异常点,例如位置偏移较大或异常的集群。

7 时间序列图:

如果数据是时间序列数据,绘制时间序列图可以帮助你观察是否存在突然的异常波动或趋势变化。

在使用可视化工具时,需要注意以下几点:

标记异常点: 在图表中标记异常点,使其更容易被识别。

对比正常情况: 与正常情况下的图表进行对比,有助于更清晰地发现异常。

多视角观察: 尝试使用不同类型的图表和视角,以确保全面观察数据。

综合使用这些可视化方法,可以更容易地发现和理解数据中的异常点,有助于进一步的数据清洗和预处理工作。

九 各种方法的优缺点及使用场景

9.1 基于统计方法的异常值检测:

1 标准差方法 (Standard Deviation Method):

优点:

简单易实现,直观。
对于符合正态分布的数据效果较好。

缺点:

对非正态分布的数据效果可能较差。
对于包含极端值的数据,可能会误判。

使用场景:

适用于正态分布的数据,且数据没有太多的极端值。

2 Z-Score:

优点:

对于不同分布的数据具有较好的适应性。
易于理解和实现。

缺点:

对于非正态分布的数据,可能产生误判。

使用场景:

适用于各种类型的数据,尤其是非正态分布的数据。

9.2 箱线图(Box Plot):

优点:

直观显示数据的中位数、上下四分位数和异常值。
鲁棒性强,不受极端值的干扰。

缺点:

只能反映数据的整体情况,无法提供详细的异常值信息。

使用场景:

适用于单一变量或少量变量的异常值检测。

9.3 密度估计方法(Density Estimation Methods):

1 LOF(局部离群因子):

优点:

能够识别局部异常点,对于密度变化较大的数据集效果较好。

缺点:

对于高维数据和大规模数据集的计算开销较大。

使用场景:

适用于具有明显密度变化区域的数据集。

2 One-Class SVM:

优点:

适用于高维数据。
不依赖数据分布。

缺点:

在处理大规模数据时可能效果较差。

使用场景:

适用于少量正常样本的情况。

9.4 聚类方法(Clustering Methods):

优点:

对于密集型数据集效果较好。
可以自动划分数据点为群组。

缺点:

对于非凸形状的簇效果可能较差。

使用场景:

适用于数据集具有较为清晰的簇结构的情况。

9.5 孤立森林(Isolation Forest):

优点:

在处理高维数据和大规模数据时较为高效。
不需要依赖数据的分布。

缺点:

对于低维数据集效果可能不如高维数据。

使用场景:

适用于处理大规模和高维数据的异常值检测。

9.6 DBSCAN(密度聚类):

优点:

能够识别出不同形状和密度的簇。
对噪声点有较好的鲁棒性。

缺点:

对于高维数据和具有变化密度的数据可能不太适用。

使用场景:

适用于数据集中包含各种形状和密度的簇。

9.7 使用可视化工具:

优点:

提供直观的数据分布信息,便于人工观察。
可以通过散点图、直方图等更容易发现模式。

缺点:

对于大规模数据集可能不太实用。

使用场景:

适用于初步探索数据集,手动检查异常点。

9.8 综合使用方法的建议:

在实际应用中,常常结合多种方法以提高鲁棒性。

注意不同方法的适用场景,根据具体数据集的特点选择合适的方法。

异常点的处理方式需谨慎选择,可以考虑删除、替换或使用更复杂的异常值处理技术。

综上所述,不同的异常值检测方法各有优缺点,其选择应根据具体问题和数据特点来决定。

鲁棒性

鲁棒性是指系统在面对异常或变化时能够保持稳定性和可靠性的能力。在不同领域,鲁棒性都有着不同的含义,但核心概念都是相似的。

在计算机科学领域,鲁棒性通常指的是软件、算法或系统在面对不正确输入、异常情况、恶意攻击或硬件故障等情况下仍能够正确运行的能力。具有高度鲁棒性的系统能够容忍和处理各种不可预测的情况,而不会导致系统崩溃或产生不确定的行为。

在工程学中,鲁棒性是指设计产品或系统以在各种条件下保持性能和功能的能力。例如,一辆汽车具有鲁棒性意味着它能够在恶劣天气条件下、不同的道路条件下以及长时间使用后仍然保持良好的性能。

在统计学和机器学习领域,鲁棒性指的是对异常值或噪声数据的抵抗能力。具有鲁棒性的统计方法或机器学习模型能够在数据中存在一定程度的异常值或噪声时依然产生稳健的估计或预测结果。

总的来说,鲁棒性是指系统或方法在面对各种不确定性、异常情况或变化时能够保持稳定性和可靠性的能力。在设计和开发系统或算法时,考虑和提高鲁棒性是非常重要的,因为它能够提高系统的可靠性、安全性和性能。

十 总结

在数据清洗过程中,识别和处理异常值是至关重要的,因为它们可能影响到数据分析和建模的结果。

本文首先介绍了异常值的概念及其可能带来的危害,然后详细讨论了基于统计方法、箱线图、密度估计方法、聚类方法、孤立森林和DBSCAN等多种识别异常值的方法,并分析了它们的优缺点及适用场景。

通过综合运用这些方法,我们可以更有效地识别和处理数据中的异常值,提高数据的质量和可靠性,为后续的数据分析和建模工作奠定良好的基础。

希望本文能够帮助读者更好地理解异常值的检测方法,并在实际工作中取得更好的效果。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是甜美的江,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/465371.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机学习笔记---蜂鸣器播放提示音音乐(天空之城)

目录 蜂鸣器播放提示音 蜂鸣器播放音乐(天空之城) 准备工作 主程序 中断函数 上一节讲了蜂鸣器驱动原理和乐理基础知识,这一节开始代码演示! 蜂鸣器播放提示音 先创建工程:蜂鸣器播放提示音 把我们之前模块化的…

第73左侧菜单实现

layout下面新建menu layout index.vue导入menu import Menu from /views/layout/menu菜单实现&#xff1a; <template><el-menuactive-text-color"#ffd04b"background-color"#2d3a4b"class"el-menu-vertical-demo"default-active&quo…

MySQL篇----第二十篇

系列文章目录 文章目录 系列文章目录前言一、NULL 是什么意思二、主键、外键和索引的区别?三、你可以用什么来确保表格里的字段只接受特定范围里的值?四、说说对 SQL 语句优化有哪些方法?(选择几条)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

【ES6】模块化

nodejs遵循了CommonJs的模块化规范 导入 require() 导出 module.exports 模块化的好处&#xff1a; 模块化可以避免命名冲突的问题大家都遵循同样的模块化写代码&#xff0c;降低了沟通的成本&#xff0c;极大方便了各个模块之间的相互调用需要啥模块&#xff0c;调用就行 …

【开源】基于JAVA+Vue+SpringBoot的房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…

算法-4-归并排序

归并排序 public class Code01_MergeSort {// 递归方法实现public static void mergeSort1(int[] arr) {if (arr null || arr.length < 2) {return;}process(arr, 0, arr.length - 1);}// 请把arr[L..R]排有序// l...r N// T(N) 2 * T(N / 2) O(N)// O(N * logN)public …

C++入门(上)

文章目录 1:什么是C2.C的发展史3:C关键字(C98)4:命名空间4.1:命名空间的概念4.2:命名空间的定义4.3:命名空间的使用4.3.1加命名空间的名称以及域作用限定符4.3.2:使用using将命名空间中某个成员引入4.3.3:使用using namespace 命名空间名称展开命名空间代码1代码2 5:C输入与输出…

Android Jetpack Compose 沉浸式状态栏的实现

目录 概述效果展示代码实现总结 概述 说到沉浸式状态栏&#xff0c;很多小伙伴可能不太熟悉&#xff0c;其实让Android的状态栏的颜色和APP的主题颜色相同&#xff0c;给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服&#xff0c;实现沉浸式状态栏也很简单&…

Stable Diffusion 模型下载:DreamShaper(梦想塑造者)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型&#xff0c;可以生成写实、原画、2.5D 等多种图片&#xff0c;能生成很棒的人像和风景图。 条目内容类型大模型基础模型SD 1…

vs2019 - signtool签名和验签的手工操作

文章目录 vs2019 - signtool签名和验签的手工操作概述笔记导入根证书时间戳服务器的选择code sign - 签名文件在代码签名(code sign)前后的区别签名后, 查看属性, 是正常的.用signtool命令行进行验签移除签名END vs2019 - signtool签名和验签的手工操作 概述 signtool是进行c…

django报错:Cannot use ImageField because Pillow is not installed

1、问题概述 ERRORS: accounts.User.avatar: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow". System check identified 1 …

iOS AlDente 1.0自动防过充, 拯救电池健康度

经常玩iOS的朋友可能遇到过长时间过充导致的电池鼓包及健康度下降问题。MacOS上同样会出现该问题&#xff0c;笔者用了4年的MBP上周刚拿去修了&#xff0c;就是因为长期不拔电源的充电&#xff0c;开始还是电量一半的时候不接电源会黑屏无法开机&#xff0c;最后连着电源都无法…