作者:Jason Brownlee

翻译:李嘉骐

校对:王晓颖

本文约4300字,建议阅读9分钟

本文介绍了机器学习中常用的数据准备技术。

标签:初学者 机器学习 数据准备 特征工程

机器学习项目中的预测性建模总是涉及某种形式的数据准备工作,如分类和回归。

数据集所需的特定数据准备工作取决于数据的具体情况,比如变量类型,以及数据建模算法对数据的期望或要求。

然而,有一组标准的数据准备算法可以应用于结构化数据(例如电子表格)。这些数据准备算法可以按类型归入到一个框架中,这个框架有助于比较和选择特定项目所用的技术。

在本教程中,你将发现在预测性建模的机器学习任务中有一些常见的数据准备任务。

完成本教程后,你将知道:

  • 诸如数据清洗之类的技术可以识别和修复数据中的错误,比如丢失的值

  • 数据转换可以改变数据集中变量的尺度、类型和概率分布

  • 特征选择和降维等技术可以减少输入变量的数量

在我的新书(https://machinelearningmastery.com/data-preparation-for-machine-learning/)中有30个分步教程和完整的Python源代码,你可以更深入的探索数据清洗、特性选择、数据转换、降维等内容。

让我们开始吧。

教程概述

本教程分为六个部分;它们是:

1. 常见数据准备任务

2. 数据清洗

3. 特征选择

4. 数据转换

5. 特征工程

6. 降维

常用数据准备任务

我们可以将数据准备定义为将原始数据转换为更适合建模的形式。

然而,在预测性建模中的数据准备步骤前后还有一些重要的步骤,它们能够提示将要执行哪些数据准备工作。

机器学习的应用过程由一系列步骤组成。

我们可以在任何给定项目的步骤之间来回跳转,但所有项目都有相同的一般性步骤;它们是:

第一步:定义问题。

第二步:准备数据。

第三步:评估模型。

第四步:最终确定模型。

我们关注的是数据准备步骤(步骤二),在机器学习项目的数据准备步骤中,你可以使用或探索一些常见或标准的任务。

数据准备工作的类型取决于你所使用的数据,这可能和你所预料的一样。

然而,当你处理多个预测性建模项目时,你会反复看到并用到相同类型的数据准备任务。

这些任务包括:

  • 数据清洗:识别和纠正数据中的错误。

  • 特征选择:找出与任务最相关的输入变量。

  • 数据转换:改变变量的尺度或分布。

  • 特征工程:从可用数据中推导新变量。

  • 降维:创建缩减数据维数的映射。

以上提供了一个粗略的框架,在使用结构化或表格数据的给定的项目中,我们可以利用这一框架来思考和引导不同的数据准备算法。

让我们来进一步看看这些任务。

数据清洗

数据清洗(https://machinelearningmastery.com/basic-data-cleaning-for-machine-learning/)包括修复“杂乱无章”的数据中的系统性问题或错误。

最有用的数据清洗需要领域内的专业知识,涉及到识别和处理可能不正确的观察结果。

有许多原因导致数据可能不正确,例如错误输入、损坏、重复等等。某一领域的专业知识可以帮助发现那些与预期的不同的明显错误,比如一个人身高200英尺。

一旦发现杂乱、有噪声、损坏或错误的观测结果,就可以加以解决。这可能涉及删除行或列,或者用新值替换观测值。

尽管如此,还是有一些通用的数据清洗操作,例如:

  • 使用统计数据定义正常数据并识别异常值。

  • 找出具有相同值或无差异的列并将其删除。

  • 找出重复的数据行并将其删除。

  • 将空值标记为缺失。

  • 使用统计数据或学习模型估算缺失值。

数据清洗通常是在其他数据准备操作之前首先执行的操作。

有关数据清洗的更多信息,请参见教程:

如何用Python进行机器学习的数据清洗

https://machinelearningmastery.com/basic-data-cleaning-for-machine-learning/

特征选择

特征选择是指选择与所预测的目标变量最相关的输入特征子集的技术。

特征选择很重要,因为无关和冗余的输入变量会分散或误导学习算法,可能导致预测性能下降。此外,我们希望只使用预测所需的数据来开发模型,例如,去适应能够取得尽可能简单的性能良好的模型。

特征选择技术通常分为使用目标变量(有监督)和不使用目标变量(无监督)两类。此外,有监督的技术可以进一步分为下面几种类型:模型拟合过程中自动选择特征(本身的),选择能使模型获得最佳性能的特征(封装器)和对每个输入特征评分并选择输出特征的子集(过滤器)。

统计方法(比如相关性)常用于给输入特征评分。输入特征根据它们的得分进行排序,并选择最大评分对应的特征子集作为模型输入。统计指标的选择取决于输入变量的数据类型,也可以参考一些对于不同统计指标评估的综述。

有关如何基于数据类型选取特征选择方法的概述,请参见教程:

  • 如何选择机器学习的特征选择方法https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/

此外,在预测性建模项目中,我们可能会遇到不同的常见特征选择案例,例如:

  • 分类目标变量的分类输入

    https://machinelearningmastery.com/feature-selection-with-categorical-data/

  • 分类目标变量的数值输入。

  • 回归目标变量的数值输入。

当输入变量数据类型混合出现时,可以使用不同的过滤方法。也可以使用适用于输入变量类型未知的包装器方法(如常用的RFE方法)。

输入特征的相对重要性评分称为特征重要性。许多基于模型的技术使用模型输来辅助解释模型、解释数据集或选择用于建模的特征。

有关特征重要性的详细信息,请参见教程:

如何用Python计算特征重要性

https://machinelearningmastery.com/calculate-feature-importance-with-python/

数据转换

数据转换用于更改数据变量的类型或分布。

数据转换是不同技术的大集合,它们可能同样易于应用到输入和输出变量上。

回想一下,数据可能是下面几种类型中的一种,比如数值型(numeric)或分类型(categorical),每种类型都有子类型,比如整数型(integer)和实数型(real-valued)属于数值型(numeric)数据,名义型(nominal)、序数型(ordinal)和布尔型(boolean)属于分类型(categorical)数据。

  • 数值型数据类型:数值。

整数型:整数,不带小数部分。

实数型:浮点值。

  • 分类型数据类型:标签值。

序数型:具有排序的标签。

名义型:没有排序的标签。

布尔型:真(True)或假(False)。

下图概述了高级数据类型的相同细分。

我们可能希望在离散化过程中将数值变量转换为序数变量。或者,我们可以将分类变量编码为整数或布尔变量,这在大多数分类任务中都是必需的。

  • 离散化转换:将数值变量编码为序数变量。

  • 序数变换:将分类变量编码为整数变量。

  • 独热码转换:将分类变量编码为二进制变量。

对于实数型数值变量,它们在计算机中的表示方式https://en.wikipedia.org/wiki/Single-precision_floating-point_format意味着在0-1范围内比在更大范围内具有更高的分辨率。

因此,可能需要将变量缩放到这个范围,称为规范化(normalization)。如果数据具有高斯概率分布,则将数据转换为平均值为零且标准差为1的标准高斯分布可能更有用。

  • 规范化转换:将变量缩放到0到1的范围。

  • 标准化转换:将变量缩放为标准高斯分布。

数值型变量的概率分布可以改变。

例如,如果分布接近高斯分布,但是有偏的或移位的,则可以使用幂变换使其更接近高斯分布。另外,可以使用分位数变换来强制数据服从一个概率分布,比如使一个具有不常见分布的变量服从均匀分布或高斯分布。

  • 幂变换:改变一个变量的分布,使其更接近高斯分布。

  • 分位数变换:强制数据服从某一概率分布,如均匀分布或高斯分布。

人们通常对每个变量分别做数据转换,因此,我们可能需要对不同的变量类型执行不同的数据转换。

我们将来可能还希望对新数据进行转换。这可以通过将变换对象与基于所有可用数据训练的最终模型一起保存到文件中来实现。

特征工程

特征工程是指从现有数据中构建新的输入变量的过程。

创建新特征高度依赖于数据和数据类型。因此通常需要领域内专家的协作,以帮助确定可以从数据中构建的新特征。

这一特性使得将特征工程推广到一般方法是一个具有挑战的问题。

然而,有些技术可以重复使用,例如:

  • 为某个状态添加布尔标志变量。

  • 添加组或全局统计信息,如平均值。

  • 为复合变量的每个组成部分添加新变量,例如日期-时间。

从统计学中提取特征的一种常用方法是创建输入数字变量的副本并进行简单的数学运算,例如将求幂运算或与其他输入变量相乘,称为多项式特征。

  • 多项式变换:创建数值输入变量的副本,并进行幂运算

特征工程的主题是为单个观察添加更广泛的内容或分解一个复杂的变量,两者都是为了对输入数据提供一个更直接的观察视角。

我喜欢把特征工程看作是一种数据转换,尽管把数据转换看作是一种特征工程同样合理。

降维

一个数据集的输入特征的数量可以看作是数据的维数。

例如,两个输入变量可以定义一个二维区域,其中每行数据定义该空间中的一个点。这个想法可以扩展到任意数量的输入变量来创建大型多维空间。

问题是这个空间的维数越大(例如,输入变量越多),数据集就越有可能稀疏,成为该空间的不具代表性的采样。这被称为维度诅咒。

这种情况促进了特征选择的使用,然而另一种替代方案是创建数据到低维空间的投影,该投影仍然保留了原始数据最重要的属性。

这种投影通常被称为降维

https://machinelearningmastery.com/dimensionality-reduction-for-machine-learning/

它提供了一种替代特征选择的方法。与特征选择不同,投影数据中的变量与原始输入变量没有直接关系,这使得投影难以解释。

降维最常见的方法是使用矩阵分解技术:

  • 主成分分析 (PCA)

  • 奇异值分解 (SVD)

这些技术的主要作用是它们消除了输入变量之间的线性依赖关系,例如相关变量。

其他方法也可以实现降维,我们可以将其称为基于模型的方法,例如LDA和自动编码器。

  • 线性判别分析 (LDA)

有时也可以使用流形学习算法,如Kohonen自组织映射和t-SNE。

有关降维的更多介绍,请参见教程:

机器学习的降维介绍

https://machinelearningmastery.com/dimensionality-reduction-for-machine-learning/

扩展阅读

如果你想深入了解数据准备,本节将提供更多相关资源。

教程

如何为机器学习准备数据

https://machinelearningmastery.com/how-to-prepare-data-for-machine-learning/

机器学习应用过程

https://machinelearningmastery.com/process-for-working-through-machine-learning-problems/

如何用Python进行机器学习的数据清洗

https://machinelearningmastery.com/basic-data-cleaning-for-machine-learning/

如何选择机器学习的特征选择方法

https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/

机器学习的降维介绍

https://machinelearningmastery.com/dimensionality-reduction-for-machine-learning/

特征工程与选择:预测性模型的实用方法,2019年

https://www.amazon.com/Feature-Engineering-Selection-Practical-Predictive-ebook/dp/B07VMP371H/ref=as_li_ss_tl?dchild=1&keywords=Feature+Engineering+and+Selection&qid=1587500100&s=books&sr=1-1&linkCode=sl1&tag=inspiredalgor-20&linkId=9175af861ca8c628251ac3b8818b740a&language=en_US

应用预测建模,2013年

https://bit.ly/2VMhnat?cc=a928849b852590b3ab8fd8421dcfbc9d

数据挖掘:实用机器学习工具和技术,第4版,2016年

https://www.amazon.com/Data-Mining-Practical-Techniques-Management-ebook/dp/B01MG31RL3/ref=as_li_ss_tl?dchild=1&keywords=Data+Mining+-+Practical+Machine+Learning+Tools+and+Techniques&qid=1587500149&s=books&sr=1-1&linkCode=sl1&tag=inspiredalgor-20&linkId=e30319d53eeab541dbe12c798733766a&language=en_US

文章

数据准备,维基百科

https://en.wikipedia.org/wiki/Data_preparation

数据清洗,维基百科

https://en.wikipedia.org/wiki/Data_cleansing

数据预处理,维基百科

https://en.wikipedia.org/wiki/Data_pre-processing

总结

在本教程中,你了解了在预测性建模机器学习任务中常见的数据准备任务。

具体来说,你学到了:

  • 数据清洗这样的技术可以识别和修复数据中的错误,比如丢失的值。

  • 数据转换可以改变数据集中变量的尺度、类型和概率分布。

  • 特征选择和降维等技术可以减少输入变量的数量。

原文标题:

Tour of Data Preparation Techniques for Machine Learning

原文链接:

https://machinelearningmastery.com/data-preparation-techniques-for-machine-learning/

编辑:王菁

校对:林亦霖

译者简介

王晓颖( Shirley),UIUC毕业,目前在Coursera上自学Python课程,对AI,Python,数据分析以及Matplotlib等等都很感兴趣,希望能够认识更多厉害的人,保持学习的能力,接触新鲜的事物并从中学习,成为更好的自己。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 机器学习数据准备技术之旅(附链接)相关推荐

  1. 注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”(附链接)

    来源:大数据文摘 本文约9968字,建议阅读10分钟. 本文对机器学习圈内有太多搞"伪科学"的现象做出了解释. 最近的机器学习圈让人有些看不懂. 一边是今年的NIPS迎来了创纪录的 ...

  2. 独家 | 5个机器学习开源项目来挑战你的数据科学技能!(附链接)

    作者:Pranav Dar 翻译:张达敏 校对:吴振东 本文约3100字,建议阅读10分钟 5个富有挑战性的机器学习开源项目帮你找到2020的正确打开方式,以下机器学习项目涉及多个领域,包括Pytho ...

  3. 独家 | 5个步骤开启你的数据科学职业生涯!(附链接)

    作者:Thomas 翻译:王雨桐 校对:丁楠雅 本文约2000字,建议阅读10分钟. 本文为刚刚接触数据科学的新人,提出五个职场准备的建议. 数据科学已经成为21世纪最热门的工作领域,但如何才能成为数 ...

  4. 推荐 : 5个机器学习开源项目来挑战你的数据科学技能!(附链接)

    作者:Pranav Dar   翻译:张达敏    校对:吴振东 本文约3100字,建议阅读10分钟 5个富有挑战性的机器学习开源项目帮你找到2020的正确打开方式,以下机器学习项目涉及多个领域,包括 ...

  5. 5个机器学习开源项目,挑战你的数据科学技能!(附链接)

    ▼ 更多精彩推荐,请关注我们 ▼ 本文授权转载自数据派THU 作者:Pranav Dar 编译:张达敏 简介 越来越多的人开始踏入数据科学领域.不管你是应届毕业生.初入职场者,还是有一定相关经验的专业 ...

  6. 财经数据----同花顺技术选股,附代码

    因为我最近在学习量化框架pyalgotrade比较忙,所以我写文章的时间比较少,因为白天要上课比较忙,所以我介绍一些有意义的数据.比如同花顺财经的技术选股.我们打开浏览器,搜搜同花顺财经进入数据我们看 ...

  7. python降维方法_机器学习数据降维方法总结(附python代码)

    介绍 在机器学习实战时,如果面对一个数据集具有上千个特征,那么对于模型训练将是一个巨大的挑战.面对如此多的数据变量,如果我们认真的去分析每一个变量将耗费我们几周甚至几个月的时间,那么你估计也要被开除了 ...

  8. 独家 | 贝叶斯信念网络初探(附链接)

    作者:Jason Brownlee 翻译:陈超 校对:欧阳锦 本文约3500字,建议阅读8分钟 本文共分为5部分,从概率模型的挑战.概率模型--贝叶斯信念网络.如何建立和使用贝叶斯网络.贝叶斯网络范例 ...

  9. 独家 | 如何手动优化神经网络模型(附链接)

    翻译:陈丹 校对:车前子 本文约5400字,建议阅读15分钟 本文是一个教授如何优化神经网络模型的基础教程,提供了具体的实战代码供读者学习和实践. 标签:神经网络优化 深度学习的神经网络是采用随机梯度 ...

最新文章

  1. torch_geometric 笔记:global_mean_pool
  2. Datatable Initialization - 使用objects数据源初始化
  3. [转]权限树中Checkbox的操作[Asp.Net2.0]
  4. [react] React的触摸事件有哪几种?
  5. can协议crc计算_详解CAN/CAN FD通信中的循环冗余校验(CRC)方法
  6. HTTP之Cookie
  7. Continue(Java)
  8. 为什要学习烹饪?学习烹饪迫在眉睫
  9. linux下python、django框架的配置
  10. linux 电源管理
  11. oracle oci.dll无法加载_性能优化专题11-类加载器
  12. html页面前端乱码,css网页代码乱码怎么解决?
  13. word中如何单独修改某一页页眉
  14. app上架华为应用市场流程
  15. matlab误码率理论,QDPSK理论误码率与实际误码率matlab仿真程序
  16. 打出“人工智能+物流”牌,旷视就能重拾资本信任?
  17. 锚点的作用是什么?如何创建锚点?
  18. 不做ui了 转行做什么_ui设计师是做什么的 想转行可以吗
  19. 通过singlefile把网页保存到本地
  20. R语言ggplot2可视化:ggplot2可视化为轴标签添加复杂下标(Subscripts)和上标(superscripts)、离子化学符号(ionic chemical notation)等

热门文章

  1. 存在就不插入_DOM 插入节点和三个Child方法
  2. python线程池阻塞队列_福利又来啦!python多线程进阶篇
  3. 借力英伟达打造车规L3智能驾驶大脑,揭开德赛西威量产的“秘密”
  4. 微信小程序 - 调用腾讯地图插件
  5. form表单提交,Servlet接收并读取Excel文件
  6. 给Java新手的一些建议——Java知识点归纳(Java基础部分)
  7. 只改一个值!马上加快宽带上网速度
  8. [3D]绘制XYZ小坐标轴
  9. linux下使用inotify实时监控文件变更,做完整性检查
  10. “#ifdef __cplusplus extern C { #endif”的定义(zz)