缺失值处理精讲

一、写在前面

假设你是一家咖啡店的老板,有一天收到了这样的一个订单“数量:2杯,大小:中杯,冷热:热,口味: ”,很明显,“口味”的信息是缺失的,那么你会怎样来制作两杯咖啡呢?你可能有以下几种选择:

  1. 这条订单信息不完整,不制作任何咖啡
  2. 口味缺失时,默认口味为原味,制作原味咖啡
  3. 查看以下销量最好的咖啡是什么口味的,按照这个口味来制作咖啡
  4. 打电话给下单顾客,明确他们想要的口味,然后再制作

当咖啡“口味”缺少时,我们可以有多种选择,更重要的是,不同的选择会导致不同的结果。比如,你选择以默认口味来制作咖啡,万一这个口味很符合顾客的喜好,那么TA可能会继续下单;但如果顾客不喜欢你决定的口味,TA可能会抱怨你的擅自作主,甚至给你差评。

与咖啡“口味”缺失时处理类似,在机器学习实践中同样会遇到缺失值,面对缺失值,我们同样有多种处理方式(如直接删除或填充),不同的处理方式会有不同的效果,这里的效果是指会对算法模型的表现产生影响。

这篇文章会涵盖以下内容:介绍缺失值出现的原因、缺失值的几种形式、如何使用pandas检测缺失值,介绍如何处理缺失值及使用pandas进行实战,最后介绍经典机器学习模型对缺失值的敏感度和相关面试题。


二、缺失值出现的原因

导致缺失值出现的原因大概有四个,可以归结为两类或两个阶段,即信息收集阶段和信息处理阶段。具体如下:

信息收集阶段

  • 用户没有提供任何信息,比如你设计了一个中文调查问卷,却遇到了一个不懂中文的外国朋友,这时候TA很有可能没有提供任何的信息。

  • 用户提供了部分信息:用户忘记填写某个信息或者用户认为该信息属于敏感或安全信息,刻意不填写;或者回答的问题是无效的。

  • 数据录入人员失误漏录了数据。

    信息处理阶段

  • 程序员在存储用户信息时,忘记保存某个字段。

  • 数据在从数据库转移时,出现的丢失及类型转换的不兼容问题。

  • 硬件问题,比如存储器损坏,机械故障导致某段时间数据未能收集。

尽管这几个原因与机器学习工程师没有太大关系,但仍有必要了解缺失值的来龙去脉,并将相关信息反馈给上游部门,毕竟缺失值会给我们的工作带来许多问题。

首先,缺失值的处理会占用大量的时间。关于数据科学家,广泛流传着这样的一个说法:“数据科学家80%的时间花在获取、清洗、管理数据上,只有20%的时间用于分析数据和机器学习“。

https://uploadfiles.nowcoder.com/files/20210201/897353_1612166957770/0081Kckwly1gkk4z4myizj30x809jwgl.jpg

其次,缺失值会增加模型的不确定性,并对模型的表现产生影响,如导致错误的预测或高偏差。比如,涉及到距离度量(distance measurement)时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到“距离”这个概念,那么缺失值处理不当就会导致效果很差,如K近邻算法(KNN)和支持向量机(SVM)。 线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计算预测值和真实值之间的差别,这容易导致对缺失值敏感。几种经典的机器学习算法模型对于缺失值的敏感度会在后面的部分专门提到。

除此之外,缺失值还会对最终结论的得出产生影响。

Name Weight Gender Play cricket/Not
Mr. Amit 55 M Y
Mr. Anil 58 M N
Miss Swati 50 F Y
Miss Richa 51 Y
Mr. Steve 53 M Y
Miss Reena 52 Y
Miss Rashimi 50 Y
Mr. Kunal 60 M Y

很明显,Gender列有几个缺失值,假设我们不对缺失值做处理的话,从上图得出的结论就是男生比女生更喜欢打板球。但是,在我们根据Mr、Miss将Gender列填充完毕后(下面的表格),就会得出与之相反的结论——女生比男生更喜欢打板球,通过这个例子,就可以体会到缺失值对最终的结论有很大的影响,即数据的缺失或缺失程度直接影响到数据的质量,而数据的质量最终影响到我们的研究成果。如果对缺失数据的处理不当,很可能导致整个统计分析失败。

Name Weight Gender Play cricket/Not
Mr. Amit 55 M Y
Mr. Anil 58 M N
Miss Swati 50 F Y
Miss Richa 51 F Y
Mr. Steve 53 M Y
Miss Reena 52 F Y
Miss Rashimi 50 F Y
Mr. Kunal 60 M Y

最后,缺失值可能会与一些机器学习的一些工具包,比如scikit-learn,发生一些不兼容的问题。这是因为scikit-learn内部的一些类会假定所有的值都是数字类型的且都有其意义。


三、缺失值的几种形式

  1. pandas会将缺失值表示为NA,它表示不可用not available。NA数据有两层含义,可能是不存在的数据或者虽然存在,但是没有观察到,例如,数据采集中发生了问题。
  2. 标准缺失值:NaN和None。对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据;Python内置的Non值在对象数组中也可以作为NA。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法学笔记之数据处理精讲 文章被收录于专栏

专刊简介: 算法及数据分析师的学习笔记,适合所有算法岗/数据分析师岗/大数据岗位的同学。订阅成功后,用户即可通过牛客网 PC 端、App 端享有永久阅读的权限;牛客专刊为虚拟内容服务,订阅成功后概不退款;牛客专刊版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布发表,违者将依法追究责任

全部评论

相关推荐

自由水:这HR已经很好了,多的是已读不回和不读了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务