精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python 检查数据中是否有缺失值,删除缺失值的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 处理缺失值,过滤缺失值,补全缺失值删除重复值

    在进行数据分析和建模的过程中,大量时间花在数据准备上:加载,清理,转换和重新排列。pandas以及内置的python语言功能提供了一个高级灵活和快速的工具集,使你能够将数据处理为正确的形式。

    7.1 处理缺失值

    对于数值型数据,pandas使用NaN 来表示缺失值。我们称 NaN 为容易检测到的表示值:

    string_data=pd.Series(['aardvark','artichoke',np.nan,'avocado'])
    string_data.isnull()
    0    False
    1    False
    2     True
    3    False
    dtype: bool
    
    string_data[0]=None      # None 值在对象数组中也被当作NA 处理
    
    NA处理方法 描述
    dropna 根据每个标签的值是否是缺失数据来筛选标签,并根据允许丢失的数据量来确定阈值
    fillna 用某些值填充缺失的数据或使用插值方法
    insull/notnull 判断是否是缺失值

    7.1.1 过滤缺失值

    虽然可以使用 pandas.isnull 和布尔值索引手动的过滤缺失值,但是 dropna 在过滤缺失值是很有用的。在Series 中使用,返回 Series 中所有非空数据以及其索引。

    data=pd.Series([1,np.nan,3,5,np.nan,7])   # data[data.notnull()]  这个效果是一样的
    data.dropna()
    0    1.0
    2    3.0
    3    5.0
    5    7.0
    dtype: float64
    

    处理 dataframe 对象时,你可能想要删除全部为NA 或包含有NA 的行或列。dropna 默认情况下会删除包含缺失值的行

    data=pd.DataFrame([[1.,6.5,3.],[1.,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6.5,3.]])
    cleaned=data.dropna()
    data
    	0	1	2
    0	1.0	6.5	3.0
    1	1.0	NaN	NaN
    2	NaN	NaN	NaN
    3	NaN	6.5	3.0
    
    cleaned
         0	1	2
    0	1.0	6.5	3.0
    
    data.dropna(how='all')     # 这个就删除所有值都是 NA 的行
    	0	1	2
    0	1.0	6.5	3.0
    1	1.0	NaN	NaN
    3	NaN	6.5	3.0
    
    data[4]=np.nan
    data.dropna(axis=1,how='all')              # 删除列,
    
    data
    	0	1	2	4
    0	1.0	6.5	3.0	NaN
    1	1.0	NaN	NaN	NaN
    2	NaN	NaN	NaN	NaN
    3	NaN	6.5	3.0	NaN
    
    # 过滤 dataframe 的行的相关方法往往涉及时间序列数据,假如你只需保留包含一定数量的观察值的行,可以用 thresh 参数来表示
    df=pd.DataFrame(np.random.randn(7,3))
    df.iloc[:4,1]=np.nan
    df.iloc[:2,2]=np.nan
    df
    	   0	1	2
    0	-0.018181	NaN	NaN
    1	-0.148029	NaN	NaN
    2	-1.068483	NaN	0.556369
    3	-0.716866	NaN	1.273184
    4	-0.690865	0.601410	0.467746
    5	-2.681891	-0.556718	-0.529830
    6	-0.572316	0.057732	-0.988892
    df.dropna()
               0	1	2
    4	-0.690865	0.601410	0.467746
    5	-2.681891	-0.556718	-0.529830
    6	-0.572316	0.057732	-0.988892
    
    
    df.dropna(thresh=2)                          # 保留非 NA 的数量,thresh=1 只要有一个是非NA 就保留。
    
                 0	1	2
    2	-1.068483	NaN	0.556369
    3	-0.716866	NaN	1.273184
    4	-0.690865	0.601410	0.467746
    5	-2.681891	-0.556718	-0.529830
    6	-0.572316	0.057732	-0.988892
    

    7.1.2 补全缺失值

    df
           0	1	2
    0	-0.018181	NaN	NaN
    1	-0.148029	NaN	NaN
    2	-1.068483	NaN	0.556369
    3	-0.716866	NaN	1.273184
    4	-0.690865	0.601410	0.467746
    5	-2.681891	-0.556718	-0.529830
    6	-0.572316	0.057732	-0.988892
    
    df.fillna('你好') 
           0	1	2
    0	-0.018181	你好	你好
    1	-0.148029	你好	你好
    2	-1.068483	你好	0.556369
    3	-0.716866	你好	1.27318
    4	-0.690865	0.60141	0.467746
    5	-2.681891	-0.556718	-0.52983
    6	-0.572316	0.0577322	-0.988892
    
    df.fillna({1:1,2:2},inplace=Ture)         # 为不同的列设置不同的值,并且修改原对象。
               0	1	2
    0	-0.018181	1.000000	2.000000
    1	-0.148029	1.000000	2.000000
    2	-1.068483	1.000000	0.556369
    3	-0.716866	1.000000	1.273184
    4	-0.690865	0.601410	0.467746
    5	-2.681891	-0.556718	-0.529830
    6	-0.572316	0.057732	-0.988892
    
    
    df=pd.DataFrame(np.random.randn(6,3))
    df.iloc[2:,1]=np.nan
    df.iloc[4:,2]=np.nan
    df
            0	1	2
    0	0.697310	0.99049	1.108152
    1	2.251352	-1.83455	2.832842
    2	-0.359019	NaN	-0.674754
    3	-0.353238	NaN	-0.714741
    4	0.388780	NaN	NaN
    5	0.354652	NaN	NaN
    
    df.fillna(method='ffill',limit=2)     # 向前插值,限制填充两次
               0	1	2
    0	0.697310	0.99049	1.108152
    1	2.251352	-1.83455	2.832842
    2	-0.359019	-1.83455	-0.674754
    3	-0.353238	-1.83455	-0.714741
    4	0.388780	NaN	-0.714741
    5	0.354652	NaN	-0.714741
    
    df.fillna(df.mean())          # 将缺失值补充为平均数
    
    fillna 函数参数 描述
    value 标量值或字典型对象,用于填充缺失值
    method 插值方法,默认是 ffill
    axis 需要填充的轴,默认时 0
    inplace 修改原对象,而不是一个备份
    limit 用于向前或向后填充的最大范围

    7.2.1 删除重复值

    data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],       # dataframe 会出现重复行
                         'k2': [1, 1, 2, 3, 3, 4, 4]})
    data
      k1	k2
    0	one	1
    1	two	1
    2	one	2
    3	two	3
    4	one	3
    5	two	4
    6	two	4
    
    data.duplicated()       # 这个方法返回一个 series ,判断是否存在重复,与之前出现的行 相同。
    0    False
    1    False
    2    False
    3    False
    4    False
    5    False
    6     True
    dtype: bool
    
    data.drop_duplicates()         # 返回 dataframe 内容是 duplicated 返回数组中为False 的部分。
    k1	k2
    0	one	1
    1	two	1
    2	one	2
    3	two	3
    4	one	3
    5	two	4
    
    
    data['v1']=range(7)         # 默认是对列的操作,可以指定任何子集来检测是否有重复,这里基于 k1 来去除重复值。
    data.drop_duplicates(['k1'])
    	k1	k2	v1
    0	one	1	0
    1	two	1	1
    
    data.drop_duplicates(['k1','k2'],keep='last')     # 默认保留第一个观察到的值,传入keep 保留 最后一个
    	k1	k2	v1
    0	one	1	0
    1	two	1	1
    2	one	2	2
    3	two	3	3
    4	one	3	4
    6	two	4	6     # 5 这一行被去除,保留了后一个。。
    
    展开全文
  • 缺失值处理方法

    万次阅读 2017-08-24 13:38:44
    文章将常见的自己能理解的一些缺失值的处理方法以及方法的优缺点做了简单介绍。其中,多重插补、EM算法对缺失值的处理尚未掌握,因此并未放上来。 一、数值缺失机制 1.完全随机缺失(MCAR):缺失数据与该变量的真实...


    本文参考了多篇CSDN、知乎以及百度的文章,如果侵犯了您的权益,请及时联系,这是自己写的第一篇博客,有很多不足之处,请原谅。

    文章将常见的自己能理解的一些缺失值的处理方法以及方法的优缺点做了简单介绍。其中,多重插补、EM算法对缺失值的处理尚未掌握,因此并未放上来。

    一、数值缺失机制

    1.完全随机缺失(MCAR):缺失数据与该变量的真实值无关,与其他变量的数值也无关。

     举例:一位老师抱着批改完的卷子走在路上,不小心摔倒丢失了几张卷子,因此有几位同学没有成绩。这种成绩缺失不是因为成绩这个变量本身高或低而丢失的,而是随机丢失的;也与性别等无关,不会出现男生卷子丢失概率高,女生卷子丢失概率低的问题。

    2.条件随机缺失(MAR):缺失数据与其他变量有关。

     举例:我们的目标是要统计一个班学生的基本信息,包括名字、性别、身高、体重等。而此时如果某一学生的体重这一变量缺失,这一事件最可能发生在哪些人身上呢?一般来说,是女生。因此体重缺失与已知变量性别相关,这就叫做条件随机缺失。

    3.非随机缺失(NNAR):缺失数据依赖于该变量本身。

     举例:通常在收集数据时收入一栏很容易缺失,发生这种情况的原因可能是填写人收入过高或过低。因此收入缺失与填写人本身收入有关,这就叫做非随机缺失。

    4.完全变量:数据集中不含缺失值的变量称为完全变量。

    5.不完全变量:数据集中含有缺失值的变量称为不完全变量。

    PS:缺失值不仅包括NULL,也包括用于表示数值缺失的一些特殊数值(比如,在系统中用-999来表示数值不存在)。

    二、缺失值处理方法

      缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补两种。但对于主观数据,人将影响数据的真实性,存在缺失值的记录的其他属性的真实值也不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要针对客观数据,它的可靠性有保证。

    (一)删除

      删除有缺失数据的样本;

      删除有过多缺失数据的变量。

     删除法是最简单直接、很多时候也是最有效的方法,缺点是会导致信息丢失。

     如果缺失数据属于完全随机缺失,简单删除法的后果仅仅是减少了样本量,导致信息量减少。但缺失数据通常都不是MCAR,若采用简单删除法就会使得估计系数出现偏误。

     如何判断是否MCAR?

     用其他变量预测缺失情况,如果某些系数显著,则不属于MCAR

    (二)填补

      以最可能的值来插补缺失值比删除全部不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费。

    1.替代

     (1)均值插补

     1)均值插补、众数插补

     利用均值、中位数、众数、随机数等进行插补

     缺点:人为增加了噪声

     2)同类均值插补

     利用聚类方法预测缺失记录种类,再以该类均值对缺失值进行插补。

     3)同类均值随机插补

     在利用上述方法进行均值插补时,会存在一个问题:但凡是同类样本,对该变量的预测值都是相同的。为了解决这一问题,在进行数值插补时,我们可以生成正态随机数,其中均值为该类样本均值,方差为该类样本方差。

     (2)近似替代

     1)就近补齐

     对于一个包含空值的对象,就近补齐在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。

     2)K近邻

     先根据欧式距离或相关分析来确定距离缺失数据最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。

    2.模型预测

     利用其它变量做模型进行缺失变量的预测

     缺陷:如果其它变量与缺失变量无关,则预测的结果毫无意义。如果预测结果相当准确,则又说明这个变量完全没有必要进行预测。一般情况下,会介于两者之间;填补缺失值之后引入了自相关,这会给后续分析造成障碍。

     利用模型预测缺失变量的方法无穷无尽,这里仅简单介绍几种。

    1)回归

     基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关时会导致有偏差的估计。

    2)极大似然估计

     在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,通过观测数据的边际分布可以对缺失数据进行极大似然估计。

     重要前提:适用于大样本。有效样本的数据量足以保证ML估计值是渐进无偏的并且服从正态分布。但这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

     极大似然估计要求模型的形式必须准确,如果参数形式不正确,将得到错误的结论。

    3)灰度理论

    4)随机森林

    (三)不作处理

      在实际应用中,一些模型无法应对具有缺失值的数据,因此要对缺失值进行处理;然而还有一些模型本身就可以应对具有缺失值的数据,此时无需对数据进行处理。

      缺点:模型的选择上有所局限

    1.把缺失值当做变量的一种特例

     比如性别,原本只有男、女两种取值,现在变为男、女、缺失三种。

    2.引入虚拟变量

     将性别映射为3个变量:是否男、是否女、是否缺失。

     优点:保留了原始数据的全部信息;

     只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。

    缺点:计算量大大提升。

    3.矩阵分解

      最后引用一段来自知乎的回答:我认为缺失值填补的精髓就在于不能影响整体的估计,它就只能是占个位置,让程序运行下去,让已有的别的属性的值能发挥作用。填补数与已有的数的分布、特征应符合,不能因为这些数字的变更导致估计值变化。

    待解决:多重插补、EM算法样条插值

    展开全文
  • 机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除缺失值填充、KNN填充 目录 机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除缺失值填充、KNN填充 缺失的原因 缺失值删除 缺失值填充 KNN填充 ...

    机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除、缺失值填充、KNN填充

    目录

    机器学习数据清洗之缺失值处理、缺失的原因、缺失值删除、缺失值填充、KNN填充

    缺失的原因

    缺失值删除

    缺失值填充

    KNN填充


    缺失的原因

    删除缺失值是一件令人痛心的事情,数据科学家都知道数据信息的珍贵,尤其是带有标签的信息,在删除缺失值的过程中难免会删除其他的有效信息,所以不得不三思而后行,而且删除观察值,有可能引入偏差。

    缺失值的产生机制,决定了删除这个动作的可操作性。

    完全随机缺失(Missing Completely At Random, MCAR

        数据缺失的可能性与任何其他东西无关。

    随机缺失(Missing At Random, MAR

        数据缺失的可能性不是完全随机的,与已经存在的其他特征有关。

    完全非随机缺失(Missing Not At Random, MNAR

         数据缺失的可能性完全是飞随机的,并且与未在特征中反映出的信息有关。

     

    如果观察值是MCAR或者MAR那么删除它们是可以接受的,但是如果是MNAR,那么缺失的数据本身就是一种信息。

    缺失值删除

    大多数机器学习算法不允许目标值或者特征值数组中存在缺失值。因此,不能简单地忽略数据中的缺失值,而是要在数据预处理阶段合理可靠地解决该问题

    使用numpy或者pandas等工具都可以轻松删除带有缺失值的观察值。

    缺失值填充

    一般来说,未经处理的原始数据中通常会存在缺失值、离群值等,因此在建模训练之前需要处理好缺失值。

    缺失值处理方法一般可分为:删除、统计值填充、统一值填充、前后向值填充、插值法填充、建模预测填充和具体分析7种方法

    缺失值的策略主要有两种,即机器学习预测填充法(例如,KNN法、回归法等)和统计集中趋势数据填充法(例如,平均数,中位数,众数等)。

    一般情况下使用统计集中趋势数据填充的效果不如机器学习预测方法,但是它的优势是可以可以很容易地扩展到大数据集中

    不管是用哪一种方法来填充缺失值,最好都添加一个二元特征来标识观察值中是否包含填充值。毕竟在某些情况下,缺失本身就是一个熵值很高的信息。

    KNN填充

    当我们需要填补缺失值时,可以考虑直接使用KNN的这个算法填补sklearn.impute 模块中增加KNNImputer方法。

     

    展开全文
  • 这篇文章主要介绍了简单了解Pandas缺失值处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 判断数据是否为NaN: pd.isnull(df), pd.notnull(df) 判断...
  • 缺失值处理方法综述 缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。...

         机器学习中的模型训练只是其中的一个步骤,有好的的数据才能得到好的模型。但是在现实情况下,数据往往是存在一些缺失值的,怎么取处理这些缺失值,使数据表现更完美也是一个特别重要的步骤。

     

    缺失值处理方法综述


    缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。 
    机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。 
    人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。 
    以下来讨论缺失值的一般处理方法:

    1. 删除


    主要有简单删除法和权重法。简单删除法是对缺失值进行处理的最原始方法。

    (1) 简单删除法


    此方法将存在缺失值的数据条目(对象,元组,记录)进行删除。这种方法简单易行,在对象有多个属性缺失值、被删除的含缺失值的对象与信息表中的数据量相比非常小的情况下是非常有效的。然而,这种方法却有很大的局限性。它是以减少历史数据来换取信息的完备,会造成资源的大量浪费,丢弃了大量隐藏在这些对象中的信息。在信息表中本来包含的对象很少的情况下,删除少量对象就足以严重影响到信息表信息的客观性和结果的正确性;当每个属性空值的百分比变化很大时,它的性能非常差。

    (2) 权重法


    当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定行因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。对于存在多个属性缺失的情况,就需要对不同属性的缺失组合赋不同的权重,这将大大增加计算的难度,降低预测的准确性,这时权重法并不理想。

    2. 填补


    这类方法是用一定的值去填充空值,从而使信息表完备化。通常基于统计学原理,根据决策表中其余对象取值的分布情况来对一个空值进行填充,譬如用其余属性的平均值来进行补充等。数据挖掘中常用的有以下几种补齐方法:

    (1) 人工填写(filling manually)


    由于最了解数据的还是用户自己,因此这个方法产生数据偏离最小,可能是填充效果最好的一种。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。

    (2) 特殊值填充(Treating Missing Attribute values as Special values)


    将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。这样将形成另一个有趣的概念,可能导致严重的数据偏离,一般不推荐使用。

    (3) 均值填充(Mean/Mode Completer)


    将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。另外有一种与其相似的方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,缺失属性值的补齐同样是靠该属性在其他对象中的取值求平均得到,但不同的是用于求平均的值并不是从信息表所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。

    (4) 热卡填充(Hot deck imputation,或就近补齐)


    对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。

    (5) 聚类填充(clustering imputation)


    最为典型的代表是K最近距离邻法(K-means clustering),先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

    (6) 使用所有可能的值填充(Assigning All Possible values of the Attribute)


    这种方法是用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大,可能的测试方案很多。另有一种方法,填补遗漏属性值的原则是一样的,不同的只是从决策相同的对象中尝试所有的属性值的可能情况,而不是根据信息表中所有对象进行尝试,这样能够在一定程度上减小原方法的代价。

    (7) 组合完整化方法(Combinatorial Completer)


    这种方法是用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果;但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。另一种称为条件组合完整化方法(Conditional Combinatorial Complete),填补遗漏属性值的原则是一样的,不同的只是从决策相同的对象中尝试所有的属性值的可能情况,而不是根据信息表中所有对象进行尝试。条件组合完整化方法能够在一定程度上减小组合完整化方法的代价。在信息表包含不完整数据较多的情况下,可能的测试方案将巨增。

    (8) 回归(Regression)


    基于完整的数据集,建立回归方程(模型)。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关时会导致有偏差的估计。

    (9) 极大似然估计(Max Likelihood ,ML)


    在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

    (10) 多重插补(Multiple Imputation,MI)


    多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。 
    多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。第一,贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。第二,贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。 
    同时,多重插补保持了单一插补的两个基本优点,即应用完全数据分析方法和融合数据收集者知识的能力。相对于单一插补,多重插补有三个极其重要的优点:第一,为表现数据分布,随机抽取进行插补,增加了估计的有效性。第二,当多重插补是在某个模型下的随机抽样时,按一种直接方式简单融合完全数据推断得出有效推断,即它反映了在该模型下由缺失值导致的附加变异。第三,在多个模型下通过随机抽取进行插补,简单地应用完全数据方法,可以对无回答的不同模型下推断的敏感性进行直接研究。 
    多重插补也有以下缺点:①生成多重插补比单一插补需要更多工作;②贮存多重插补数据集需要更多存储空间;③分析多重插补数据集比单一插补需要花费更多精力。

    3. 不处理


    直接在包含空值的数据上进行数据挖掘。这类方法包括贝叶斯网络和人工神经网络等。 
    贝叶斯网络是用来表示变量间连接概率的图形模式,它提供了一种自然的表示因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。当在任何一个对象中的缺失值数量很大时,存在指数爆炸的危险。 
    人工神经网络可以有效的对付空值,但人工神经网络在这方面的研究还有待进一步深入展开。人工神经网络方法在数据挖掘应用中的局限性

    4. 总结


    部分方法的优缺点及适用环境如下: 
     
    以上插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

    5. 参考文献


    https://www.researchgate.net/profile/Chi_Seng_Pun/publication/311399915_Research_on_Multivariate_Statistical_Analysis_with_Missing_Data_in_Chinese/links/58443f2a08ae61f75dd67d67/Research-on-Multivariate-Statistical-Analysis-with-Missing-Data-in-Chinese.pdf 
    http://www.wenhuaxuan.com/shujuchuli/2013-09-27/7019.html 
    https://www.amazon.com/Flexible-Imputation-Missing-Interdisciplinary-Statistics/dp/1439868247
    本文为转载文章,原文地址:
    原文链接:https://blog.csdn.net/w352986331qq/article/details/78639233

    展开全文
  • df.dropna()#直接删除含有缺失值的行 df.dropna(axis = 1)#直接删除含有缺失值的列 df.dropna(how = ‘all’)#只删除全是缺失值的行 df.dropna(thresh = 4)#保留至少有4个缺失值的行 df.dropna(subset = [‘C’])#...
  • Pandas 缺失值填充的方法

    千次阅读 2019-11-10 19:32:10
    直接用代码来展示[基于泰坦尼克数据] 真实数据往往某些变量会有缺失值。 这里,cabin有超过70%以上的缺失值,我们可以考虑直接丢掉这个变量。...-- 删除缺失值的行 普通的方法(直接根据所需要的值来进行填充...
  • # 检查数据中是否有缺失值np.isnan(train).any()Flase:表示对应特征的特征值中无缺失值True:表示有缺失值通常情况下删除行,使用参数axis = 0,删除列的参数axis = 1,通常不会这么做,那样会删除一个变量。...
  • 缺失值填充的几种方法

    万次阅读 多人点赞 2018-09-12 22:59:51
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...
  • 在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。 缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点...
  • 缺失值的处理方法

    千次阅读 2017-06-22 08:11:22
    在数据挖掘的实际工程中,由于数据采集成本、隐私保护等原因,得到的训练数据会有缺失值,现在介绍几种处理缺失值方法
  • 缺失值的处理 缺失值+sklearn ...from sklearn.preprocessing import Imputer ...缺失值+pandas套装 ... 方法 ... 根据各标签的值中是否存在缺失... 用指定值或插值方法(如ffill或bfill)填充缺失值 isnul.
  • 机器学习缺失值处理方法汇总

    万次阅读 多人点赞 2017-11-26 19:44:48
    缺失值处理方法综述缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。 机械...
  • 缺失值处理方法有很多,除了删除、利用平均值或中位数等插补外,本文简要介绍一些基于模型的插补方法。 判别 如果因变量可以由若干个非缺失变量解释的话,选择非缺失变量为自变量,含缺失值的变量为因变量,建立合适...
  • 2 缺失值处理方法 数据补齐 删除缺失行 不处理   3 代码示例 import pandas  data=pandas.read_csv('D:\\DATA\\pycase\\number2\\6.1\\data3.csv') # 均值'mean' 中值'median' most_freque...
  • pandas填补缺失值方法

    千次阅读 2020-02-17 09:12:50
    pandas填补缺失值方法 在处理数据的过程中,经常会遇到原数据部分内容的缺失,为了保证我们最终数据统计结果的正确性,通常我们有两种处理方式,第一种就是删除掉这些部分缺失的数据;第二种就是填补这些缺失的...
  • 1. 如果数据集很大,缺失值很少,可以删除缺失值; 2. 如果这个属性对结果的影响很大,可以用均值或者众数来代替; 3. 如果属性是连续型随机变量可以考虑用回归、随机森林等方法来预测缺失值; 。。。。 ...
  • 缺失值处理方法总结

    2019-09-16 15:01:11
    加载数据 import pandas as pd import numpy as np ...如何确定数据里包含缺失值---缺失值检测 print(data.isnull()) #缺失地方的值为True print(data.notnull()) #不缺失地方的值为True ...
  • 数据分析中缺失值的处理方法

    万次阅读 2016-03-27 22:16:27
    对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观...
  • dropna:丢弃、删除缺失值 axis : 删除行还是列,{0 or ‘index’, 1 or ‘columns’}, default 0 how : 如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除 inplace : 如果为True则修改当前df,...
  • 处理缺失值方法

    千次阅读 2016-09-13 16:44:51
    数据清理中,处理缺失值方法有两种: 删除法:1)删除观察样本   2)删除变量:当某个变量缺失值较多且对研究目标影响不大时,可以将整个变量整体删除   3)使用完整原始数据分析:当数据存在较多...
  • 缺失值处理的三种方法

    万次阅读 2019-03-12 20:48:23
    删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全。 常见的缺失值补全方法:均值插补、同类均值插补、建模预测、高维映射、多重插补、极大似然估计、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,087
精华内容 19,234
关键字:

删除缺失值的方法