精华内容
下载资源
问答
  • 缺失值的处理

    2019-07-11 15:36:23
    缺失值的处理缺失值产生的原因处理缺失值的方法 缺失值产生的原因 ①信息被遗漏,比如由于工作人员的疏忽,忘记而缺失;或者由于数据采集器等故障等原因造成的缺失,比如系统实时性要求较高的时候,机器来不及判断和...

    缺失值产生的原因

    ①信息被遗漏,比如由于工作人员的疏忽,忘记而缺失;或者由于数据采集器等故障等原因造成的缺失,比如系统实时性要求较高的时候,机器来不及判断和决策而造成缺失;
    ②有些数据集在特征描述中会规定将缺失值也作为一种特征值,这时候缺失值就可以看作是一种特殊的特征值;
    ③有些特征属性根本就是不存在的,比如一个未婚者的配偶名字就没法填写,再如一个孩子的收入状况也无法填写;

    处理缺失值的方法

    1. 删除记录
      优点:最简单粗暴;
      缺点:牺牲了大量的数据,通过减少历史数据换取完整的信息,这样可能丢失了很多隐藏的重要信息;当缺失数据比例较大时,特别是缺失数据非随机分布时,直接删除可能会导致数据发生偏离,比如原本的正态分布变为非正态;

    2. 数据填补
      对缺失值的插补大体可分为:替换缺失值拟合缺失值,虚拟变量。替换是通过数据中非缺失数据的相似性来填补,其核心思想是发现相同群体的共同特征,拟合是通过其他特征建模来填补,虚拟变量是衍生的新变量代替缺失值。
      替换缺失值
      均值插补:
      对于定类数据:使用 众数(mode)填补,比如一个学校的男生和女生的数量,男生500人,女生50人,那么对于其余的缺失值我们会用人数较多的男生来填补。
      对于定量(定比)数据:使用平均数(mean)或中位数(median)填补,比如一个班级学生的身高特征,对于一些同学缺失的身高值就可以使用全班同学身高的平均值或中位数来填补。一般如果特征分布为正态分布时,使用平均值效果比较好,而当分布由于异常值存在而不是正态分布的情况下,使用中位数效果比较好。

      注:此方法虽然简单,但是不够精准,可能会引入噪声,或者会改变特征原有的分布。
      

      热卡填补(Hot deck imputation):
      热卡填充法是在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。通常会找到超出一个的相似对象,在所有匹配对象中没有最好的,而是从中随机的挑选一个作为填充值。这个问题关键是不同的问题可能会选用不同的标准来对相似进行判定,以及如何制定这个判定标准。该方法概念上很简单,且利用了数据间的关系来进行空值估计,但缺点在于难以定义相似标准,主观因素较多。

      K最近距离邻法(K-means clustering)
      另外一种方法就是利用无监督机器学习的聚类方法。通过K均值的聚类方法将所有样本进行聚类划分,然后再通过划分的种类的均值对各自类中的缺失值进行填补。归其本质还是通过找相似来填补缺失值。

      注:缺失值填补的准确性就要看聚类结果的好坏了,而聚类结果的可变性很大,通常与初始选择点有关,并且在下图中可看到单独的每一类中特征值也有很大的差别,因此使用时要慎重。

      拟合缺失值
      拟合就是利用其它变量做模型的输入进行缺失变量的预测,与我们正常建模的方法一样,只是目标变量变为了缺失值。

      注:如果其它特征变量与缺失变量无关,则预测的结果毫无意义。如果预测结果相当准确,则又说明这个变量完全没有必要进行预测,因为这必然是与特征变量间存在重复信息。一般情况下,会介于两者之间效果为最好,若强行填补缺失值之后引入了自相关,这会给后续分析造成障碍。

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

      多重插补(Mutiple imputation):
      多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

      我们看到,以上提出的拟合和替换方法都是单一的插补方法,而多重插补弥补了单一插补的缺陷,它并没有试图去通过模拟值去估计每个缺失值,而是提出缺失数据值的一个随即样本(这些样本可以是不同的模型拟合结果的组合)。这种程序的实施恰当地反映了由于缺失值引起的不确定性,使得统计推断有效。多重插补推断可以分为以下3个步骤:

      虚拟变量其实就是缺失值的一种衍生变量。具体做法是通过判断特征值是否有缺失值来定义一个新的二分类变量。比如,特征为A含有缺失值,我们衍生出一个新的特征B,如果A中特征值有缺失,那么相应的B中的值为1,如果A中特征值没有缺失,那么相应的B中的值为0。

    转原文链接: link.

    展开全文
  • 缺失类型1、完全随机缺失:缺失值跟其他变量无关,例如婚姻状况的缺失2、随机缺失:缺失值依赖于其他变量,例如“配偶姓名”的缺失取决于“婚姻状况”完全非随机缺失:缺失值...连续变量缺失值的处理1)对于完全随机缺失,

    缺失类型

    1、完全随机缺失:缺失值跟其他变量无关,例如婚姻状况的缺失

    2、随机缺失:缺失值依赖于其他变量,例如“配偶姓名”的缺失取决于“婚姻状况”完全非随机缺失:缺失值依赖于自己,例如高收入人群不愿易提供家庭收入处理方法

    删除有缺失值的属性或者样本(土豪行为)
    插补填充(常用于完全随机缺失且缺失度不高的情形中)
    将缺失当成一种属性值(常用于完全非随机缺失)
    连续变量缺失值的处理

    1)对于完全随机缺失,当缺失率不高时,可以:

    用常数补缺,例如均值 特别地,如果存在极端值,要考虑是否剔除极端值后再计算均值
    从非缺失值中随机抽样赋予缺失样本

    2)对于依赖于其他某变量的随机缺失,可以在同一层内,用完全随机缺失的方法进行补缺

    例如:变量“收入”取决于“工作状态”。当“工作状态”=“有工作”时,缺失的“收入”可以用所有“有工作”的持卡人的已知收入的均值代替

    3)对于完全非随机缺失,可以当成一种属性,将该变量转化成类别变量

    直接进行二值化,将该特征数据分为缺失值和非缺失值两类
    考虑给定一个step(比如age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个type加到属性类目中。
    类别变量缺失值的处理
    当缺失率很低时

    最常出现的类别补缺
    可以从其他已知的样本中随机抽样进行补缺

    对于类别型变量的随机抽样补缺这里需要详细讲下:
    现在我们假设有一个类别型变量X,它有三个类型的取值分别为[x1,x2,x3],我们分布计算出x1,x2,x3在X中出现频率,分别为p1,p2,p3,
    并将其频率代替为其概率。很明显p1+p2+p3=1。再计算出其累积概率,以列表形式[0,p1,p1+p2,p1+p2+p3]。每次遇到一个缺失值时,
    随机抽取一个值a~unifor(0,1),a是(0,1)之间的数, 如果a

    展开全文
  • 缺失值的处理方法 直接删除法 填充法 K最近距离邻法(K-means clustering) 多重填补(Multiple Imputation,MI) 缺失值处理的类库 sklearn中关于缺失值的处理类 ​ R语言通过mice包应用多重插补的步骤 代码...

    目录

     

    缺失值产生的原因

    完全变量与不完全变量

    缺失值的类型

    缺失值的处理方法

    直接删除法

    填充法

    K最近距离邻法(K-means clustering)

    多重填补(Multiple Imputation,MI)

    缺失值处理的类库

    sklearn中关于缺失值的处理类

     R语言通过mice包应用多重插补的步骤

    代码实现

    参考资料

     


    缺失值产生的原因

    1. 机械原因:由于机械原因导致的数据收集或保存的失败造成的数据缺失,如收集车流量数据的地感线圈损坏等
    2. 人为原因: 由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据等 

     

    完全变量与不完全变量

    数据集中不含缺失值的变量(属性)称为完全变量,数据集中含有缺失值的变量称为不完全变量 

     

    缺失值的类型

    1. 完全随机缺失(Missing Completely at Random, MCAR)。数据的缺失与不完全变量以及完全变量都是无关的,比如家庭地址的缺失
    2. 随机缺失(Missing at Random, MAR)。数据的缺失仅仅依赖于完全变量,例如财务数据缺失情况与企业大小有关
    3. 非随机,不可忽略缺失(Not Missing at Random,NMAR, or nonignorable)。不完全变量中数据的缺失依赖于不完全变量本身,这种缺失是不可忽略的,比如高收入人群不愿意提供他们的收入数据

    缺失值的处理方法

    1. 直接删除法
    2. 填充法
    3. K最近距离邻法(K-means clustering)
    4. 多重填补(Multiple ImputationMI)

     

    直接删除法

    直接删除含有缺失值的数据项,当含有缺失值的数据项只占总体数据量很小的一部分时效果最好

     

    填充法

    1. 手动填充法(filling manually):在数据量较小的情况下可能是最好的方法,因为一般来说数据所有者对各列数据的含义更加清楚,手动填充后效果更好,但是在数据量较大时无法操作
    2. 特殊值填写 (Treating Missing Attribute values as Special values):将空值作为一种特殊的值来处理,比如R语言中的NApython中的None,操作简单方便,但是可能对预测结果造成一定的影响,不推荐使用
    3. 平均值填充(Mean/Mode Completer): 将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值

     

    K最近距离邻法(K-means clustering)

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

     

    多重填补(Multiple ImputationMI)

    多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

     

    缺失值处理的类库

    sklearn中关于缺失值的处理类

     

     R语言通过mice包应用多重插补的步骤

     

    代码实现

    • 直接删除法(Drop Columns with Missing Values
    cols_with_missing = [col for col in X_train.columns if X_train[col].isnull().any()]
    # Drop columns in training and validation data
    reduced_X_train = X_train.drop(cols_with_missing, axis=1)
    reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
    
    • 填充法(Filling method)
    # Imputation
    # use SimpleImputer to replace missing values with the mean value along each column.
    my_imputer = SimpleImputer()
    imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train))
    imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid))
    
    # Imputation removed column names; put them back
    imputed_X_train.columns = X_train.columns
    imputed_X_valid.columns = X_valid.columns
    
    • K最近距离邻法(K-means clustering)
    imputer = KNNImputer(n_neighbors=2, weights="uniform")
    Imputed_X = imputer.fit_transform(X)
    
    • 多重填补(Multiple ImputationMI)
    #R语言:基于mice包的分析通常分析过程:
    library(mice)
    imp<-mice(data,m)
    fit<-with(imp,analysis)#analysis是一个表达式对象,设定用于m个插补数据集的统计方法。
    pooled<-pool(fit)
    summary(pooled)
    

    参考资料

    1. 智能交通领域常见的数据采集技术
    2. 数据缺失机制以及缺失值处理方式
    3. Sklearn笔记:缺失值处理
    4. 多重插补(MI)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


     

     

     

    展开全文
  • 模型对缺失值的处理首先从两个角度解释你的困惑:工具包自动处理数据缺失不代表具体的算法可以处理缺失项对于有缺失的数据:以决策树为原型的模型优于依赖距离度量的模型回答中也会介绍树模型,如随机森林 (Random ...

    模型对缺失值的处理

    首先从两个角度解释你的困惑:

    工具包自动处理数据缺失不代表具体的算法可以处理缺失项

    对于有缺失的数据:以决策树为原型的模型优于依赖距离度量的模型

    回答中也会介绍树模型,如随机森林 (Random Forest) 和 xgboost 如何处理缺失值。文章最后总结了在有缺失值时选择模型的小建议。

    1. 机器学习工具库开发的 “哲学”

    首先你有这个困惑是因为你直接调用了工具库,比如 Python 的 sklearn 和 xgboost 等,所以你认为算法 A 可以自动处理缺失值而 B 不可以。但真实情况是... 开发者在封装工具库的时候就已经考虑到了使用者可能导入了含有缺失值的数据,所以加了一个缺失值处理的函数。处理缺失值的不是算法 A,而是开发者额外写的函数。

    但是,模型 / 算法本身不应该处理缺失值,处理缺失值的应该是用户。然而在现实情况下,如果用户不处理 / 不知道怎么处理,我们也必须提供一个默认的缺失值处理方法。但是这种自动处理的缺失值,效果往往不好,因为数据的精髓只有用户自己明白。

    工具包提供自动数据清理的功能的好处:

    防止用户导入的数据不符合模型要求而导致失败

    节省用户的时间,提供一站式服务

    工具包提供自动数据清理的功能的风险:

    简单粗暴的处理模式会影响模型的结果,自动化的数据清理不可靠

    用户应该提供符合模型要求的数据,这不是算法工具库的责任。算法工具包的默认要求就是用户提供适合的数据,因为用户对数据有更深刻的理解

    可能会大幅度增加模型的运算时间

    在软件工程领域,我们有一个比较经典的哲学思想叫做 “让它出错”(let it fail)。指的是如果程序在运行中出现了错误,应该抛出异常 (raise exception) 而不是默默地装作没看到继续运行。放在机器学习工具包的场景下,如果发现数据有缺失,或者格式不对(比如不是数字型变量),应该报错而不是替用户处理。这也是为什么 sklearn 会报错,而不是替你处理。

    恰好最我也开发过一些机器学习框架,相关的问题也想过很多。是否替使用者做了本该他自己做的事情,这需要在易用性和准确性中间找平衡。

    2. 决策树模型怎么处理异常值?

    看到这里,我希望你理解了为什么不是每个工具包都会自动处理缺失值。那我们分析一个具体个案 - 随机森林 (Random Forests)。随机森林是已故统计学家 Leo Breiman 提出的,和 gradient boosted tree 一样,它的基模型是决策树。在介绍 RF 时,Breiman 就提出两种解决缺失值的方法(Random forests - classification description):

    方法 1(快速简单但效果差):把数值型变量 (numerical variables) 中的缺失值用其所对应的类别中 (class) 的

    中位数

    (median)替换。把描述型变量 (categorical variables) 缺失的部分用所对应类别中

    出现最多的数值

    替代 (most frequent non-missing value)。以数值型变量为例:

    方法 2(耗时费力但效果好):虽然依然是使用

    中位数

    出现次数最多的数

    来进行替换,方法 2 引入了权重。即对需要替换的数据先和其他数据做相似度测量 (proximity measurement) 也就是下面公式中的 Weight(

    ),在补全缺失点是相似的点的数据会有更高的权重 W。以数值型变量为例:

    注:公式仅做参考,未仔细检查。

    Breiman 说明了第二种方法的效果更好,但需要的时间更长。这也是为什么工具包中一般不提供数据补全的功能,因为会影响到工具包的效率。

    3. xgboost 怎么处理缺失值?

    xgboost 处理缺失值的方法和其他树模型不同。根据作者 Tianqi Chen 在论文 [1] 中章节 3.4 的介绍,xgboost 把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。具体的介绍可以参考[2,3]。

    这样的处理方法固然巧妙,但也有风险:即我们假设了训练数据和预测数据的分布相同,比如缺失值的分布也相同,不过直觉上应该影响不是很大:)

    4. 什么样的模型对缺失值更敏感?

    主流的机器学习模型千千万,很难一概而论。但有一些经验法则 (rule of thumb) 供参考:

    \1. 树模型对于缺失值的敏感度较低,大部分时候可以在数据有缺失时使用。

    \2. 涉及到距离度量 (distance measurement) 时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到 “距离” 这个概念,那么缺失值处理不当就会导致效果很差,如 K 近邻算法 (KNN) 和支持向量机(SVM)。

    \3. 线性模型的代价函数 (loss function) 往往涉及到距离 (distance) 的计算,计算预测值和真实值之间的差别,这容易导致对缺失值敏感。

    \4. 神经网络的鲁棒性强,对于缺失数据不是非常敏感,但一般没有那么多数据可供使用。

    \5. 贝叶斯模型对于缺失数据也比较稳定,数据量很小的时候首推贝叶斯模型。

    \6. 总结来看,对于有缺失值的数据在经过缺失值处理后:

    (1) 数据量很小,用朴素贝叶斯

    (2) 数据量适中或者较大,用树模型,优先 xgboost

    (3) 数据量较大,也可以用神经网络

    (4) 避免使用距离度量相关的模型,如 KNN 和 SVM

    树模型缺失值的方法

    处理数据缺失值的方法很多,此处介绍一种利用树模型处理缺失的方法。

    如图,假设有 100 个样本,针对属性 A,有 20 个样本是缺失值。树模型处理缺失样本的时候,会先忽略属性 A 缺失的样本,然后采用某种属性选择度量(信息增益、增益率、基尼指数)对剩下的样本(现在有 80 个)进行分裂。假设将这 80 个样本分裂到图中的三个节点,三个节点分配到的样本数分别为 30、25、25(称这个过程为过程一)。然后将属性 A 缺失的 20 个样本均加入到这三个节点中(称这个过程为过程二)。在过程一中加入节点的样本的权值均为 1,而在过程二中加入节点的样本的权值为:该节点中属性 A 未缺失的样本数 / 父节点中属性 A 未缺失的样本数,如属性 A 缺失的样本添加到节点 1 之后的权重为 30/80 = 0.375。

    展开全文
  • 主要给大家介绍了关于Python Pandas对缺失值的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python Pandas具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 在大多数的数据分析应用中,经常会遇到缺失值,常见的缺失值处理方式有过滤和填充。在 Python 中,pandas 使用浮点值 NaN 表示浮点数和非...判断缺失值的函数在 pandas 中判断缺失值的函数如下。1) isnull() 函数...
  • python缺失值的处理

    2019-07-30 15:50:00
    缺失值的处理 #查看数据缺失值的分布情况 #1.统计每列数据缺失值的分布情况 import pandas as pd if __name__ == "__main__": data = pd.read_excel(r'E:\工作\专项\百融数据\百融变量分析报告\TOTAL.xlsx') print...
  • 5、将姓名的缺失值进行填充 6、将清洗好数据保存到指定excel中 原始数据: 最后输出数据: 处理步骤: 1、读取数据: 2、删除全是空值列 3、删除全是空值行 4、将分数列值为NAN(空值)填充为0分 5、...
  • 数据分析中缺失值的处理方法1、缺失值的分类按照数据缺失机制可分为:(1)完全随机缺失(missing completely at random, MCAR)所缺失的数据发生的概率既与已观察到的数据无关,也与未观察到的数据无关.(2)随机缺失...
  • 目录缺失值产生的原因机械...或者回答的问题是无效的,数据录入人员失误漏录了数据等完全变量与不完全变量数据集中不含缺失值的变量(属性)称为完全变量,数据集中含有缺失值的变量称为不完全变量缺失值的类型完全随...
  • 缺失值的处理小结

    2020-09-18 14:48:17
    缺失值的处理 缺失值:信息(暂时)无法获取,丢失,冲突矛盾而不可用,获取代价大 1、删除 删除有缺失值的特征 删除有缺失值数据 删除的时候可以设定一个阈值x 如果这一个数据缺失值>x则丢弃 如果这一个特征有...
  • 缺失值的处理方法大总结

    千次阅读 2019-10-16 14:16:45
    缺失值的处理方法1. 删除dropna()缺点2.填补替换缺失值均值填充热卡填补K均值拟合缺失值回归预测极大似然估计多重插补随即森林虚拟变量3.不处理四.总结五.参考资料 一.缺失的原因 缺失值是指粗糙数据中由于缺少信息...
  • 现实中的数据,往往不如我们在例子中演示的那般干净、整齐,经常会出现数据缺失的现象,今天这一集,我们就来说说Pandas中缺失值的处理方法。 1.缺失值的表征方式 python中采用一种NaN(Not a Number)标签来表示...
  • 原文链接:机器学习中缺失值的处理 缺失填充方法有哪些? 平均值填充(Mean/Mode Completer) 将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。 如果空值是数值型的,就根据该属性在其他所有对象...
  • 数据分析中缺失值的处理方法

    万次阅读 2016-03-27 22:16:27
    对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观...
  • R语言:缺失值的处理

    千次阅读 2016-06-29 10:35:43
    R语言缺失值的处理
  • 缺失值的处理:1-删除dropna 2-填充fillna 1-删除 from pandas import Series import numpy as np strSer = Series(['a', 'b', np.nan, 'd', 'e']) print(strSer) 输出结果: 0 a 1 b 2 N...
  • 一、缺失值产生的原因缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能...
  • 数据缺失值的处理

    千次阅读 2019-01-05 21:13:30
    4:使用能够处理缺失值的工具   一、将缺失值剔除 合适选该方案:当含有缺失值的记录所占的比例在可用数据集中非常小的时候,选该方案比较合理 #complete.cases()产生一个布尔值,当数据框的相应的行中不含有...
  • Pandas使用这些函数处理缺失值:isnull和notnull:检测是否是空值,可用于df和seriesdropna:丢弃、删除缺失值axis : 删除行还是列,{0 or ‘index', 1 or ‘columns'}, default 0how : 如果等于any则任何值为空都...
  • Pandas对缺失值的处理 isnull和notnull:检测是否是空值,可用于df和series dropna:丢弃、删除缺失值 axis : 删除行还是列,{0 or ‘index’, 1 or ‘columns’}, default 0 how : 如果等于any则任何值为空都删除,...
  • 因近期进行时间序列分析时遇到了数据预处理中的缺失值处理问题,其中日期缺失和填充在网上没有找到较好较全资料,耗费了我一晚上工作时间,所以下面我对这次时间序列缺失值处理学习做了以下小结以供之后同行们参考...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,791
精华内容 2,316
关键字:

缺失值的处理