利用3sigma准则识别数据中的坏值

对于正态分布的随机变量而言,其概率密度满足
在这里插入图片描述
μ是随机变量的均值,σ是随机变量的标准差。 对于正态分布的曲线,一般大家都很熟悉,由于概率密度函数关于x=μ对称,在样本个数较多的情况下,有以下三个概率成立
在这里插入图片描述
即绝大多数样本分布在[μ-3σ,μ+3σ]闭区间之内,只有极少数的样本可能分布在该区间之外,概率不到0.003,几乎不可能发生,是小概率事件,这即为3σ原则。 我们通常把这些极少数分布在[μ-3σ,μ+3σ]区间之外的样本称之为“坏值”。
在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler

def three_sigma(y):
    #数据标准化处理
    yStd = StandardScaler().fit_transform(y)
    result = []
    for index, value in enumerate(yStd):
        if abs(value - np.mean(yStd)) > 3 * np.std(yStd):
            result.append(index)
    return result

if __name__=="__main__":
    dataframe = pd.read_csv("32_finaldata_lowfreq_magn.csv").head(5000)["average"]
    y = dataframe.values
    X = np.arange(0, len(y), 1)
    train_data = np.vstack((X, y)).T  #X,y按列合并
    y_Hdim = y.reshape((len(y), 1))
    dirty_data = three_sigma(y_Hdim)
    plt.plot(train_data[:, 0], train_data[:, 1], color="c")
    for i in range(len(dirty_data)):
        plt.text(dirty_data[i], y[dirty_data[i]], "("+str(dirty_data[i])+","+str(y[dirty_data[i]])+")")
    plt.show()

在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值