精华内容
下载资源
问答
  • 在进行机器学习过程中,需要对数据集进行异常值剔除或者修正,以便后续更好地进行信息挖掘。对于异常值处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?3σ原则,又叫拉依达原则,它...
    一、3σ原则定义异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。在进行机器学习过程中,需要对数据集进行异常值剔除或者修正,以便后续更好地进行信息挖掘。对于异常值的处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?3σ原则,又叫拉依达原则,它是指假设一组检测数据中只含有随机误差,需要对其进行计算得到标准偏差,按一定概率确定一个区间,对于超过这个区间的误差,就不属于随机误差而是粗大误差,需要将含有该误差的数据进行剔除。其局限性:仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提(样本>10),当测量次数少的情形用准则剔除粗大误差是不够可靠的。在测量次数较少的情况下,最好不要选用该准则。3σ原则:
    • 数值分布在(μ-σ,μ+σ)中的概率为0.6827
    • 数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
    • 数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
    其中,μ为平均值,σ为标准差。一般可以认为,数据Y的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%,这些超出该范围的数据可以认为是异常值。对于正态分布而言,数据大概分布如图所示:28832df690348284ab1542bf67f9c160.png深蓝色区域是距平均值小于一个标准差之内的数值范围。在正态分布中,此范围所占比率为全部数值之68%,根据正态分布,两个标准差之内的比率合起来为95%;三个标准差之内的比率合起来为99%。二、3σ原则作用异常值检测是机器学习中重要的一部分,它的任务是发现与大部分其他对象显著不同的对象。大部分机器学习过程都将这种差异信息视为噪声而丢弃。三、Python实现步骤具体步骤如下:
    1. 首先需要保证数据列大致上服从正态分布;

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

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

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

     1import numpy as np
    2import pandas as pd
    3from scipy import stats
    4
    5
    6# 创建数据
    7data = [1222,87,77,92,68,80,78,84,77,81,80,80,77,92,86,
    8       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
    9       76,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)
    展开全文
  • 原标题:Python数据处理:异常值处理方法之3σ原则一、3σ原则定义异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。在进行机器学习过程中,需要对数据集...

    原标题:Python数据处理:异常值处理方法之3σ原则

    一、3σ原则定义

    异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。

    在进行机器学习过程中,需要对数据集进行异常值剔除或者修正,以便后续更好地进行信息挖掘。

    对于异常值的处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?

    3σ原则,又叫拉依达原则,它是指假设一组检测数据中只含有随机误差,需要对其进行计算得到标准偏差,按一定概率确定一个区间,对于超过这个区间的误差,就不属于随机误差而是粗大误差,需要将含有该误差的数据进行剔除。

    其局限性:仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提(样本>10),当测量次数少的情形用准则剔除粗大误差是不够可靠的。在测量次数较少的情况下,最好不要选用该准则。

    3σ原则:

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

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

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

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

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

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

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

    二、3σ原则作用

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

    三、Python实现步骤

    具体步骤如下:

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

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

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

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

    1

    importnumpy

    asnp

    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) 返回搜狐,查看更多

    责任编辑:

    展开全文
  • 安然数据集——回归和异常值处理 以下代码是在python 3.6下运行。 安然事件造成有史以来最大的公司破产。在2000年度,安然是美国最大的能源公司,然而被揭露舞弊后,它在一年内就破产了。 我们之所以选择使用安然...


    机器学习——回归和异常值处理(安然数据集)

    以下代码是在python 3.6下运行。

    安然事件造成有史以来最大的公司破产。在2000年度,安然是美国最大的能源公司,然而被揭露舞弊后,它在一年内就破产了。

    我们之所以选择使用安然事件的数据集来做机器学习的项目,是因为我们已经有安然的电子邮件数据库,它包含150名前安然员工之间的50万封电子邮件,主要是高级管理人员。这也是唯一的大型公共的真实邮件数据库。

    感兴趣的可以看一下安然的纪录片,也是非常令人唏嘘的一部经典纪录片:【纪录片】安然:房间里最聪明的人
    或者阅读安然事件文章

    关于安然数据集的分析可参考上一篇文章:
    安然数据集分析

    根据年龄和工资回归

    #!/usr/bin/python
    
    import random
    import numpy
    import matplotlib.pyplot as plt
    import pickle
    
    from outlier_cleaner import outlierCleaner
    
    
    #python2_to_python3
    class StrToBytes:  
        def __init__(self, fileobj):  
            self.fileobj = fileobj  
        def read(self, size):  
            return self.fileobj.read(size).encode()  
        def readline(self, size=-1):  
            return self.fileobj.readline(size).encode()
    
    
    ### load up some practice data with outliers in it
    ages = pickle.load( StrToBytes(open("practice_outliers_ages.pkl", "r")))
    net_worths = pickle.load( StrToBytes(open("practice_outliers_net_worths.pkl", "r")) )
    
    
    
    ### ages and net_worths need to be reshaped into 2D numpy arrays
    ### second argument of reshape command is a tuple of integers: (n_rows, n_columns)
    ### by convention, n_rows is the number of data points
    ### and n_columns is the number of features
    ages       = numpy.reshape( numpy.array(ages), (len(ages), 1))
    net_worths = numpy.reshape( numpy.array(net_worths), (len(net_worths), 1))
    #from sklearn.cross_validation import train_test_split
    
    from sklearn.model_selection import train_test_split
    ages_train, ages_test, net_worths_train, net_worths_test = train_test_split(ages, net_worths, test_size=0.1, random_state=42)
    
    ### fill in a regression here!  Name the regression object reg so that
    ### the plotting code below works, and you can see what your regression looks like
    
    
    
    
    from sklearn.linear_model import LinearRegression
    
    reg = LinearRegression()
    reg.fit(ages_train, net_worths_train)
    
    print("scope: ", reg.coef_)
    print("intercept: ", reg.intercept_)
    print("train score: ", reg.score(ages_train, net_worths_train))
    print("test score: ", reg.score(ages_test, net_worths_test))
    
    try:
        plt.plot(ages, reg.predict(ages), color="blue")
    except NameError:
        pass
    plt.scatter(ages, net_worths)
    plt.show()
    

    在这里插入图片描述

    scope: [[5.07793064]]
    intercept: [25.21002155]
    train score: 0.4898725961751499
    test score: 0.8782624703664671

    此时斜率是5.07,训练集的R-平方值是0.4898,测试集的R-平方值是0.878

    删除年龄和工资中的异常值

    在outlier_cleaner.py中定义异常值清除函数outlierCleaner(),清楚10%的异常值

    #!/usr/bin/python
    
    import math
    
    def outlierCleaner(predictions, ages, net_worths):
        """
            Clean away the 10% of points that have the largest
            residual errors (difference between the prediction
            and the actual net worth).
    
            Return a list of tuples named cleaned_data where 
            each tuple is of the form (age, net_worth, error).
        """
        
        cleaned_data = []
    
        ### your code goes here
    
        errors = abs(predictions - net_worths)
        cleaned_data = zip(ages, net_worths, errors)
        cleaned_data = sorted(cleaned_data, key=lambda clean:clean[2])
        clean_num = int(math.ceil(len(cleaned_data)*0.9))
        cleaned_data = cleaned_data[:clean_num]
        
    
        print('data length: ',len(ages))
        print('cleaned_data length: ',len(cleaned_data))
        return cleaned_data
    

    调用异常值清除函数outlierCleaner(),讲清除后的数据重新回归拟合

    import outlier_cleaner
    
    cleaned_data = outlierCleaner(reg.predict(ages_train), ages_train, net_worths_train)
    
    ages_train_new, net_worths_train_new, e = zip(*cleaned_data)
    
    ages_train_new       = numpy.reshape( numpy.array(ages_train_new), (len(ages_train_new), 1))
    net_worths_train_new = numpy.reshape( numpy.array(net_worths_train_new), (len(net_worths_train_new), 1))
    
    reg.fit(ages_train_new, net_worths_train_new)
    
    
    
    print("scope_removal: ", reg.coef_)
    print("intercept_removal: ", reg.intercept_)
    print("train score_removal: ", reg.score(ages_train_new, net_worths_train_new))
    print("test score_removal: ", reg.score(ages_test, net_worths_test))
    
    try:
        plt.plot(ages_train_new, reg.predict(ages_train_new), color="blue")
    except NameError:
        pass
    plt.scatter(ages_train_new, net_worths_train_new)
    plt.show()
    

    在这里插入图片描述

    scope_removal: [[6.36859481]]
    intercept_removal: [-6.91861069]
    train score_removal: 0.9513734907601892
    test score_removal: 0.9831894553955322

    删除异常之后,斜率是6.369,训练集的R-平方值是0.95,测试集的R-平方值是0.98,效果明显的好很多了。

    根据工资和奖金处理数据集

    主要是根据安然数据集中的工资和奖金进行处理,来判断此数据集中是否有异常值。

    import pickle
    import sys
    import matplotlib.pyplot
    sys.path.append("../tools/")
    from feature_format import featureFormat, targetFeatureSplit
    
    #python2 to python3
    class StrToBytes:  
        def __init__(self, fileobj):  
            self.fileobj = fileobj  
        def read(self, size):  
            return self.fileobj.read(size).encode()  
        def readline(self, size=-1):  
            return self.fileobj.readline(size).encode()
    
    ### read in data dictionary, convert to numpy array
    data_dict = pickle.load( StrToBytes(open("../final_project/final_project_dataset.pkl", "r") ))
    features = ["salary", "bonus"]
    
    
    data = featureFormat(data_dict, features)
    

    可视化工资和奖金数据集

    for point in data:
        salary = point[0]
        bonus = point[1]
        matplotlib.pyplot.scatter( salary, bonus )
    
    matplotlib.pyplot.xlabel("salary")
    matplotlib.pyplot.ylabel("bonus")
    matplotlib.pyplot.show()
    

    在这里插入图片描述
    很明显,右上角的那一数据点与其他点差距太大,是异常值。

    找出工资和奖金的异常值

    max_value = sorted(data, reverse=True, key=lambda sal:sal[0])[0]
    print('the max_value is: ', max_value)
    
    for i in data_dict:
        if data_dict[i]['salary'] == max_value[0]:
            print('Who is the max_value is: ',i)
    

    the max_value is: [26704229. 97343619.]
    Who is the max_value is: TOTAL

    删除异常值后重新可视化工资和奖金数据

    data_dict.pop( 'TOTAL', 0 )
    data = featureFormat(data_dict, features)
    
    for point in data:
        salary = point[0]
        bonus = point[1]
        matplotlib.pyplot.scatter( salary, bonus )
    
    matplotlib.pyplot.xlabel("salary")
    matplotlib.pyplot.ylabel("bonus")
    matplotlib.pyplot.show()
    

    在这里插入图片描述

    我们认为还有 4 个异常值需要调查;让我们举例来看。两人获得了至少 5 百万美元的奖金,以及超过 1 百万美元的工资;换句话说,他们就像是强盗。

    和这些点相关的名字是什么?

    for i in data_dict:
        if data_dict[i]['salary'] != 'NaN' and data_dict[i]['bonus'] != 'NaN':
            if data_dict[i]['salary'] > 1e6 and data_dict[i]['bonus'] > 5e6:
                print(i)
    

    LAY KENNETH L
    SKILLING JEFFREY K

    你认为这两个异常值应该并清除,还是留下来作为一个数据点? 留下来,它是有效的数据点 清除掉,它是一个电子表格怪癖 清除掉,它是一个错误?

    这两个异常数据当天不能删除,事实表明他们两个非法拿到了很多钱,是司法的重点研究对象

    展开全文
  • 4异常值处理 4.1导读 数据预处理过程中,异常值的处理也相当重要。例如,一批数据中,11 号被试是高中二年级学生,但年龄为 33 岁,显然这个数据比较异常,很可能干扰实际结果,理论上高中二年级学生的平均年龄为 16...

    一、教学内容

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    二、备注

    需要全套资料或者代做加QQ1564658423。

    展开全文
  • R语言数据异常值处理

    千次阅读 2019-11-03 08:47:23
    异常值简单来说就是偏离数据集整体的值。在统计学意义上,如果一个值偏离整体,那么就会影响其正态分布,进而影响需要以正态分布为前提的统计模型(如线性回归、方差分析)的结果准确度。 ###检验异常值的方法 ####...
  • 上一篇文章我们讲了如何查看数据,包括查看这些数据有那些特征,每个人的数据是什么,如何查看NaN等,需要回归的可以再看两眼哦[机器学习] 美国最大欺诈案—对安然事件数据集的分析(一) 本篇文章主要是对安然事件...
  • 一、内容来源 课程来源:大数据分析师(第一期)(学堂在线 北邮 杨亚) 数据集分享:链接:...数据处理代码1:找出异常值,并通过线性插值的方式处理掉 import numpy as np import
  • 原始数据集来自本周刚抓取的创造营2020撑腰榜数据,公众号后台回复‘ 异常值’可以获得本节使用的数据集与ipynb文件。 1.查看缺失值 isnull 和 isna 可以获取 返回缺失值 的布尔值,为True则表示缺失值,False则...
  • 数据处理异常值分析、处理

    千次阅读 2018-07-30 21:52:41
    异常值的分析方法 1、简单统计量分析 做一个描述性统计,进而查看哪些数据不合理。最常用的是最大值和最小值,如年龄的最大值199,则存在异常。 2、3σ原则 针对服从正态分布的数据, 3、箱形图分析(R语言)...
  • 导读:在数据清洗过程中,主要处理的是缺失值、异常值和重复值。所谓清洗,是对数据集通过丢弃、填充、替换、去重等操作,达到去除异常、纠正错误、补足缺失的目的。 作者:宋天龙 如需转载请联系华章科技 01...
  • 点击上方"可以叫我才哥"关注我们前3章:Pandas学习笔记01-基础知识Pandas学习笔记02-数据合并Pandas学习笔记03-数据清洗(通过索引...原始数据集来自本周刚抓取的创造营2020撑腰榜数据,公众号后台回复‘ 异常值’...
  • 在本教程中,你将会发现更多关于异常值的信息,以及识别和过滤来自数据集异常值的两种统计方法。学完本教程,你将会明白:数据集中出现的不太可能的观察值往往就是异常值异常值的出现有很多种原因。标准差可用于...
  • 数据清洗阶段,我们需要找到异常值,并对其进行相应的一些处理。在python中,异常值处理常常需要结合一些数据模型或概率分布来解决。下面做一个简单的介绍。1.打开pycharm开发工具,在运行窗口输入命令:import ...
  • 原标题:数据预处理—剔除异常值,平滑处理,标准化(归一化)数据预处理的主要任务如下:(1)数据清理:填写空缺值,平滑噪声数据,识别,删除孤立点,解决不一致性(2)数据集成:集成多个数据库,数据立方体,文件(3)...
  • 数据集接 《3缺失值离群点处理》中2 1、异常值分析及处理 #获取月收入的异常值 out boxplot(traindata$x5) # which(traindata$x5%in% out) # traindata1 #boxplot(traindata1$x5)   #首先对于x2变量,即客户的...
  • 在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值创建数据为了方便理解,我们先创建一组带有缺失值的简单数据用于讲解...
  • 一般来说,现实中的数据会存在信息不完整、数据点缺失和异常值的情况,理想情况下,我们会去尝试修复非规整数据,但很多数据集都源于一些难以重现(不可再现)的收集过程(比如网络活动数据和传感器数据),因此实际...
  • 之前有教过空值的处理方法,根据以往的经验,一般我们在处理小规模数据时都是用肉眼扫描的方式去查看数据中的异常值,即不科学,鲁棒性也不强,不适于中大规模数据集,本次着重介绍一下异常数据的查找及处理操作。...
  • 如何从大量数据中找出异常值

    千次阅读 2018-11-08 08:30:59
    看看数据集直方图也许能看出点端倪,比如下面这个图,下方的是原始数据集,上面的是对应直方图,可以看到大多数都分布在11000左边,它的右边存在一些分布,这些分布极少的点很可能就是异常点。 sigma原则 一些简单...
  • 比如,我们会用数据分析统计数据集中的缺失值、异常值,更直观的也会进阶到数据可视化的部分(到达该部分一般是成了文章类或汇报类的一部分),然后以统计结果为基础再对数据进行处理。这个过程往往不是一次性过程,是...
  • 应用线性回归方程预测并充填缺失(附python代码) 背景描述: 应用场景: 解题思路: 示例代码: 附上数据集和源码
  • 在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值 创建数据 为了方便理解,我们先创建一组带有缺失值的简单数据用于...
  • 数据预处理的主要任务如下:  (1)数据清理:填写空缺,平滑噪声数据,识别,删除孤立点,... (4)数据归约:得到数据集的压缩表示,量小,但可以得到相近或相同的结果  (5)数据离散化:数据规约的一部分,通过...
  • 数据处理数据分析前极为重要的一环。有这样一种说法,做数据分析工作,90%以上的精力是放在了数据处理上。...元数据存在的情况较多,比如:空值、异常值等。一份完整的数据也许是通过多个不同的数...
  • 点击上方“早起python”,关注公众号满满干货,极速送达在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值创建数据为了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 628
精华内容 251
关键字:

数据集异常值处理