Python缺失值处理

2023-10-30

没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一。当缺失比例很小时,可直接对缺失记录进行舍弃或进行手工处理。但在实际数据中,往往缺失数据占有相当的比重。这时如果手工处理非常低效,如果舍弃缺失记录,则会丢失大量信息,使不完全观测数据与完全观测数据间产生系统差异,对这样的数据进行分析,你很可能会得出错误的结论。

造成数据缺失的原因
现实世界中的数据异常杂乱,属性值缺失的情况经常发全甚至是不可避免的。造成数据缺失的原因是多方面的:
信息暂时无法获取。例如在医疗数据库中,并非所有病人的所有临床检验结果都能在给定的时间内得到,就致使一部分属性值空缺出来。
信息被遗漏。可能是因为输入时认为不重要、忘记填写了或对数据理解错误而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体的故障、一些人为因素等原因而丢失。
有些对象的某个或某些属性是不可用的。如一个未婚者的配偶姓名、一个儿童的固定收入状况等。
有些信息(被认为)是不重要的。如一个属性的取值与给定语境是无关。
获取这些信息的代价太大。
系统实时性能要求较高。即要求得到这些信息前迅速做出判断或决策。
对缺失值的处理要具体问题具体分析,为什么要具体问题具体分析呢?因为属性缺失有时并不意味着数据缺失,缺失本身是包含信息的,所以需要根据不同应用场景下缺失值可能包含的信息进行合理填充。下面通过一些例子来说明如何具体问题具体分析,仁者见仁智者见智,仅供参考:

“年收入”:商品推荐场景下填充平均值,借贷额度场景下填充最小值;
“行为时间点”:填充众数;
“价格”:商品推荐场景下填充最小值,商品匹配场景下填充平均值;
“人体寿命”:保险费用估计场景下填充最大值,人口估计场景下填充平均值;
“驾龄”:没有填写这一项的用户可能是没有车,为它填充为0较为合理;
”本科毕业时间”:没有填写这一项的用户可能是没有上大学,为它填充正无穷比较合理;
“婚姻状态”:没有填写这一项的用户可能对自己的隐私比较敏感,应单独设为一个分类,如已婚1、未婚0、未填-1。
缺失的类型
在对缺失数据进行处理前, 了解数据缺失的机制和形式是十分必要的 。将数据集中 不含缺失值的变量称为完全变量 ,数据集中 含有缺失值的变量称为不完全变量 。 从缺失的分布来将缺失可以分为完全随机缺失,随机缺失和完全非随机缺失 。
完全随机缺失(missing completely at random,MCAR):指的是数据的缺失是完全随机的,不依赖于任何不完全变量或完全变量,不影响样本的无偏性。如家庭地址缺失。
随机缺失(missing at random,MAR):指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。例如财务数据缺失情况与企业的大小有关。
非随机缺失(missing not at random,MNAR):指的是数据的缺失与不完全变量自身的取值有关。如高收入人群的不原意提供家庭收入。
对于随机缺失和非随机缺失,删除记录是不合适的,随机缺失可以通过已知变量对缺失值进行估计;而非随机缺失还没有很好的解决办法。
说明:对于分类问题,可以分析缺失的样本中,类别之间的比例和整体数据集中,类别的比例

缺失值处理的必要性
数据缺失在许多研究领域都是一个复杂的问题。对数据挖掘来说,缺省值的存在,造成了以下影响: 
系统丢失了大量的有用信息;
系统中所表现出的不确定性更加显著,系统中蕴涵的确定性成分更难把握;
包含空值的数据会使挖掘过程陷入混乱,导致不可靠的输出。
数据挖掘算法本身更致力于避免数据过分拟合所建的模型,这一特性使得它难以通过自身的算法去很好地处理不完整数据。因此,缺省值需要通过专门的方法进行推导、填充等,以减少数据挖掘算法与实际应用之间的差距。

缺失值处理方法的分析与比较
处理不完整数据集的方法主要有三大类: 删除元组、数据补齐、不处理 。
删除元组
也就是将存在遗漏信息属性值的对象(元组,记录)删除,从而得到一个完备的信息表 。这种方法简单易行, 在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比非常小的情况下非常有效,类标号缺失时通常使用该方法。  
然而,这种方法却有很大的局限性。 它以减少历史数据来换取信息的完备,会丢弃大量隐藏在这些对象中的信息。 在初始数据集包含的对象很少的情况下,删除少量对象足以严重影响信息的客观性和结果的正确性;因此,当缺失数据所占比例较大,特别当遗漏数据非随机分布时,这种方法可能导致数据发生偏离,从而引出错误的结论。
说明:删除元组,或者直接删除该列特征,有时候会导致性能下降。

数据补齐
这类方法是用一定的值去填充空值,从而使信息表完备化。通常基于统计学原理, 根据初始数据集中其余对象取值的分布情况来对一个缺失值进行填充 。数据挖掘中常用的有以下几种补齐方法:
人工填写(filling manually)
由于最了解数据的还是用户自己,因此这个方法产生数据偏离最小,可能是填充效果最好的一种。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。
特殊值填充(Treating Missing Attribute values as Special values)
将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值 。如所有的空值都用“unknown”填充。这样将形成另一个有趣的概念, 可能导致严重的数据偏离,一般不推荐使用 。
平均值填充(Mean/Mode Completer)
将初始数据集中的属性分为数值属性和非数值属性来分别进行处理 。 
如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值; 
如果空值是非数值型的,就根据统计学中的众数原理 ,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。与其相似的另一种方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。 
这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。
热卡填充(Hot deck imputation,或就近补齐)
对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。
K最近距离邻法(K-means clustering)
先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
使用所有可能的值填充(Assigning All Possible values of the Attribute)
用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大,可能的测试方案很多。
组合完整化方法(Combinatorial Completer)
用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果;但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。
回归(Regression)
基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。
期望值最大化方法(Expectation maximization,EM)
EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
多重填补(Multiple Imputation,MI)
多重填补方法分为三个步骤: 
为每个空值产生一套可能的填补值,这些值反映了无响应模型的不确定性;每个值都被用来填补数据集中的缺失值,产生若干个完整数据集合。
每个填补数据集合都用针对完整数据集的统计方法进行统计分析。
对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。该方法的计算也很复杂。
C4.5方法
通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。
就几种基于统计的方法而言,删除元组法和平均值法差于热卡填充法、期望值最大化方法和多重填充法;回归是比较好的一种方法,但仍比不上hot deck和EM;EM缺少MI包含的不确定成分。值得注意的是,这些方法直接处理的是模型参数的估计而不是空缺值预测本身。它们合适于处理无监督学习的问题,而对有监督学习来说,情况就不尽相同了。譬如,你可以删除包含空值的对象用完整的数据集来进行训练,但预测时你却不能忽略包含空值的对象。另外,C4.5和使用所有可能的值填充方法也有较好的补齐效果,人工填写和特殊值填充则是一般不推荐使用的。

不处理
补齐处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的信息系统。而且,对空值不正确的填充往往将新的噪声引入数据中,使挖掘任务产生错误的结果。因此,在许多情况下,我们还是希望在保持原始信息不发生变化的前提下对信息系统进行处理。

不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法包括贝叶斯网络和人工神经网络等。

贝叶斯网络提供了一种自然的表示变量间因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。

人工神经网络可以有效的对付缺失值,但人工神经网络在这方面的研究还有待进一步深入展开。

知乎上的一种方案:

4.把变量映射到高维空间。比如性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。连续型变量也可以这样处理。比如Google、百度的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性不可分之类的问题。缺点是计算量大大提升。

而且只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。
总结
大多数数据挖掘系统都是在数据挖掘之前的数据预处理阶段采用第一、第二类方法来对空缺数据进行处理。并不存在一种处理空值的方法可以适合于任何问题。无论哪种方式填充,都无法避免主观因素对原系统的影响,并且在空值过多的情形下将系统完备化是不可行的。从理论上来说,贝叶斯考虑了一切,但是只有当数据集较小或满足某些条件(如多元正态分布)时完全贝叶斯分析才是可行的。而现阶段人工神经网络方法在数据挖掘中的应用仍很有限。值得一提的是,采用不精确信息处理数据的不完备性已得到了广泛的研究。不完备数据的表达方法所依据的理论主要有可信度理论、概率论、模糊集合论、可能性理论,D-S的证据理论等。
————————————————
版权声明:本文为CSDN博主「BYR_jiandong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lujiandong1/article/details/52654703

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python缺失值处理 的相关文章

  • SpringBoot中Server层以及Mapper层常用注解

    最近看了一下SpringBoot2的课程 发现好多的注解并不是很了解 只是简单的会用 但是真是发生的作用却不知道 最近花了一些时间把这些注解进行了一下整理 针对不同的层级进行了细致的划分 最近几天会依次给大家更新关于注解的内容 对大家有帮助

随机推荐

  • 大带宽、高速率接口对比---USB、PCIE、SATA、HDMI和以太网等接口

    一 PCIE接口 二 USB接口 三 SATA接口 SATA 编码方式 原始频宽 传输速率 有效速率 排线最长长度 SATA1 0 SATA2 0 8bit 10bit 3Gb s 300MB s 275MB s 1M SATA3 0 8b
  • VMware Workstation 15 语言修改

    VMware Workstation 15 语言修改 Win10系统之前因为2345 Flash的原因 把系统的地区改成了中国以外的地区 后来发现不仅Flash的问题没解决 VMware虚拟机的中文界面显示也变成了英文 之后在论坛里看到一个
  • win10如何把繁体字改成简体字

    win10如何把繁体字改成简体字 WBOY 发布 2023 07 09 13 17 05 转载 3431人浏览过 win10客户在开展文字输入的时候遇到了字体变为繁体字的状况 那么如何把繁体字改成简体字呢 是否有快捷键呢 win10繁体字改
  • Elasticsearch 相关度评分算法

    Elasticsearch 相关度评分算法 一 相关度评分算法的组成 1 1 boolean model 1 2 TF IDF 1 3 Vector space model 二 Lucene中的相关度分数算法 三 优化相关度分数计算的方式
  • QT设置控件颜色

    转自 http hi baidu com xiaofan812 item 9a039d62849fa22268105b11 一般的属于QWidget子类的一些控件 可以直接使用样式表 例如 label gt setStyleSheet co
  • 第二章 Vue 核心技术

    2 1 Vue 入门开发 2 1 1 创建工程 在本地创建文件夹D Project vue WebStudy 打开 VS Code 点击 File gt Open Folder 找到 D Project vue WebStudy 打开 单击
  • 使用Lattice包进行基础绘图 - R语言

    使用Lattice包进行基础绘图 R语言 Lattice包是R语言中一个强大且灵活的绘图工具 它可以用于创建各种类型的统计图形 在本文中 我们将介绍如何使用Lattice包进行基础绘图 并提供相应的源代码示例 首先 我们需要安装并加载Lat
  • javascript编写自己的模板解析器

    编写自己的模板解析器 因为最近在研究artTemplate ejs baaiduTemplate等模板 所以 一时兴起 自己也写了个简单的模板解析器 一个最基本的模板解析器 需要有什么功能呢 读取变量值 解析模板语句 按照这个思路 我们编写
  • 简单的感知器实现

    什么是感知器 神经网络的组成单元 神经元 神经元也叫感知器 感知器的组成 输入权值 激活函数 输出 感知器的输出公式 y f w x b 下面构建一个简单的感知器 from functools import reduce 1 functoo
  • leetcode—21.二叉树路径和相关题目leetcode总结

    文章目录 引言 112 路径总和 113 路径总和 II 129 求根节点到叶子节点数字之和 124 二叉树中的最大路径和 257 二叉树的所有路径 引言 树的求和属于树的题目中比较常见的 因为可以有几种变体 灵活度比较高 也可以考察到对于
  • C语言二级题库带答案+解析

    1 程序流程图中带有箭头的线段表示的是 A 图元关系 B 数据流 C 控制流 D 调用关系 参考答案 C 解析 在数据流图中 用标有名字的箭头表示数据流 在程序流程图中 用标有名字的箭头表示控制流 所以选择C 2 结构化程序设计的基本原则不
  • STM32单片机基础15——使用硬件I2C读取温湿度传感器数据(SHT30)

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设 读取SHT30温湿度传感器的数据并通过串口发送 1 准备工作 硬件准备 开发板 首先需要准备一个开发板 这里我准备的是STM32L4的开发板 Be
  • ant design pro v5 - 07 多标签窗口 多窗口打开

    1 安装组件 安装 yarn add umi plugin keep alive 2 创建模板 src services types menu ts export interface menuTabProps tab string path
  • 百度飞桨PaddlePaddle论文复现训练营——U-GAT-IT 论文复现心得

    项目背景 本次论文复现是源自百度顶会论文复现营 https aistudio baidu com aistudio education group info 1340 复现对象是 2020 ICLR 上的 U GAT IT 这篇论文 htt
  • 整理

    1 前端安全问题有哪些 如何防范 主要有XSS攻击和CSRF攻击 xss 跨站脚本攻击 在网页里植入一段恶意代码 在该网站的作用域下执行了这段代码 防范 1 在服务端设置对cookie的保护 也就是设置httponly 防止用户通过docu
  • IO进程线程day7(2023.8.4)

    一 Xmind整理 二 课上练习 练习1 创建两个线程 其中一个线程拷贝前半部分 另一个线程拷贝后半部分 只允许开一份资源 且用互斥锁方式实现 提示 找临界区 gt 找临界资源 include
  • Python爬虫入门10:select方法快速定位HTML内容

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在前两节介绍了通过属性和查找方法定位HTML报文的内容的方法 除了这两种方法还有一种方法就是通过使用CSS选择器的语法找到tag 关于c
  • IntelliJ IDEA 2018.3.3版本破解,亲测可用

    一 到官网下载收费版本 如下 二 安装 破解 1 下载http idea lanyus com 标题 2 找到intelliJ IDEA的安装目录的bin目录 然后把下载的JetbrainsIdesCrack 4 2 release sha
  • 逻辑滚动条LVM测试记录1

    逻辑滚动条LVM测试记录 一 由partition或disk到实体滚动条PV的过程 1 划分出系统标示符为8e00的partition gdisk l dev sda命令查看现有分区情况 系统标示符 system ID 指的就是code一项
  • Python缺失值处理

    没有高质量的数据 就没有高质量的数据挖掘结果 数据值缺失是数据分析中经常遇到的问题之一 当缺失比例很小时 可直接对缺失记录进行舍弃或进行手工处理 但在实际数据中 往往缺失数据占有相当的比重 这时如果手工处理非常低效 如果舍弃缺失记录 则会丢