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

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

首页动作格斗咱家真有矿游戏更新时间:2024-05-07

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

作者:木羊同学

来源:华章科技

01 机器学习的幕后英雄

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

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

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

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

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

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

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

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

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

02 怎样清洗数据

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

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

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

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

03 怎样处理缺失值

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved