清理异常值(MAD:绝对中位差)

清理异常数据:
中位数绝对偏差(MAD):用来描述单变量样本在定量数据中可变的一种标准

在这里插入图片描述

在统计学中,绝对中位差是刻画一元数据样本变化的一个鲁棒度量。由公式可以看出,其求解还算简单,给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数的绝对值从而形成一个新的数据样本,再求新的数据样本的中位数即为绝对中位差。比如说有一个数据样本集X={2 3 8 7 9 6 4},这时候数据的中位数是6,原始数据减去中位数求绝对值形成新的数据样本为{4 3 2 1 3 0 2},新的数据样本的中位数是2,所以原始数据样本集合的绝对中位差是2。

绝对中位差这个度量有什么用呢?

绝对中位差较标准差而言对“野”点(outlier)更加的鲁棒。在标准差的计算中,数据点到其均值的距离要求平方,因此对偏离较为严重的点偏离的影响得以加重,也就是说“野”点严重影响着标准差的求解,而少量的“野”点对绝对中位差的影响不大。
https://blog.csdn.net/lanchunhui/article/details/80381516 参考文章

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
x=np.random.random(100)
number=50
x=np.r_[x,-60,80,40,100,-100]#在后面添上,相当于padans中merge

plt.figure()
plt.subplot(211)
plt.hist(x,number)
plt.xlabel('raw') #没消除异常的时候
# plt.show()

def c_except(x,thresh=3.5):
    '''
    使用绝对中位差消除异常
    :return:
    '''
    if len(x)<=1:
        return
    me=np.median(x)
    abs=np.absolute(x-me)
    abs_me=np.median(abs)

    score=norm.ppf(0.75)*abs/abs_me
    return score

清理异常值(MAD:绝对中位差)_第1张图片

你可能感兴趣的:(数据处理以机器学习)