asp.net建立网站吗,网站维护中,大连网站seo顾问,南通江苏网站建设原文 http://tech.meituan.com/mt-mlinaction-how-to-ml.html 前言
前言
随着大数据时代的到来#xff0c;机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界#xff0c;机器学习都是一个炙手可热的方向#xff0c;但是学术界和工业界对机器学习的研究…原文 http://tech.meituan.com/mt-mlinaction-how-to-ml.html 前言
前言
随着大数据时代的到来机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界机器学习都是一个炙手可热的方向但是学术界和工业界对机器学习的研究各有侧重学术界侧重于对机器学习理论的研究工业界侧重于如何用机器学习来解决实际问题。我们结合美团在机器学习上的实践进行一 个实战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
模型是机器学习中的一个重要概念简单的讲指特征空间到输出空间的映射一般由模型的假设函数和参数w组成下面公式就是Logistic Regression模型的一种表达在训练模型的章节做稍详细的解释一个模型的假设空间hypothesis space指给定模型所有可能w对应的输出空间组成的集合。工业界常用的模型有Logistic Regression简称LR、Gradient Boosting Decision Tree简称GBDT、Support Vector Machine简称SVM、Deep Neural Network简称DNN等。 实例详解机器学习如何解决问题 模型训练就是基于训练数据获得一组参数w使得特定目标最优即获得了特征空间到输出空间的最优映射具体怎么实现见训练模型章节。
为什么要用机器学习解决问题
目前处于大数据时代到处都有成T成P的数据简单规则处理难以发挥这些数据的价值 廉价的高性能计算使得基于大规模数据的学习时间和代价降低 廉价的大规模存储使得能够更快地和代价更小地处理大规模数据 存在大量高价值的问题使得花大量精力用机器学习解决问题后能获得丰厚收益。
机器学习应该用于解决什么问题
目标问题需要价值巨大因为机器学习解决问题有一定的代价 目标问题有大量数据可用有大量数据才能使机器学习比较好地解决问题相对于简单规则或人工 目标问题由多种因素特征决定机器学习解决问题的优势才能体现相对于简单规则或人工 目标问题需要持续优化因为机器学习可以基于数据自我学习和迭代持续地发挥价值。
对问题建模
本文以DEAL团购单交易额预估问题为例就是预估一个给定DEAL一段时间内卖了多少钱介绍使用机器学习如何解决问题。首先需要
收集问题的资料理解问题成为这个问题的专家 拆解问题简化问题将问题转化机器可预估的问题。 深入理解和分析DEAL交易额后可以将它分解为如下图的几个问题 实例详解机器学习如何解决问题
单个模型多个模型如何来选择
按照上图进行拆解后预估DEAL交易额就有2种可能模式一种是直接预估交易额另一种是预估各子问题如建立一个用户数模型和建立一个访购率模型访问这个DEAL的用户会购买的单子数再基于这些子问题的预估值计算交易额。
不同方式有不同优缺点具体如下 模式 缺点 优点 单模型 1. 预估难度大2. 风险比较高 1. 理论上可以获得最优预估实际上很难2. 一次解决问题 多模型 1. 可能产生积累误差2. 训练和应用成本高 1. 单个子模型更容易实现比较准地预估2. 可以调整子模型的融合方式以达到最佳效果 选择哪种模式
1问题可预估的难度难度大则考虑用多模型
2问题本身的重要性问题很重要则考虑用多模型
3多个模型的关系是否明确关系明确则可以用多模型。
如果采用多模型如何融合可以根据问题的特点和要求进行线性融合或进行复杂的融合。以本文问题为例至少可以有如下两种 实例详解机器学习如何解决问题
模型选择
对于DEAL交易额这个问题我们认为直接预估难度很大希望拆成子问题进行预估即多模型模式。那样就需要建立用户数模型和访购率模型因为机器学习解决问题的方式类似下文只以访购率模型为例。要解决访购率问题首先要选择模型我们有如下的一些考虑
主要考虑
1选择与业务目标一致的模型
2选择与训练数据和特征相符的模型。
训练数据少High Level特征多则使用“复杂”的非线性模型流行的GBDT、Random Forest等 训练数据很大量Low Level特征多则使用“简单”的线性模型流行的LR、Linear-SVM等。 补充考虑
1当前模型是否被工业界广泛使用
2当前模型是否有比较成熟的开源工具包公司内或公司外
3当前工具包能够的处理数据量能否满足要求
4自己对当前模型理论是否了解是否之前用过该模型解决问题。
为实际问题选择模型需要转化问题的业务目标为模型评价目标转化模型评价目标为模型优化目标根据业务的不同目标选择合适的模型具体关系如下
实例详解机器学习如何解决问题
通常来讲预估真实数值回归、大小顺序排序、目标所在的正确区间分类的难度从大到小根据应用所需尽可能选择难度小的目标进行。 对于访购率预估的应用目标来说我们至少需要知道大小顺序或真实数值所以我们可以选择Area Under CurveAUC或Mean Absolute ErrorMAE作为评估目标以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销量生命周期 保持分布一致 考虑不同城市、不同商圈、不同品类的差别 保持分布一致。
抽取特征
完成数据筛选和清洗后就需要对数据抽取特征就是完成输入空间到特征空间的转换见下图。针对线性模型或非线性模型需要进行不同特征抽取线性模型需要更多特征抽取工作和技巧而非线性模型对特征抽取要求相对较低。
实例详解机器学习如何解决问题
通常特征可以分为High Level与Low LevelHigh 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 属于POIALow Level feature访购率高 如果DEALx 人均50以下High Level feature访购率高。 所以总体上Low Level 比较有针对性单个特征覆盖面小含有这个特征的数据不多特征数量维度很大。High Level比较泛化单个特征覆盖面大含有这个特征的数据很多特征数量维度不大。长尾样本的预测值主要受High Level特征影响。高频样本的预测值主要受Low Level特征影响。
对于访购率问题有大量的High Level或Low Level的特征其中一些展示在下图
实例详解机器学习如何解决问题
非线性模型的特征
1可以主要使用High Level特征因为计算复杂度大所以特征维度不宜太高
2通过High Level非线性映射可以比较好地拟合目标。
线性模型的特征
1特征体系要尽可能全面High Level和Low Level都要有
2可以将High Level转换Low Level以提升模型的拟合能力。
特征归一化
特征抽取后如果不同特征的取值范围相差很大最好对特征进行归一化以取得更好的效果常见的归一化方式如下
Rescaling
归一化到[0,1] 或 [-11]用类似方式
实例详解机器学习如何解决问题 Standardization
设 为x分布的均值 为x分布的标准差
Scaling to unit length
归一化到单位长度向量
特征选择
特征抽取和归一化之后如果发现特征太多导致模型无法训练或很容易导致模型过拟合则需要对特征进行选择挑选有价值的特征。
Filter假设特征子集对模型预估的影响互相独立选择一个特征子集分析该子集和数据Label的关系如果存在某种正相关则认为该特征子集有效。衡量特征子集和数据Label关系的算法有很多如Chi-squareInformation Gain。
Wrapper选择一个特征子集加入原有特征集合用模型进行训练比较子集加入前后的效果如果效果变好则认为该特征子集有效否则认为无效。
Embedded将特征选择和模型训练结合起来如在损失函数中加入L1 Norm L2 Norm。
训练模型
完成特征抽取和处理后就可以开始模型训练了下文以简单且常用的Logistic Regression模型下称LR模型为例进行简单介绍。
设有m个x,y训练数据其中x为特征向量y为label w为模型中参数向量即模型训练中需要学习的对象。
所谓训练模型就是选定假说函数和损失函数基于已有训练数据x,y不断调整w使得损失函数最优相应的w就是最终学习结果也就得到相应的模型。
模型函数
1假说函数即假设x和y存在一种函数关系
2损失函数基于上述假设函数构建模型损失函数优化目标在LR中通常以x,y的最大似然估计为目标
优化算法
梯度下降Gradient Descent
即w沿着损失函数的负梯度方向进行调整示意图见下图 的梯度即一阶导数见下式梯度下降有多种类型如随机梯度下降或批量梯度下降。
随机梯度下降Stochastic Gradient Descent每一步随机选择一个样本 计算相应的梯度并完成w的更新如下式
批量梯度下降Batch Gradient Descent,每一步都计算训练数据中的所有样本对应的梯度w沿着这个梯度方向迭代即
牛顿法Newton’s Method
牛顿法的基本思想是在极小点附近通过对目标函数做二阶Taylor展开进而找到L(w)的极小点的估计值。形象地讲在w k 处做切线该切线与L(w)0的交点即为下一个迭代点w k1 示意图如下。w的更新公式如下其中目标函数的二阶偏导数即为大名鼎鼎的Hessian矩阵。
拟牛顿法Quasi-Newton Methods计算目标函数的二阶偏导数难度较大更为复杂的是目标函数的Hessian矩阵无法保持正定不用二阶偏导数而构造出可以近似Hessian矩阵的逆的正定对称阵从而在”拟牛顿”的条件下优化目标函数。
BFGS 使用BFGS公式对H(w)进行近似内存中需要放H(w),内存需要O(m 2 )级别
L-BFGS存储有限次数如k次的更新矩阵 用这些更新矩阵生成新的H(w),内存降至O(m)级别
OWLQN: 如果在目标函数中引入L1正则化需要引入虚梯度来解决目标函数不可导问题OWLQN就是用来解决这个问题。
Coordinate Descent
对于w每次迭代固定其他维度不变只对其一个维度进行搜索确定最优下降方向示意图如下公式表达如下
优化模型
经过上文提到的数据筛选和清洗、特征设计和选择、模型训练就得到了一个模型但是如果发现效果不好怎么办
【首先】
反思目标是否可预估数据和特征是否存在bug。
【然后】
分析一下模型是Overfitting还是Underfitting从数据、特征和模型等环节做针对性优化。
Underfitting Overfitting
所谓Underfitting即模型没有学到数据内在关系如下图左一所示产生分类面不能很好的区分X和O两类数据产生的深层原因就是模 型假设空间太小或者模型假设空间偏离。所谓Overfitting即模型过渡拟合了训练数据的内在关系如下图右一所示产生分类面过好地区分X和O两 类数据而真实分类面可能并不是这样以至于在非训练数据上表现不好产生的深层原因是巨大的模型假设空间与稀疏的数据之间的矛盾。
在实战中可以基于模型在训练集和测试集上的表现来确定当前模型到底是Underfitting还是Overfitting判断方式如下表
训练集表现 测试集表现 问题 期望目标值 期望目标值 Underfitting 期望目标值 接近或略逊于训练集 合适 期望目标值 远差于训练集 Overfitting ** 怎么解决Underfitting和Overfitting问题
** 问题 数据 特征 模型 Underfitting 清洗数据 1. 增加特征2. 删除噪音特征 1. 调低正则项的惩罚参数 2. 换更“复杂”的模型如把线性模型换为非线性模型 3. 多个模型级联或组合 Overfitting 增加数据 1. 进行特征选择 2. 降维如对特征进行聚类、主题模型进行处理等 1. 提高正则项的惩罚参数 2. 减少训练迭代次数 3. 换更“简单”的模型如把非线性模型换为线性模型
总结
综上所述机器学习解决问题涉及到问题建模、准备训练数据、抽取特征、训练模型和优化模型等关键环节有如下要点
理解业务分解业务目标规划模型可预估的路线图。 数据 y数据尽可能真实客观 训练集/测试集分布与线上应用环境的数据分布尽可能一致。 特征 利用Domain Knowledge进行特征抽取和选择 针对不同类型的模型设计不同的特征。 模型 针对不同业务目标、不同数据和特征选择不同的模型 如果模型不符合预期一定检查一下数据、特征、模型等处理环节是否有bug 考虑模型Underfitting和Qverfitting针对性地优化。