python异常值处理方法盖帽法_Python数据处理:异常值处理方法之3σ原则

数值分布在(μ-σ,μ+σ)中的概率为0.6827

数值分布在(μ-2σ,μ+2σ)中的概率为0.9545

数值分布在(μ-3σ,μ+3σ)中的概率为0.9973

其中, μ为平均值,σ为标准差。

一般可以认为,数据Y的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%,这些超出该范围的数据可以认为是异常值。

对于正态分布而言,数据大概分布如图所示:

深蓝色区域是距平均值小于一个标准差之内的数值范围。在正态分布中,此范围所占比率为全部数值之68%,根据正态分布,两个标准差之内的比率合起来为95%;三个标准差之内的比率合起来为99%。

二、3σ原则作用

异常值检测是机器学习中重要的一部分,它的任务是发现与大部分其他对象显著不同的对象。大部分机器学习过程都将这种差异信息视为噪声而丢弃。

三、Python实现步骤

具体步骤如下:

首先需要保证数据列大致上服从正态分布;

计算需要检验的数据列的平均值和标准差;

比较数据列的每个值与平均值的偏差是否超过3倍,如果超过3倍,则为异常值;

剔除异常值,得到规范的数据。

2importpandas aspd

3fromscipy importstats

4

5

6# 创建数据

7data = [ 1222, 87, 77, 92, 68, 80, 78, 84, 77, 81, 80, 80, 77, 92, 86,

876, 80, 81, 75, 77, 72, 81, 72, 84, 86, 80, 68, 77, 87,

976, 77, 78, 92, 75, 80, 78, 123, 3, 1223, 1232]

10df = pd.DataFrame(data,columns = [ 'value'])

11

12# 计算均值

13u = df[ 'value'].mean

14

15# 计算标准差

16std = df[ 'value'].std

17

18print(stats.kstest(df, 'norm', (u, std)))

19# 此时,pvalue > 0.05,不拒绝原假设。因此上面的数据服从正态分布

20print( '均值为:%.3f,标准差为:%.3f'% (u,std))

21print( '------')

22

23

24# 定义3σ法则识别异常值

25# 识别异常值

26error = df[np.abs(df[ 'value'] - u) > 3*std]

27# 剔除异常值,保留正常的数据

28data_c = df[np.abs(df[ 'value'] - u) <= 3*std]

29

30# 输出正常的数据

31print(data_c)

32# 输出异常数据

33print(error)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值