清理异常值(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<thresh

#异常消除后
x_late=x[c_except(x)]
plt.subplot(212)
plt.hist(x_late,number)
plt.show()


在这里插入图片描述

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值