其他分享
首页 > 其他分享> > 实例详解机器学习如何解决问题

实例详解机器学习如何解决问题

作者:互联网

前言

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

下文分为1)机器学习的概述,2)对问题建模,3)准备训练数据,4)抽取特征,5)训练模型,6)优化模型,7)总结 共7个章节进行介绍。


机器学习的概述:

###什么是机器学习?
随着机器学习在实际工业领域中不断获得应用,这个词已经被赋予了各种不同含义。在本文中的“机器学习”含义与wikipedia上的解释比较契合,如下:
Machine learning is a scientific discipline that deals with the construction and study of algorithms that can learn from data.

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

model

###什么是模型(model)?
模型,是机器学习中的一个重要概念,简单的讲,指特征空间到输出空间的映射;一般由模型的假设函数和参数w组成(下面公式就是Logistic Regression模型的一种表达,在训练模型的章节做稍详细的解释);一个模型的假设空间(hypothesis space),指给定模型所有可能w对应的输出空间组成的集合。工业界常用的模型有Logistic Regression(简称LR)、Gradient Boosting Decision Tree(简称GBDT)、Support Vector Machine(简称SVM)、Deep Neural Network(简称DNN)等。
png.latex?h_%7Bw%7D%5Cleft%20(%20x%20%5Cright%20)=P%5Cleft%20(%20y=1%7Cx;w%20%5Cright%20)%20=%5Cfrac%7B1%7D%7B1+e%5E%7B-wx%7D%7D
模型训练就是基于训练数据,获得一组参数w,使得特定目标最优,即获得了特征空间到输出空间的最优映射,具体怎么实现,见训练模型章节。

###为什么要用机器学习解决问题?

###机器学习应该用于解决什么问题?


对问题建模

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

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

deal_problem

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

模式 缺点 优点
单模型 1. 预估难度大
2. 风险比较高
1. 理论上可以获得最优预估(实际上很难)
2. 一次解决问题
多模型 1. 可能产生积累误差
2. 训练和应用成本高
1. 单个子模型更容易实现比较准地预估
2. 可以调整子模型的融合方式,以达到最佳效果

model_merg

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

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

select_model

通常来讲,预估真实数值(回归)、大小顺序(排序)、目标所在的正确区间(分类)的难度从大到小,根据应用所需,尽可能选择难度小的目标进行。对于访购率预估的应用目标来说,我们至少需要知道大小顺序或真实数值,所以我们可以选择Area Under Curve(AUC)或Mean Absolute Error(MAE)作为评估目标,以Maximum likelihood为模型损失函数(即优化目标)。综上所述,我们选择spark版本 GBDT或LR,主要基于如下考虑:
1)可以解决排序或回归问题;
2)我们自己实现了算法,经常使用,效果很好;
3)支持海量数据;
4)工业界广泛使用。


准备训练数据

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

###注意点:

###常见问题及解决办法

###访购率问题的训练数据


抽取特征

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

extract_fea

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

    DEAL A1属于POIA,人均50以下,访购率高;
    DEAL A2属于POIA,人均50以上,访购率高;
    DEAL B1属于POIB,人均50以下,访购率高;
    DEAL B2属于POIB,人均50以上,访购率底;

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

如果DEALx 属于POIA(Low Level feature),访购率高;
如果DEALx 人均50以下(High Level feature),访购率高。

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

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

fea_list

###特征归一化
特征抽取后,如果不同特征的取值范围相差很大,最好对特征进行归一化,以取得更好的效果,常见的归一化方式如下:

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


训练模型

完成特征抽取和处理后,就可以开始模型训练了,下文以简单且常用的Logistic Regression模型(下称LR模型)为例,进行简单介绍。
设有m个(x,y)训练数据,其中x为特征向量,y为label,png.latex?y%5Cin%5Cleft%20%5C%7B%200,1%20%5Cright%20%5C%7D;w为模型中参数向量,即模型训练中需要学习的对象。
所谓训练模型,就是选定假说函数和损失函数,基于已有训练数据(x,y),不断调整w,使得损失函数最优,相应的w就是最终学习结果,也就得到相应的模型。

###模型函数
1)假说函数,即假设x和y存在一种函数关系:
png.latex?h_%7Bw%7D%5Cleft%20(%20x%20%5Cright%20)=P%5Cleft%20(%20y=1%7Cx;w%20%5Cright%20)%20=%5Cfrac%7B1%7D%7B1+e%5E%7B-wx%7D%7D

2)损失函数,基于上述假设函数,构建模型损失函数(优化目标),在LR中通常以(x,y)的最大似然估计为目标:

png.latex?L%5Cleft%20(%20w%20%20%5Cright%20)=%5Csum_%7Bi=1%7D%5E%7Bm%7Dy%5E%7B(i)%7Dlogh_%7Bw%7D(x%5E%7B(i)%7D)+(1-y%5E%7B(i)%7D)log(1-h_%7Bw%7D(x%5E%7B(i)%7D))

###优化算法

gradient_descent

coordinate_descent


优化模型

经过上文提到的数据筛选和清洗、特征设计和选择、模型训练,就得到了一个模型,但是如果发现效果不好?怎么办?
【首先】
反思目标是否可预估,数据和特征是否存在bug。
【然后】
分析一下模型是Overfitting还是Underfitting,从数据、特征和模型等环节做针对性优化。

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

underfitting_overfitting

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

训练集表现 测试集表现 问题
< 期望目标值 < 期望目标值 Underfitting
> 期望目标值 接近或略逊于训练集 合适
> 期望目标值 远差于训练集 Overfitting

###怎么解决Underfitting和Overfitting问题?

问题 数据 特征 模型
Underfitting 清洗数据 1. 增加特征
2. 删除噪音特征
1. 调低正则项的惩罚参数
2. 换更“复杂”的模型(如把线性模型换为非线性模型)
3. 多个模型级联或组合
Overfitting 增加数据 1. 进行特征选择
2. 降维(如对特征进行聚类、主题模型进行处理等)
1. 提高正则项的惩罚参数
2. 减少训练迭代次数
3. 换更“简单”的模型(如把非线性模型换为线性模型)

总结

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

  1. 理解业务,分解业务目标,规划模型可预估的路线图。
  2. 数据:
    y数据尽可能真实客观;
    训练集/测试集分布与线上应用环境的数据分布尽可能一致。
  3. 特征:
    利用Domain Knowledge进行特征抽取和选择;
    针对不同类型的模型设计不同的特征。
  4. 模型:
    针对不同业务目标、不同数据和特征,选择不同的模型;
    如果模型不符合预期,一定检查一下数据、特征、模型等处理环节是否有bug;
    考虑模型Underfitting和Qverfitting,针对性地优化。



发现文章有错误、对内容有疑问,都可以关注美团点评技术团队微信公众号(meituantech),在后台给我们留言。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!

公众号二维码

标签:训练,实例,Level,特征,解决问题,模型,详解,DEAL,数据
来源: https://blog.51cto.com/u_15197658/2768669