(七)机器学习里的特征工程

不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界和工业界对机器学习的研究各有侧重,学术界侧重于对机器学习理论的研究,工业界侧重于如何用机器学习来解决实际问题。我们结合美团在机器学习上的实践,进行一个实战系列的介绍,介绍机器学习在解决工业界问题的实战中所需的基本技术、经验和技巧。本文主要结合实际问题,概要地介绍机器学习解决实际问题的整个流程,包括对问题建模、准备训练数据、抽取特征、训练模型和优化模型等关键环节;另外几篇则会对这些关键环节进行更深入地介绍。

下文分为:

1)机器学习的概述;2)对问题建模;3)准备训练数据;4)抽取特征;5)训练模型;6)优化模型;7)总结 。

机器学习可以分为无监督学习(Unsupervised Learning)和有监督学习(Supervised Learning),在工业界中,有监督学习是更常见和更有价值的方式,下文中主要以这种方式展开介绍。如下图中所示,有监督的机器学习在解决实际问题时,有两个流程,一个是离线训练流程(蓝色箭头),包含数据筛选和清洗、特征抽取、模型训练和优化模型等环节;另一个流程则是应用流程(绿色箭头),对需要预估的数据,抽取特征,应用离线训练得到的模型进行预估,获得预估值作用在实际产品中。在这两个流程中,离线训练是最有技术挑战的工作(在线预估流程很多工作可以复用离线训练流程的工作),所以下文主要介绍离线训练流程。

如上图所示是一个经典的机器学习问题框架图。数据清洗和特征挖掘的工作是在灰色框中框出的部分,即“数据清洗=>特征,标注数据生成=>模型学习=>模型应用”中的前两个步骤。
灰色框中蓝色箭头对应的是离线处理部分。主要工作是

1)从原始数据,如文本、图像或者应用数据中清洗出特征数据和标注数据。

2)对清洗出的特征和标注数据进行处理,例如样本采样,样本调权,异常点去除,特征归一化处理,特征变化,特征组合等过程。最终生成的数据主要是供模型训练使用。

                    监督学习模型

模型(Model)是机器学习中的一个重要概念,简单的讲,指特征空间到输出空间的映射;一般由模型的假设函数和参数w组成(下面公式就是Logistic Regression模型的一种表达,在训练模型的章节做稍详细的解释);一个模型的假设空间(hypothesis space),指给定模型所有可能w对应的输出空间组成的集合。工业界常用的模型有Logistic Regression(简称LR)、Gradient Boosting Decision Tree(简称GBDT)、Support Vector Machine(简称SVM)、Deep Neural Network(简称DNN)等。模型训练就是基于训练数据,获得一组参数w,使得特定目标最优,即获得了特征空间到输出空间的最优映射,具体怎么实现,见训练模型章节。

本文以DEAL(团购单)交易额预估问题为例(就是预估一个给定DEAL一段时间内卖了多少钱),介绍使用机器学习如何解决问题。首先需要:

◎ 收集问题的资料,理解问题,成为这个问题的专家;

◎ 拆解问题,简化问题,将问题转化机器可预估的问题。

深入理解和分析DEAL交易额后,可以将它分解为如下图的几个问题:

单个模型?多个模型?如何来选择?
按照上图进行拆解后,预估DEAL交易额就有2种可能模式,一种是直接预估交易额;另一种是预估各子问题,如建立一个用户数模型和建立一个访购率模型(访问这个DEAL的用户会购买的单子数),再基于这些子问题的预估值计算交易额。
◎ 不同方式有不同优缺点,具体如下:

◎  选择哪种模式?

1)问题可预估的难度,难度大,则考虑用多模型;

2)问题本身的重要性,问题很重要,则考虑用多模型;

3)多个模型的关系是否明确,关系明确,则可以用多模型。

◎ 如果采用多模型,如何融合?

可以根据问题的特点和要求进行线性融合,或进行复杂的融合。以本文问题为例,至少可以有如下两种:

模型选择

对于DEAL交易额这个问题,我们认为直接预估难度很大,希望拆成子问题进行预估,即多模型模式。那样就需要建立用户数模型和访购率模型,因为机器学习解决问题的方式类似,下文只以访购率模型为例。要解决访购率问题,首先要选择模型,我们有如下的一些考虑:

◎主要考虑

1)选择与业务目标一致的模型;

2)选择与训练数据和特征相符的模型。

训练数据少,High Level特征多,则使用“复杂”的非线性模型(流行的GBDT、Random Forest等);

训练数据很大量,Low Level特征多,则使用“简单”的线性模型(流行的LR、Linear-SVM等)。

◎补充考虑

1)当前模型是否被工业界广泛使用;

2)当前模型是否有比较成熟的开源工具包(公司内或公司外);

3)当前工具包能够的处理数据量能否满足要求;

4)自己对当前模型理论是否了解,是否之前用过该模型解决问题。

为实际问题选择模型,需要转化问题的业务目标为模型评价目标,转化模型评价目标为模型优化目标;根据业务的不同目标,选择合适的模型,具体关系如下:

通常来讲,预估真实数值(回归)、大小顺序(排序)、目标所在的正确区间(分类)的难度从大到小,根据应用所需,尽可能选择难度小的目标进行。对于访购率预估的应用目标来说,我们至少需要知道大小顺序或真实数值,所以我们可以选择Area Under Curve(AUC)或Mean Absolute Error(MAE)作为评估目标,以Maximum likelihood为模型损失函数(即优化目标)。综上所述,我们选择spark版本 GBDT或LR,主要基于如下考虑:

1)可以解决排序或回归问题;

2)我们自己实现了算法,经常使用,效果很好;

3)支持海量数据;

4)工业界广泛使用。

准备训练数据

深入理解问题,针对问题选择了相应的模型后,接下来则需要准备数据;数据是机器学习解决问题的根本,数据选择不对,则问题不可能被解决,所以准备训练数据需要格外的小心和注意:

注意点:

◎待解决问题的数据本身的分布尽量一致;

◎训练集/测试集分布与线上预测环境的数据分布尽可能一致,这里的分布是指(x,y)的分布,不仅仅是y的分布;

◎y数据噪音尽可能小,尽量剔除y有噪音的数据;

◎非必要不做采样,采样常常可能使实际数据分布发生变化,但是如果数据太大无法训练或者正负比例严重失调(如超过100:1),则需要采样解决。

常见问题及解决办法

◎待解决问题的数据分布不一致:

1)访购率问题中DEAL数据可能差异很大,如美食DEAL和酒店DEAL的影响因素或表现很不一致,需要做特别处理;要么对数据提前归一化,要么将分布不一致因素作为特征,要么对各类别DEAL单独训练模型。

◎数据分布变化了:

1)用半年前的数据训练模型,用来预测当前数据,因为数据分布随着时间可能变化了,效果可能很差。尽量用近期的数据训练,来预测当前数据,历史的数据可以做降权用到模型,或做transfer learning。

◎y数据有噪音:

1)在建立CTR模型时,将用户没有看到的Item作为负例,这些Item是因为用户没有看到才没有被点击,不一定是用户不喜欢而没有被点击,所以这些Item是有噪音的。可以采用一些简单规则,剔除这些噪音负例,如采用skip-above思想,即用户点过的Item之上,没有点过的Item作为负例(假设用户是从上往下浏览Item)。

◎采样方法有偏,没有覆盖整个集合:

1)访购率问题中,如果只取只有一个门店的DEAL进行预估,则对于多门店的DEAL无法很好预估。应该保证一个门店的和多个门店的DEAL数据都有;

2)无客观数据的二分类问题,用规则来获得正/负例,规则对正/负例的覆盖不全面。应该随机抽样数据,进行人工标注,以确保抽样数据和实际数据分布一致。

访购率问题的训练数据

◎收集N个月的DEAL数据(x)及相应访购率(y);

◎收集最近N个月,剔除节假日等非常规时间 (保持分布一致);

◎只收集在线时长>T 且 访问用户数 > U的DEAL (减少y的噪音);

◎考虑DEAL销量生命周期 (保持分布一致);

◎考虑不同城市、不同商圈、不同品类的差别(保持分布一致)。

抽取特征

完成数据筛选和清洗后,就需要对数据抽取特征,就是完成输入空间到特征空间的转换(见下图)。针对线性模型或非线性模型需要进行不同特征抽取,线性模型需要更多特征抽取工作和技巧,而非线性模型对特征抽取要求相对较低。

对于线性模型,可以仅仅对特征做简单处理,作为模型的输入。

对于非线性模型,需要利用领域知识做非线性特征变换(例如特征组合)特征组合后再来选择特征:如对用户id和用户特征做组合来获得较大的特征集再来选择特征,这种做法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,原因是用户数据比较稀疏,组合特征能够同时兼顾全局模型和个性化模型,这个问题有机会可以展开讲。

extract_fea

通常,特征可以分为High Level与LowLevel,High Level指含义比较泛的特征,LowLevel指含义比较特定的特征,举例来说:

DEAL A1属于POIA,人均50以下,访购率高;

DEAL A2属于POIA,人均50以上,访购率高;

DEAL B1属于POIB,人均50以下,访购率高;

DEAL B2属于POIB,人均50以上,访购率底;

基于上面的数据,可以抽到两种特征,POI(门店)或人均消费;POI特征则是Low Level特征,人均消费则是High Level特征;假设模型通过学习,获得如下预估:

如果DEALx 属于POIA(LowLevel feature),访购率高;

如果DEALx 人均50以下(HighLevel feature),访购率高。

所以,总体上,Low Level 比较有针对性,单个特征覆盖面小(含有这个特征的数据不多),特征数量(维度)很大。High Level比较泛化,单个特征覆盖面大(含有这个特征的数据很多),特征数量(维度)不大。长尾样本的预测值主要受High Level特征影响。高频样本的预测值主要受Low Level特征影响。

对于访购率问题,有大量的High Level或Low Level的特征,其中一些展示在下图:

feature_list

◎非线性模型的特征

1)可以主要使用High Level特征,因为计算复杂度大,所以特征维度不宜太高;

2)通过High Level非线性映射可以比较好地拟合目标。

◎线性模型的特征

1)特征体系要尽可能全面,High Level和Low Level都要有;

2)可以将High Level转换Low Level,以提升模型的拟合能力。

特征归一化

特征抽取后,如果不同特征的取值范围相差很大,最好对特征进行归一化,以取得更好的效果,常见的归一化方式见(一)线性回归与特征归一化(feature scaling)

特征离散化

为了便于表示和在模型中处理,需要对连续值特征进行离散化处理。常用的离散化方法包括等值划分和等量划分。等值划分是将特征按照值域进行均分,每一段内的取值等同处理。例如某个特征的取值范围为[0,10],我们可以将其划分为10段,[0,1),[1,2),...,[9,10)。等量划分是根据样本总数进行均分,每段等量个样本划分为1段。例如距离特征,取值范围[0,3000000],现在需要切分成10段,如果按照等比例划分的话,会发现绝大部分样本都在第1段中。使用等量划分就会避免这种问题,最终可能的切分是[0,100),[100,300),[300,500),..,[10000,3000000],前面的区间划分比较密,后面的比较稀疏。

特征选择

特征抽取和归一化之后,如果发现特征太多,导致模型无法训练,或很容易导致模型过拟合,则需要对特征进行选择,挑选有价值的特征。特征选的的方式分为如下几种:

◎ Filter: 计算每一个特征与响应变量的相关性:工程上常用的手段有计算皮尔逊系数和互信息系数,皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性,但是计算相对复杂一些,好在很多toolkit里边都包含了这个工具(如sklearn的MINE),得到相关性之后就可以排序选择特征了;

◎ Wrapper: 选择一个特征子集加入原有特征集合,用模型进行训练,比较自己加入前后的效果,如果效果变好,则认为该子集特征有效。Wrapper特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。其一般过程如下图所示:

◎ Embedded:特征选择与模型训练结合,在损失函数中加入L1,L2正则。L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;

综上,下面是一个特征工程的图:

优化模型

经过上文提到的数据筛选和清洗、特征设计和选择、模型训练,就得到了一个模型,但是如果发现效果不好?怎么办?

【首先】

反思目标是否可预估,数据和特征是否存在bug。

【然后】

分析一下模型是Overfitting还是Underfitting,从数据、特征和模型等环节做针对性优化。

Underfitting& Overfitting

所谓Underfitting,即模型没有学到数据内在关系,如下图左一所示,产生分类面不能很好的区分X和O两类数据;产生的深层原因,就是模型假设空间太小或者模型假设空间偏离。

所谓Overfitting,即模型过渡拟合了训练数据的内在关系,如下图右一所示,产生分类面过好地区分X和O两类数据,而真实分类面可能并不是这样,以至于在非训练数据上表现不好;产生的深层原因,是巨大的模型假设空间与稀疏的数据之间的矛盾。

underfitting_overfitting

在实战中,可以基于模型在训练集和测试集上的表现来确定当前模型到底是Underfitting还是Overfitting,判断方式如下表:

怎么解决Underfitting和Overfitting问题?

总结

综上所述,机器学习解决问题涉及到问题建模、准备训练数据、抽取特征、训练模型和优化模型等关键环节,有如下要点:

◎ 理解业务,分解业务目标,规划模型可预估的路线图。

◎ 数据:

y数据尽可能真实客观;

训练集/测试集分布与线上应用环境的数据分布尽可能一致。

◎ 特征:

利用DomainKnowledge进行特征抽取和选择;

针对不同类型的模型设计不同的特征。

◎ 模型:

针对不同业务目标、不同数据和特征,选择不同的模型;

如果模型不符合预期,一定检查一下数据、特征、模型等处理环节是否有bug;

考虑模型Underfitting和Qverfitting,针对性地优化。

参考:

http://tech.meituan.com/machinelearning-data-feature-process.html

时间: 2024-12-10 19:04:58

(七)机器学习里的特征工程的相关文章

人工智能_1_初识_机器学习介绍_特征工程和文本特征提取

# 人工智能:预测,分类 # 人工智能: # 自动的工作 # 机器学习(包含深度学习) # 以前的限制因素:计算能力,数据,算法发展 # 用途: # 图像识别 # 识别图片中不同的地方(医学CT) 不用人工识别 # 图片艺术化(可以替代ps) # 无人驾驶 # 人脸识别 # 自然语言处理 # 语音识别 # 自动写报告 # 传统预测 # 性能评估 # NLP # 推荐系统 # 机器学习的数据:文件格式,csv(逗号分隔值) # 不使用数据库: # 1,性能瓶颈,数量过多,2,3GB 读取慢 # 2

第一章 特征工程-------------《百面机器学习》

今天打算看看<百面机器学习>,打好基础,方便日后找工作,同时也是打发最近无聊的心情(闲下来就喜欢多想导致心情terrible). 第一章    特征工程 第一节  特征归一化 Q1:为什么需要对数值的特征做归一化? A1:对数据类型的特征作归一化可以将所有的特征都统一到一个大致相同的数值区间内.避免因量纲的不同带来的影响. 最常用的方法有:1)线性函数归一化.即 对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放. 2)零均值归一化.将原始数据映射到均值为0,标准差

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

机器学习 特征工程之特征选择

概念 首先看一下维基百科中关于特征选择的介绍: 在机器学习和统计学中,特征选择 也被称为变量选择.属性选择 或变量子集选择 .它是指:为了构建模型而选择相关特征(即属性.指标)子集的过程. 在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的. 特征选择的目标是寻找最优特征子集.特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目

机器学习:特征工程

特征选择直接影响模型灵活性.性能及是否简洁. 好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护. 特征选择 四个过程:产生过程,评价函数,停止准则,验证过程. 目的:过滤特征集合中不重要特征,挑选一组最具统计意义的特征子集,从而达到降维的效果. 选择标准:特征项和类别项之间的相关性(特征重要性). - - -搜索特征子空间的产生过程- - - 搜索的算法分为完全搜索(Complete),启发式搜索(Heuristic), 随机搜索(Random) 3大类. 完全

Hulu机器学习问题与解答系列 | 二十二:特征工程—结构化数据

听说最近冒出的大批呱儿子个个都是撑着眼皮也要看书的无眠小青蛙.我们学习Machine Learning的脚步又怎能停下来?动动手指,上滑开始~ 今天的内容是 [特征工程-结构化数据] 场景描述 特征工程是指结合问题寻找有效的特征并进行处理成适合模型的输入形式.机器学习中有句经典的话叫做"Garbage in, garbage out",意思是如果输入的数据是垃圾,那么得到的结果也是垃圾.可以看出模型成败的关键并不仅仅取决于模型的选取,还取决于我们是否有根据特定的问题找到了行之有效的输入

机器学习 | 特征工程- 超参数调优方法整理

特征工程是机器学习当中很重要的部分,可以帮助我们设计.创建新特征,以便模型从中提取重要相关性.本文将记录并持续更新相关特征工程的工具包介绍,包括自动模型选择和超参数调优等各方面. · Featuretools Featuretools 是一个开源的Python 库,用于自动化特征工程.自动特征工程能够缩减时间成本,构建更优秀的预测模型,生成更有意义的特征,还能防止数据泄漏(data leakage). 目标任务:从数据表格集中获取所有的数据信息并整合到一张表中,再创建特征. 解决方案:采用深度特

机器学习:数据准备和特征工程

对于数据挖掘,数据准备阶段主要就是进行特征工程. 数据和特征决定了模型预测的上限,而算法只是逼近了这个上限. 好的特征要少而精,这会使模型更简单.更精准. 一.特征构造 1.’常见提取方式 文本数据的特征提取 词袋向量的方式:统计频率 图像数据的特征提取 像素点RGB 用户行为特征提取 特征提取总结: 特征设计时需要与目标高度相关: 这个特征对预测目标是否有用 如果有用,这个特征的重要程度如何 这个特征的信息是否在其他特征重体现过 特征需要专业领域知识.直觉和一定的数学知识 初始提取的特征后续还

机器学习-特征工程-Missing value和Category encoding

好了,大家现在进入到机器学习中的一块核心部分了,那就是特征工程,洋文叫做Feature Engineering.实际在机器学习的应用中,真正用于算法的结构分析和部署的工作只占很少的一部分,相反,用于特征工程的时间基本都占70%以上,因为是实际的工作中,绝大部分的数据都是非标数据.因而这一块的内容是非常重要和必要的,如果想要提高机器学习应用开发的效率,feature engineering就像一把钥匙,一个加速器,能给整个项目带来事半功倍的效果.另外,feature engineering做的好不