前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据缺失值的3种处理方式,终于有人讲明白了

数据缺失值的3种处理方式,终于有人讲明白了

作者头像
IT阅读排行榜
发布2021-01-20 09:43:27
1K0
发布2021-01-20 09:43:27
举报
文章被收录于专栏:华章科技华章科技

导读:如何抹掉机器学习的那点空白?

作者:木羊同学

来源:大数据DT(ID:hzdashuju)

01 机器学习的幕后英雄

今天聊一本机器学习方面的有趣的书,书名叫《基于机器学习数据缺失值填补》。要我说的话,数据缺失值填补本身就是个十分有趣的话题。

回忆一下,平时我们聊机器学习都聊什么,聊各种模型的算法和原理,譬如线性回归、朴素贝叶斯、支持向量机,这些都是单独的模型,还有集成模型,譬如随机森林、Xgboost。

在很多人眼里,研究也好,交流也好,聊机器学习就是聊模型,顶多就加上模型训练,譬如超参数设置、损失函数优化、CV等等。也确实在很多人的印象中,机器学习就是和模型打交道,如果把各类机器学习的相关工作围成一个圈的话,圆心一定是模型。

但是,实际工作中往往不是这样。正如我们说软件开发,感觉上码代码是主要工作,但实际上,和客户或者项目组内部的各种会议瞎侃,也就是书本上称之为“需求分析”的,才是最花时间精力的工作。

机器学习也一样,感觉上像是围着模型转,实际花时间最多的地方,往往是很多机器学习教材轻描淡写甚至干脆直接忽略的环节,数据清洗。

我们知道,对机器学习来说,数据非常重要,极端重要,机器学习的模型没有数据,就好比再高档的汽车没有油一样,不管理论设计有多好,也只能老老实实在家里趴窝。那数据从何而来呢?需要经过两步,数据收集数据清洗。数据清洗是一个很容易被忽视,但又必不可少的环节,而填补缺失值就是这个环节最常见的工作。

数据不完整,有缺失,我们就称之为数据集里包含有缺失值,俗称“留白”。国画不留白是要完蛋的,而机器学习如果留了白,也是要完蛋的。

所以,在实际工作中,野生的数据收回来,可不能直接喂给模型。模型的脾胃很金贵,吃进去的数据稍微有点不合适就会上吐下泻,报出各种Error,有时候你遇到一些实在让人摸不着头脑的错误,不妨查看一下,可有能就是数据不合适导致的。

那怎么办呢?需要首先对数据进行一些处理,这就是数据清洗。

02 怎样清洗数据

数据清洗虽然名叫“清洗”,不过工作的内容也相当广泛。大家如果第一次听,可能对这个名字很好奇,数据怎么和清洗扯上关系了呢?难道数据也可以放到水龙头下一顿猛冲吗?我觉得,这里的清洗,是让东西变干净的理解。野生的数据,有些脏东西混在里面,而数据清洗的工作,就是让数据变得干净。

什么算是数据里的“脏东西呢”?举一个简单的例子,数据清洗的其中一种常见操作,是将样本数据的某个维度按标准转换格式。

我们都填过个人信息表,少不了要填“出生日期”,但就这个看似简单的信息,大家照样也会填的非常没有默契,譬如“1977.3”“2001月8日30日”“99.12”等等,不难想象,这样的数据直接读进模型,肯定会导致程序出现问题,所以必须首先经过格式转化,将所有数据变成统一的格式,才能喂给模型。

这就是数据清洗的作用。当然,数据清洗的工作远不止于此,另一种很常见的操作,就是上文提到的填补数据缺失值,也就是处理Nan值。

03 怎样处理缺失值

野生的数据经常出现缺失值,这个很好理解,我们填写表格也经常心浮气躁,有一些内容可能就漏填了,譬如说在性别一栏留下了空白,这就是缺失值。

如果光看机器学习的教程,很容易让我们觉得,提供给机器学习的数据应该就像一个一个排列整齐的?方阵,都已经蓄势待发准备好接受某个模型的检阅。但在真实的环境中,数据更像是Jerrys最爱的奶酪,上面布满了空空洞洞的缺失值。

要进行数据清洗,就需要处理这些缺失值。那么,遇到缺失值,标准的处理流程都是怎样的呢?这个问题没有答案,数据缺失值的处理是一门艺术,你想一想,你提交的表格上漏填了性别一项,等待这张表格七转八转转到我这里来时,我虽然看到你漏填了一项,但与你素未谋面,放着留空不合适,填男填女好像也不合适。

一般来说,有以下三种处理方式:

第一种是咱家有矿型的处理方式,丢弃。

只要是某条样本存在缺失值,就直接丢弃这条样本,眼不见心不烦,也没后面这么多的是。这种做法优点很突出,简单粗暴,省时省力,知名的数据处理工具pandas中,就专门提供了dropna这种方法。但缺点也很突出,一条宝贵的样本数据,因为沾了点脏东西就被浪费掉了。

一般来说,这种方法在数据质量比较好,缺失值占比较少的情况下可以考虑。

第二种是和稀泥型的处理方式,填充均值。

如果不丢弃存在缺失值的样本,想要喂给数据,就必须重新给它赋值,这种行为如果上纲上线,是有一点“捏造数据”的意思在里面的,一旦赋值出现某种偏向性,就会影响整个样本的整体数据分布,最终必将导致机器学习模型的预测出现某种偏差。

那怎么办呢?和稀泥,把均值填入其中,既然均值,也就不会对整体情况产生影响,同时也解决的缺失值的问题。从统计学的角度出发,除了填充均值以外,也可以选择填充众数、中位数,效果略有区别,不过出发点都是一样的。

第三种我想了半天也不知道该怎么描述这种处理方式,只好留空了。在介绍缺失值填充的文章里留下缺失值,颇有点黑色幽默。这种处理方式比较简单,譬如说前一个样本的值是7,后一个样本的值是9,中间这个样本出现缺失值了,那填什么呢?自然是填一个8。具体的方法就是插值法和KNN法。

以上三种基本上就是当前最常见的缺失值处理方式,不过,大家也从未忘记寻找更好的处理方式,《基于机器学习数据缺失值填补》就提出了新的方法,顾名思义,采用了机器学习的方法,譬如神经网络模型,来填补缺失值。

这个想法首先就很有意思,我填充缺失值,是为了接着进行机器学习,而现在要填充缺失值,却必须首先进行机器学习,嗯,有那味了。那么,机器学习究竟怎样鸡生蛋蛋生鸡,卖个关子,感兴趣的可以看看这本书。

关于作者:莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

延伸阅读《基于机器学习的数据缺失值填补》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:资深专家多年研究和实践经验,创新性提出基于神经网络和TS模型的填补方法,大幅提升缺失值填补效率。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档