- IQR(InterQuartile Range)检测
常用于一维数据的异常值检测,首先计算数据的下四分位数Q1(25%分位数)、中位数Q2(50%)分位数、上四分位数Q3(75%分位数),再计算 IQR = Q3 - Q1,最好通过k来调整范围,得到异常值。
当k=1.5时,称为内限,经典的箱线图正是以此为界计算异常值。当k=3时,称为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(extreme outliers)
import numpy as np
import random
data = np.array([random.random() for i in range(10000)])
k= 1.5
IQR = np.percentile(data, 75) - np.percentile(data, 25)
min_bound, max_bound = np.percentile(data, 25) - k * IQR, np.percentile(data, 75) - k * IQR
print("min_bound is {0:.4f}, max_bound is {1:.4f}".format(min_bound, max_bound))
------
min_bound is -0.4985, max_bound is 0.0026
2. Z-score
假定数据是高斯分布,异常值是分布尾部的数据点,因此远离数据的平均值。距离的远近取决于使用公式计算的归一化数据点
的设定阈值
:
其中
是一个数据点,μ是所有点
的平均值,δ是所有点
的标准偏差。
然后经过标准化处理后,异常值也进行标准化处理,其绝对值大于
:
一般取值为3