数据科学中的非数学特征工程技术



◆ ◆ ◆

导 读

“应用机器学习像是把你当一个伟大的工程师,而非伟大的机器学习专家。”

这是我在一份谷歌内部文件中读到的如何应用机器学习的第一句话。的确如此。以我作为服务器工程师/数据分析师的有限经验,数据(以及如何存储/处理)一直都是所有问题的核心,在整体中举足轻重。去问问任何一位Kaggle的获胜者,他们都会说,最大的收获总是来源于聪明地表示数据,而不是使用某些复杂的算法。即使CRISP数据挖掘处理也使用了不是一个,而是两个阶段,专门用来理解和准备数据。


◆ ◆ ◆

特征工程

那么,什么是特征工程?

简而言之,就是用最好的方法来表示数据的艺术/科学。

为什么说是艺术/科学?因为好的特征工程是专业知识,直觉和基础的数学能力的优雅组合。呃,最有效的数据表示法基本不包含任何数学计算(下文我会解释)。“最好的”是什么意思?大体上,提供给算法的数据的方式,应该以最有效的方式表示潜在信息的相关结构/属性。当你进行特征工程时,你是在把你的数据属性转化为数据特征。

 

属性基本上是数据的所有维度,但是所有这些以原始形态存在的属性是否以最佳的表示方式表示了你想学习的潜在趋势?也许不是。所以特征工程是对数据进行预处理,在此基础上进行建模/建立学习算法,从而可以花最小的力气处理噪声数据。在此“噪音”的含义是,任何与学习/预测你的最终目标无关的信息。实际上,由于你已经自己完成了一部分“思考”的工作,使用好的特征甚至可以让你使用简单得多的模型。

但是就像任何机器学习中的技术一样,一定要通过验证确保你引入的新特征确实能够改进预测,而不是增加不必要的复杂性。如果机器学习是发型:模型—华丽的,装饰的,不易打理的,特征工程—接地气的,即兴的,直接的。

如同之前提到的,好的特征工程包含直觉,专业知识(个人经验)和基本的数学技巧。以下是几个非常简单的技巧,你可以应用在你的下一个数据科学解决方案中。

 

1.表示时间戳

时间戳属性经常是用EPOCH时间来定义,或者分离到多个维度里,比如(年,月,日,时,分,秒)。但是在很多场合下,很多信息是不必要的。比如,在一个监督学习系统里,预测一个城市关于地点+时间的交通流量,如果以秒来发现其趋势,很有可能得到错误的结论。以年为单位对这个模型来说没有太多价值;小时,天和月可能是你需要用到的维度。所以,当表示时间时,试着去确认一下你的模型是否需要你所提供的所有数字。

别忘了时区。如果你的数据源自不同的地域,务必记得在需要的时候用时区做标准化。

2.分解分类型属性

有的属性是种类而非数字。一个简单的例子是“颜色”属性,比如{红,绿,蓝}之一。最常见的表示方法是将种类转化为二元属性,从{0,1}中二取一。于是你得到了一系列增加的属性,数目与种类的个数相等,而且在每个数据点的这一系列属性中,只有一个的值是1(其余的都是0)。这是一种独热编码形式。

如果你第一次接触到这个概念,你可能会认为分解属性是平添了不必要的麻烦(本质上我们扩大了数据集的维度)。相反,你可能更愿意将种类属性转变为一个标量值,比如,颜色特征可能用{1,2,3}代表{红,绿,蓝}。这会带来两个问题。第一,对于一个数学模型,这个可能表示“红色”比“蓝色”更接近“绿色”(因为|1-3|>|1-2|)。除非你的种类的确包含自然顺序(natural ordering)(比如一条火车线路上的车站),否则的话这种表示法可能会误导你的模型。第二,它可能导致统计学参数(比如平均值)失去意义。甚者,造成误导。再次考虑颜色的例子,如果你的数据集包含同样多的红色和蓝色值,而没有绿色值,取平均值仍会得到“2”——代表着绿色!

 

将种类属性转化为标量值最安全的情况是当你只有两个种类时。这样你就有了{0,1}对应{种类1,种类2}。这种情况下,“次序”不是必要的,并且你可以将属性值解读为属于种类2抑或种类1的概率值。

3.数字分组 

有时候,将数字属性表示成分类属性也是一种有效的分析方法。这种方法通过将数字分段划组,来减少噪声对机器学习算法的干扰。比如说,如果我们要预测一个人是否拥有某一件特定的衣服。显然年龄是一个影响因素。实际上年龄组可能更加恰当一些。所以我们可以给年龄分段,比如1-10岁,11-18岁,19-25岁,26-40岁等。对于这样的分类,我们便没有必要像第2点所说的那样再去做类别内的分解,直接用标量值划分组别就可以了,因为相近的年龄组确实是有相似之处的。

 

属性域能被清楚归类的数据,其同一区间的数字能够代表相同的特征,分组这种方法就比较适用于这样的数据。如果你不想让你的模型区分太相近的数值,这种方法可以减少一些应用中的过拟合问题。比如说,如果你的关注点是一整个城市,你就可以把该城市所有的纬度归到一起。分组这个方法通过将数值”化整”到离它最近的典型数值,来减少微小错误带来的影响。不过,如果分组数量与你的可能值数量相当,或者你要求很高的精度,那么数据分组就没有什么意义了。

 

4.特征交叉

特征交叉也许是这些方法中最为重要和有用的一种了。这种独特的方法可以将两个或两个以上的类别属性组合成一种。这个方法非常有用,尤其如果相对于单个属性本身,与其他属性的结合能更好地表示某些特性。从数学上讲,是把所有这些属性的可能值做了叉乘。

若某特征A的值域为{A1,A2},特征B的值域为{B1, B2}。A和B之间的交叉特征(我们称之为AB)则是以下这些值中的一个:{(A1, B1),(A1, B2), (A2, B1), (A2, B2)}。你可以自由命名这些“组合”,任何一个组合都代表了A或B特征中的某些信息的合成。

 

比如以下图表:

所有蓝点属于一类,而红点属于另一类。我们暂且不用知道这个模型的真实意义。首先,你需要把X的值域划分为{x < 0, x >= 0},把Y的值域划分为{y < 0, y >= 0},并把它们分别表示为{Xn, Xp} 和 {Yn, Yp}。显然,第一和第三象限属于红色,而第二和第四象限属于蓝色。如果我们把X和Y做特征交叉,并把结果归类为”象限”这个统一的特征,我们就有了{I, II, III, IV}四个值,分别等同于之前提到的{(Xp, Yp), (Xn, Yp), (Xn, Yn), (Xp, Yn)}。

  

另一个更加具体也更加相关的好例子是经纬度。一个常见的纬度值与世界上很多地方都有关联,经度也是这样。但是如果你将经纬度相结合,并划分到不同的“区块”,它们就可以代表地理上的“地区”,各个地区内部有着相似的特性。

 

有时候,多个数据属性可以通过简单的数学计算被“组合”成一个新的特征。在上一个例子中,假设你把特征重定义为

 

那么现在你可以定义一个全新的特征

 

就这么简单,如果,则是红色,反之则是蓝色。

作为补充,我接下来将简单介绍几个数学上比较复杂的特征工程技巧,并附带了链接以便大家更好地理解。

 

5.特征选取

运用某些算法来自动选择原始数据特征中的一个子集,以建立最终模型。你不需要建立/修改现有的数据特征,而是对它们进行删减,来降低干扰,减少数据冗余。

 

6.特征缩放(数据标准化)

有时候,你可能会注意到有些属性的数量级比别的属性更大,比如一个人的收入,相对于他的年龄而言。在类似的情况下,有些模型(比如岭回归)就要求你把所有的属性都缩放到一个可比较的、同等的范围内。这可以防止某些属性被给予过多的权重。

7.特征提取

特征提取包含了许多算法,它们能够从原始数据属性中自动生成新的特征集合。数据降维是这类方法里的一种。

  原文发布时间为:2016-09-12

时间: 2024-09-22 04:24:26

数据科学中的非数学特征工程技术的相关文章

《Python数据科学指南》——第1章 Python在数据科学中的应用 1.1 简介

第1章 Python在数据科学中的应用 在这一章里,我们将探讨以下主题. 使用字典对象 使用字典的字典 使用元组 使用集合 写一个列表 从另一个列表创建列表--列表推导 使用迭代器 生成一个迭代器和生成器 使用可迭代对象 将函数作为变量传递 在函数中嵌入函数 将函数作为参数传递 返回一个函数 使用装饰器改变函数行为 使用lambda创造匿名函数 使用映射函数 使用过滤器 使用zip和izip函数 从表格数据使用数组 对列进行预处理 列表排序 采用键排序 使用itertools 1.1 简介 Py

云计算、大数据、中云网微博群体特征图谱分析

这是中云网对新浪微博云计算.大数据.中云网微博http://www.aliyun.com/zixun/aggregation/11070.html">群体特征图谱分析. 本分析图谱: 首先,进行数据采集,搜索"云计算""大数据"获得关联度和知名度最高的50名微博账户,并寻找中云网账户相互关联的用户群落. 其次,进行社交分析,以以上群落各参与账户的社交关联度,重新排列可视化的大小,并以账户的社交距离排列账户的位置.图中微博账号所示的点越大,则说明这些账

了解人工智能之分类和预测 - 数据科学中的预测,分类和回归分析

在上一篇中,我概括地解释了一些主要的人工智能概念,包括机器学习,神经网络和深度学习.也概述了当前人工智能背后的基本原理,提及了从大量样本中学习的机器学习系统,解释了深度学习系统能够更丰富地展现这些样例.那接下来我们就来说说利用这些人工智能系统我们今天可以做些什么,有哪些用途,以及现在的研究领域与方向. 总的来说,我们可以从两个方面来利用当前的人工智能系统: 完成更出色的数据科学工作 我们长期以来使用传统统计方法或软件工程来处理下面这些数据科学领域的工作.但是在有了机器学习系统以后,我们可以做得更

从原始数据到数据科学:使非结构化数据结构化,以推动产品开发

数据科学正在快速发展成所有行业开发人员和管理人员的关键技能,它看起 来也十分有趣.但是,它非常复杂,虽有许多工程和分析工具助力,却也难清楚掌握现在做得对不对,哪里是不是有陷阱.在本系列中,我们解释了如何发挥数据科学的作用,理解哪里需要它,哪里不需要它,以及如何令它为你产生价值,如何从先行者那里获得有用的经验. 这是"Getting A Handle On Data Science(理解数据科学)"系列文章中的一部分. 本文要点 从非结构化的机器日志到提供当前特定信息的高度结构化的数据分

数据科学中“专业化”意味着什么

我作为一个数据科学家的经历跟我在书本和博客上所读到的根本不一样.我曾读到过为数字超级新星公司工作的数据科学家,他们听上去像是英雄,可以写出自动化(近乎有感知能力的)算法并不断地大量获取认知结果.我也读到过像百战天龙那样的数据科学家黑客,他们可以通过将他们周围有的任意原始材料拼凑出数据产品来拯救世界. 我的团队创建的数据产品并没有重要到可以评价大型的企业级基础设施.只是我觉得,投资超高效的自动化以及产品控制是不值得的.另一方面,我们的数据 产品影响了企业中的重要决策,并且我们的努力是可测量,这一点

数据科学中最好的5个机器学习API

机器学习作为大数据的前沿无疑是让人生畏的,因为只有技术极客和数据科学领域的专家才能驾驭机器学习算法和技术,对于大部分企业和组织而言,过去这一直都是一个遥不可及的事情.但是现在这种情况正在发生改变,正如标准的API简化了应用程序的开发一样,机器学习API也降低了这一领域的门槛,让越来越多的人和企业能够借助技术底蕴深厚的公司所提供的API试水机器学习. 机器学习API隐藏了创建和部署机器学习模型的复杂性,让开发者能够专注于数据挖掘和用户体验.同时,将机器学习商业化成云服务也是当今的趋势,IBM.Mi

数据科学中的“数据智慧”

在大数据时代,学术界和工业界的大量研究都是关于如何以一种可扩展和高效率的方式对数据进行储存.交换和计算(通过统计方法和算法).这些研究非常重要.然而,只有对数据智慧(data wisdom)也给予同等程度的重视,大数据(或者小数据)才能转化为真正有用的知识和可被采纳的信息.换言之,我们要充分认识到,只有拥有足够数量的数据,才有可能对复杂度较高的问题给出较可靠的答案."数据智慧"对于我们从数据中提取有效信息和确保没有误用或夸大原始数据是至关重要的. "数据智慧"一词是

为何企业无法从数据科学中真正获得价值?

当今企业拥有越来越多的数据,但这些数据并没有完全被转化成可操作的信息.在过去的几年里,我和我的MIT调查小组一直在寻找一个基本问题的答案:如何让企业通过机器学习,将蕴藏于其数据储存内的潜能全部释放出来. 当我们与不同行业的合作伙伴一起设计基于机器学习的解决方案时,我们发现已有的解决方案通常情况下是不适合的,这是为什么呢? 首先,每当我们问到机器学习专家们(专长于预测模型训练和测试的数据科学家们),在工作中最困难的部分,被一次次提及的答案是--"数据杂乱无章".一开始,从字面意思上理解,

中国数据:成功申报南京市云存储工程技术研究中心

日前,南京市科学技术委员会公布并举行了2012年市级工程研究中心授牌仪式,江苏邦宁科技有限公司(公司主品牌"中国数据",以下简称中国数据)成功申报并获批建立南京市云存储工程技术中心. 按照南京市科学技术委员会的规划,本次授牌工程研究中心旨在引导和鼓励大中型工业企业和高新技术企业建立研发机构,促进企业进行产品与技术创新研发.中国数据•南京市云存储工程中心将成为南京市云存储技术研究.交流和发展的平台,成为该领域新技术和新产品的孵化器,填补南京市互联网行业该领域的空白,全面助推南京市互联网产