欢迎光临
我们一直在努力

matlab箱线如何去除异常值

说明

数据分析教程 正在计划编写中,欢迎大家加微信 sinbam 提供意见、建议、纠错、催更。

箱线图四分位检测异常值(Box Plot Diagram to Identify Outliers),箱型图提供了识别异常值的一个标准,即异常值通常被定义为 小于QL-1.5IQR 或大于 QU+1.5IQR 的值。

箱线图识别异常值

离群值是数据序列中的一个极端值,它要么很小,要么很大,因此影响数据序列的整体观测值。异常值也被称为极端值,因为它们位于数据序列的两端。由于其极端值很高或很低,可能影响整体观测,因此应从数据序列中丢弃。

箱线图也称为盒形图,是一种典型的四分位数和四分位数之间的图解法,有助于定义上限和下限,超过上限和下限的任何数据都将被视为异常值。该图表的目的是识别异常值,并在进行进一步观察之前将其从数据系列中剔除,以便研究得出的结论能够给出更准确的结果,而不受任何极端或异常值的影响。

算法

数列的四分位中:

四分位距 IQR = Q3 – Q1

下界 Lower Limit = Q1 – 1.5 IQR.

上界 Upper Limit = Q3 + 1.5 IQR

下界 Lower Limit 和 上界 Upper Limit 之外的数据为异常值。

原理

也就是说,如果数据点低于 Q1–1.5×IQR 或高于 Q3+1.5×IQR,则认为它离中心值太远而不合理。也许你在测量的时候碰了秤,或者你的实验室搭档是个白痴,你不应该让他碰任何设备。谁知道呢?但不管他们的原因是什么,离群值是那些似乎不“适合”的点。

为什么是异常值框宽度的1.5倍?为什么这个特定的值会标记“可接受”和“不可接受”值之间的差异?因为,当 John Tukey 在1977年发明了显示这些值的盒须图时,他选择了 1.5×IQR 作为异常值的去标记线。这很有效,所以我们一直在使用这个值。如果你深入研究统计学,你会发现,对于钟形曲线形状的数据来说,这种合理性度量意味着通常只有大约百分之一的数据是异常值。

代码实现

用 Python 的 Pandas 库:

import pandas as pd

df = pd.read_csv(‘https://www.gairuo.com/file/data/team.csv’)

df.head()

”’

name team Q1 Q2 Q3 Q4

0 Liver E 555 21 24 64

1 Arry C 36 888 37 57

2 Ack A 57 60 18 84

3 Eorge C 93 96 71 78

4 Oah D 65 49 61 86

”’

# 构造异常值

df.at[0, ‘Q1’] = 555

df.at[1, ‘Q2’] = 888

df.at[2, ‘Q4’] = -111

# 检测到异常值置为 nan

def box_plot_outliers(s):

q1, q3 = s.quantile(.25), s.quantile(.75)

iqr = q3 – q1

low, up = q1 – 1.5*iqr, q3 + 1.5*iqr

outlier = s.mask((sup))

return outlier

# 应用

df.head().loc[:, ‘Q1’:].apply(box_plot_outliers)

”’

Q1 Q2 Q3 Q4

0 NaN 21.0 24.0 64

1 36.0 NaN 37.0 57

2 57.0 60.0 NaN 84

3 93.0 96.0 71.0 78

4 65.0 49.0 61.0 86

”’

参考

https://www.purplemath.com/modules/boxwhisk3.htm

https://www.whatissixsigma.net/box-plot-diagram-to-identify-outliers/

https://www.zhihu.com/question/36172806

相关内容

56968622

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。