绝对离差中位数( Median Absolute Deviation,MAD)算法

绝对离差中位数( MedianAbsolute Deviation,MAD) 是一种采用计算各观测值与平均值的距离总和的检测离群值的方法。
算法步骤:
绝对离差中位数( Median Absolute Deviation,MAD)算法_第1张图片

#离群点去除
import numpy as np

def MAD(p1):
    abs_bias = []  # 绝对偏差集合
    cent_dis = []
    count = 0
    flag = 0
    
    medi_point = np.median(p1, axis=0)
    for i in p1:
        k = abs(i - medi_point)
        abs_bias.append([k[0], k[1]])
    mad = np.median(abs_bias, axis=0)  # 绝对偏差中位数
    for i in abs_bias:
        k = i / mad
        cent_dis.append(max(k[0], k[1]))
    print(cent_dis)
    for i in cent_dis:
        print(i)
        if i > 2:#去除大于2的点
            flag += 1
            p1 = np.delete(p1, count, axis=0)
            count -= 1 
        count += 1
    if flag == 0:
        p1 = p1
    print(len(p1))
    return p1 
    
arr_a1 = [[375.186827965887, 409.36014188985826],
 [371.5696707841457, 422.8807663117266], 
 [385.0488383800207, 367.48815229960906], 
 [335.90845903051354, 422.04889867995547], 
 [505.5421363040007, 480.9614278672809], 
 [352.21547239759934, 362.963402415612]]
a1 = MAD(arr_a1)
print(a1)

你可能感兴趣的:(算法)