关于python:Python数据分析-异常值检测和处理

35次阅读

共计 3374 个字符,预计需要花费 9 分钟才能阅读完成。


上一篇分享了对于数据缺失值解决的一些办法,链接如下:[【Python 数据分析根底】: 数据缺失值解决

本篇持续分享数据荡涤中的另一个常见问题:异样值检测和解决。

1 什么是异样值?

在机器学习中,异样检测和解决 是一个比拟小的分支,或者说,是机器学习的一个副产物,因为在个别的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上体现齐全与整体样本不统一的点,咱们就称其为异样点 ,通常异样点在预测问题中是不受开发者欢送的,因为预测问题通产关注的是整体样本的性质,而异样点的生成机制与整体样本齐全不统一,如果算法对异样点敏感,那么生成的模型并不能对整体样本有一个较好的表白,从而预测也会不精确。 从另一方面来说,异样点在某些场景下反而令剖析者感到极大趣味,如疾病预测,通常健康人的身材指标在某些维度上是类似,如果一个人的身材指标呈现了异样,那么他的身材状况在某些方面必定产生了扭转,当然这种扭转并不一定是由疾病引起(通常被称为乐音点),但异样的产生和检测是疾病预测一个重要起始点。类似的场景也能够利用到信用欺诈,网络攻击等等。

2 异样值的检测办法

个别异样值的检测办法有基于统计的办法,基于聚类的办法,以及一些专门检测异样值的办法等,上面对这些办法进行相干的介绍。

1. 简略统计

如果应用 pandas,咱们能够间接应用describe() 来察看数据的统计性形容(只是粗略的察看一些统计量),不过统计数据为连续型的,如下:

df.describe()

或者简略应用散点图也能很清晰的察看到异样值的存在。如下所示:

2. 3∂准则

这个准则有个条件:数据须要遵从正态分布。在 3∂准则下,异样值如超过 3 倍标准差,那么能够将其视为异样值。正负 3∂的概率是 99.7%,那么间隔平均值 3∂之外的值呈现的概率为 P(|x-u| > 3∂) <= 0.003,属于极个别的小概率事件。如果数据不遵从正态分布,也能够用远离平均值的多少倍标准差来形容。

红色箭头所指就是异样值。

3. 箱型图

这种办法是利用箱型图的 四分位距(IQR)对异样值进行检测,也叫Tukey‘s test。箱型图的定义如下:

四分位距 (IQR) 就是上四分位与下四分位的差值。而咱们通过 IQR 的 1.5 倍为规范,规定:超过 上四分位 +1.5 倍 IQR 间隔,或者下四分位 -1.5 倍 IQR 间隔 的点为异样值。上面是 Python 中的代码实现,次要应用了 numpypercentile办法。

Percentile = np.percentile(df['length'],[0,25,50,75,100])
IQR = Percentile[3] - Percentile[1]
UpLimit = Percentile[3]+ageIQR*1.5
DownLimit = Percentile[1]-ageIQR*1.5

也能够应用 seaborn 的可视化办法 boxplot 来实现:

f,ax=plt.subplots(figsize=(10,8))
sns.boxplot(y='length',data=df,ax=ax)
plt.show()

红色箭头所指就是异样值。

以上是罕用到的判断异样值的简略办法。上面来介绍一些较为简单的检测异样值算法,因为波及内容较多,仅介绍核心思想,感兴趣的敌人可自行深入研究。

4. 基于模型检测

这种办法个别会构建一个 概率分布模型,并计算对象合乎该模型的概率,把具备低概率的对象视为异样点。如果模型是簇的汇合,则异样是不显著属于任何簇的对象;如果模型是回归时,异样是绝对远离预测值的对象。

离群点的概率定义:离群点是一个对象,对于数据的概率分布模型,它具备低概率。这种状况的前提是必须晓得数据集遵从什么散布,如果预计谬误就造成了重尾散布。

比方特色工程中的 RobustScaler 办法,在做数据特征值缩放的时候,它会利用数据特色的分位数散布,将数据依据分位数划分为多段,只取两头段来做缩放,比方只取 25% 分位数到 75% 分位数的数据做缩放。这样减小了异样数据的影响。

优缺点:(1)有松软的统计学实践根底,当存在充沛的数据和所用的测验类型的常识时,这些测验可能十分无效;(2)对于多元数据,可用的抉择少一些,并且对于高维数据,这些检测可能性很差。

5. 基于近邻度的离群点检测

统计办法是利用数据的散布来察看异样值,一些办法甚至须要一些散布条件,而在理论中数据的散布很难达到一些假如条件,在应用上有肯定的局限性。

确定数据集的有意义的邻近性度量比确定它的统计散布更容易。这种办法比统计学办法更个别、更容易应用,因为 一个对象的离群点得分由到它的 k - 最近邻(KNN)的间隔给定。

须要留神的是:离群点得分对 k 的取值高度敏感。如果 k 太小,则大量的邻近离群点可能导致较低的离群点得分;如果 K 太大,则点数少于 k 的簇中所有的对象可能都成了离群点。为了使该计划对于 k 的选取更具备鲁棒性,能够应用 k 个最近邻的均匀间隔。

优缺点:(1)简略;(2)毛病:基于邻近度的办法须要 O(m2)工夫,大数据集不实用;(3)该办法对参数的抉择也是敏感的;(4)不能解决具备不同密度区域的数据集,因为它应用全局阈值,不能思考这种密度的变动。

5. 基于密度的离群点检测

从基于密度的观点来说,离群点是在低密度区域中的对象。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种罕用的定义密度的办法是,定义密度为到 k 个最近邻的均匀间隔的倒数。如果该间隔小,则密度高,反之亦然。另一种密度定义是 应用 DBSCAN 聚类算法应用的密度定义,即一个对象四周的密度等于该对象指定间隔 d 内对象的个数。

优缺点:(1)给出了对象是离群点的定量度量,并且即便数据具备不同的区域也可能很好的解决;(2)与基于间隔的办法一样,这些办法必然具备 O(m2)的工夫复杂度。对于低维数据应用特定的数据结构能够达到 O(mlogm);(3)参数抉择是艰难的。尽管LOF 算法通过观察不同的 k 值,而后获得最大离群点得分来解决该问题,然而,依然须要抉择这些值的上下界。

6. 基于聚类的办法来做异样点检测

基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇,那么该对象属于离群点。

离群点对初始聚类的影响:如果通过聚类检测离群点,则因为离群点影响聚类,存在一个问题:构造是否无效。这也是 k-means 算法的毛病,对离群点敏感。为了解决该问题,能够应用如下办法:对象聚类,删除离群点,对象再次聚类(这个不能保障产生最优后果)。

优缺点:(1)基于线性和靠近线性复杂度(k 均值)的聚类技术来发现离群点可能是高度无效的;(2)簇的定义通常是离群点的补,因而可能同时发现簇和离群点;(3)产生的离群点集和它们的得分可能十分依赖所用的簇的个数和数据中离群点的存在性;(4)聚类算法产生的簇的品质对该算法产生的离群点的品质影响十分大。

7. 专门的离群点检测

其实以上说到聚类办法的本意是是无监督分类,并不是为了寻找离群点的,只是恰好它的性能能够实现离群点的检测,算是一个衍生的性能。

除了以上提及的办法,还有两个专门用于检测异样点的办法比拟罕用:One Class SVMIsolation Forest,具体内容不进行深入研究。

3 异样值的解决办法

检测到了异样值,咱们须要对其进行肯定的解决。而个别异样值的解决办法可大抵分为以下几种:

  • 删除含有异样值的记录:间接将含有异样值的记录删除;
  • 视为缺失值:将异样值视为缺失值,利用缺失值解决的办法进行解决;
  • 平均值修改:可用前后两个观测值的平均值修改该异样值;
  • 不解决:间接在具备异样值的数据集上进行数据挖掘;

是否要删除异常值可依据理论状况思考。因为一些模型对异样值不很敏感,即便有异样值也不影响模型成果,然而一些模型比方逻辑回归 LR 对异样值很敏感,如果不进行解决,可能会呈现过拟合等十分差的成果。

4 异样值总结

以上是对异样值检测和解决办法的汇总。

通过一些检测办法咱们能够找到异样值,但所得后果并不是相对正确的,具体情况还需本人依据业务的了解加以判断。同样,对于异样值如何解决,是该删除,修改,还是不解决也需结合实际状况思考,没有固定的。

本文转自 https://juejin.cn/post/6844903653178867726,如有侵权,请分割删除。

正文完
 0