一种异常值检测方法、原理 (基于箱线图)

先介绍使用到的方法原理,也就是一种异常检测的方法。 
首先要先了解箱线图。

箱线图

箱线图(Boxplot)也称箱须图(Box-whisker Plot),是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法,它也可以粗略地看出数据是否具有有对称性,分布的分散程度等信息,特别可以用于对几个样本的比较。 ——MBAlib 箱线图

先看一下什么是箱线图,下面这个是常见的箱线图样子。

箱线图1

具体含义如下,首先计算出第一四分位数(Q1)、中位数、第三四分位数(Q3)。 
中位数我们都知道,就是将一组数字按从小到大的顺序排序后,处于中间位置(也就是50%位置)的数字。 
同理,第一四分位数、第三四分位数是按从小到大的顺序排序后,处于25%、75%的数字。

令 IQR=Q3−Q1IQR=Q3−Q1 ,那么 Q3+1.5(IQR)Q3+1.5(IQR) 和 Q1−1.5(IQR)Q1−1.5(IQR) 之间的值就是可接受范围内的数值,这两个值之外的数认为是异常值。

在Q3+1.5IQR(四分位距)和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。 
处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(li)的异常值extreme outliers。这种异常值的检测方法叫做Tukey’s method

从矩形盒两端边向外各画一条线段直到不是异常值的最远点 表示该批数据正常值的分布区间点,示该批数据正常值的分布区间。 
一般用“〇”标出温和的异常值,用“*”标出极端的异常值。

箱线图含义

python 代码分享

这段检测异常值的代码是从kaggle上看到的,很简单也很有用。 
代码原地址:https://www.kaggle.com/yassineghouzam/titanic-top-4-with-ensemble-modeling/notebook

通过上面对箱线图的介绍,相信同时也清楚了异常值检测的方法。 
假设我们现在已经有了一份pandas.DataFrame读取后的数据df,其中需要进行检测的列保存在features列表中,每个样本能忍受的最大异常值数量为n。

# Outlier detection 
import pandas as pd
import numpy as np
from collections import Counter

def detect_outliers(df,n,features):

    outlier_indices = []

    # iterate over features(columns)
    for col in features:
        # 1st quartile (25%)
        Q1 = np.percentile(df[col], 25)
        # 3rd quartile (75%)
        Q3 = np.percentile(df[col],75)
        # Interquartile range (IQR)
        IQR = Q3 - Q1

        # outlier step
        outlier_step = 1.5 * IQR

        # Determine a list of indices of outliers for feature col
        outlier_list_col = df[(df[col] < Q1 - outlier_step) | (df[col] > Q3 + outlier_step )].index

        # append the found outlier indices for col to the list of outlier indices 
        outlier_indices.extend(outlier_list_col)

    # select observations containing more than 2 outliers
    outlier_indices = Counter(outlier_indices)        
    multiple_outliers = list( k for k, v in outlier_indices.items() if v > n )

    return multiple_outliers   
# detect outliers from "Col1","Col2","Col3","Col4"
df = pd.read_csv("data.csv")
Outliers_to_drop = detect_outliers(df,2,["Col1","Col2","Col3","Col4"])
# Drop outliers
df = df.drop(Outliers_to_drop, axis = 0).reset_index(drop=True)
  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 箱线图一种图表,它可以帮助检测数据中的异常点。它根据数据集中的四分位数,绘制出一条中间线,以及上下方各自一条线,然后将数据点放入这个图表中,在图表中,所有数据点都可以明显地看到,而异常点则会很明显地“脱离”整个图表。 ### 回答2: 箱线图一种常用的统计图表,用来展示一组数据的分布情况。箱线图通过计算数据的最大值、最小值、中位数以及上下四分位数的值,从而提供了对异常值检测和识别。 箱线图原理如下:首先,我们需要计算数据的中位数,即将数据按从小到大的顺序排列,取中间位置的值作为中位数。然后,我们计算数据的上下四分位数,即将数据分成四等分,上四分位数表示数据的前25%值,下四分位数表示数据的后25%值。 接下来,在箱线图中,我们绘制一个箱子,箱子的上边界为上四分位数,下边界为下四分位数,箱子内包含了50%的数据。然后,我们在箱子的上方和下方绘制一对“须”,须的边界为最大值和最小值。 最后,我们可以通过箱线图来确定是否存在异常值。通常情况下,如果数据中存在异常值,那么异常值往往会位于须的外部。即如果数据的值超过了上限或下限,通常被认为是异常值箱线图的优点是简单易懂,直观地展示了数据的分布情况和异常值的存在。但是箱线图只能检测一维的异常值,对于多维的异常值检测有限。此外,箱线图并不能确定异常值是如何产生的,只能给出异常值的存在情况。因此,在进行异常值检测时,还需要结合其他的统计方法和领域知识进行综合分析。 ### 回答3: 箱线图一种用于展示数据分布的图表,它能够帮助我们检测异常值箱线图原理是通过统计学的方法来确定数据的中位数、上下四分位数以及上下限,从而判断出是否存在异常值。 首先,箱线图将数据按照大小进行排序,并计算出数据的中位数(即将数据分为较小和较大两部分的中间值)。然后,根据数据的中位数,将数据分为上下两个四分位数,即将数据分为四等分的位置。上下四分位数分别表示了数据的上边界和下边界。 接下来,根据上下四分位数,我们可以计算出箱子的长度,这个长度通常被称作"箱子"的大小。根据箱子的大小,可以得出异常值的判定规则。一般来说,异常值被定义为小于下边界的数或者大于上边界的数。根据箱子的大小,我们可以确定下边界和上边界的位置,从而判断出是否存在异常值。 在绘制箱线图时,通常会使用盒须来展示数据的离群值。盒须是从箱子上下两个四分位数的位置开始,延伸出的线段。离群点是指位于盒须以外的数据点,这些数据点可能是异常值。 通过观察箱线图中的箱子的大小、盒须以及离群值,我们可以较为直观地判断出数据中是否存在异常值
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值