十年网站开发经验+多家企业客户+靠谱的建站团队
量身定制+运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“如何对网站进行数据挖掘”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
###什么是机器学习?随着机器学习在实际工业领域中不断获得应用,这个词已经被赋予了各种不同含义。在本文中的“机器学习”含义与wikipedia上的解释比较契合,如下:Machinelearningisascientificdisciplinethatdealswiththeconstructionandstudyofalgorithmsthatcanlearnfromdata.
机器学习可以分为无监督学习(unsupervisedlearning)和有监督学习(supervisedlearning),在工业界中,有监督学习是更常见和更有价值的方式,下文中主要以这种方式展开介绍。如下图中所示,有监督的机器学习在解决实际问题时,有两个流程,一个是离线训练流程(蓝色箭头),包含数据筛选和清洗、特征抽取、模型训练和优化模型等环节;另一个流程则是应用流程(绿色箭头),对需要预估的数据,抽取特征,应用离线训练得到的模型进行预估,获得预估值作用在实际产品中。在这两个流程中,离线训练是最有技术挑战的工作(在线预估流程很多工作可以复用离线训练流程的工作),所以下文主要介绍离线训练流程。
###什么是模型(model)?模型,是机器学习中的一个重要概念,简单的讲,指特征空间到输出空间的映射;一般由模型的假设函数和参数w组成(下面公式就是LogisticRegression模型的一种表达,在训练模型的章节做稍详细的解释);一个模型的假设空间(hypothesisspace),指给定模型所有可能w对应的输出空间组成的集合。工业界常用的模型有LogisticRegression(简称LR)、GradientBoostingDecisionTree(简称GBDT)、SupportVectorMachine(简称SVM)、DeepNeuralNetwork(简称DNN)等。
模型训练就是基于训练数据,获得一组参数w,使得特定目标最优,即获得了特征空间到输出空间的最优映射,具体怎么实现,见训练模型章节。
###为什么要用机器学习解决问题?
###机器学习应该用于解决什么问题?
收集问题的资料,理解问题,成为这个问题的专家;拆解问题,简化问题,将问题转化机器可预估的问题。深入理解和分析DEAL交易额后,可以将它分解为如下图的几个问题:
###单个模型?多个模型?如何来选择?按照上图进行拆解后,预估DEAL交易额就有2种可能模式,一种是直接预估交易额;另一种是预估各子问题,如建立一个用户数模型和建立一个访购率模型(访问这个DEAL的用户会购买的单子数),再基于这些子问题的预估值计算交易额。
不同方式有不同优缺点,具体如下:
选择哪种模式?1)问题可预估的难度,难度大,则考虑用多模型;2)问题本身的重要性,问题很重要,则考虑用多模型;3)多个模型的关系是否明确,关系明确,则可以用多模型。
如果采用多模型,如何融合?可以根据问题的特点和要求进行线性融合,或进行复杂的融合。以本文问题为例,至少可以有如下两种:
###模型选择对于DEAL交易额这个问题,我们认为直接预估难度很大,希望拆成子问题进行预估,即多模型模式。那样就需要建立用户数模型和访购率模型,因为机器学习解决问题的方式类似,下文只以访购率模型为例。要解决访购率问题,首先要选择模型,我们有如下的一些考虑:
主要考虑1)选择与业务目标一致的模型;2)选择与训练数据和特征相符的模型。
训练数据少,HighLevel特征多,则使用“复杂”的非线性模型(流行的GBDT、RandomForest等);训练数据很大量,LowLevel特征多,则使用“简单”的线性模型(流行的LR、Linear-SVM等)。
补充考虑1)当前模型是否被工业界广泛使用;2)当前模型是否有比较成熟的开源工具包(公司内或公司外);3)当前工具包能够的处理数据量能否满足要求;4)自己对当前模型理论是否了解,是否之前用过该模型解决问题。为实际问题选择模型,需要转化问题的业务目标为模型评价目标,转化模型评价目标为模型优化目标;根据业务的不同目标,选择合适的模型,具体关系如下:
通常来讲,预估真实数值(回归)、大小顺序(排序)、目标所在的正确区间(分类)的难度从大到小,根据应用所需,尽可能选择难度小的目标进行。对于访购率预估的应用目标来说,我们至少需要知道大小顺序或真实数值,所以我们可以选择AreaUnderCurve(AUC)或MeanAbsoluteError(MAE)作为评估目标,以Maximumlikelihood为模型损失函数(即优化目标)。综上所述,我们选择spark版本GBDT或LR,主要基于如下考虑:1)可以解决排序或回归问题;2)我们自己实现了算法,经常使用,效果很好;3)支持海量数据;4)工业界广泛使用。
准备训练数据深入理解问题,针对问题选择了相应的模型后,接下来则需要准备数据;数据是机器学习解决问题的根本,数据选择不对,则问题不可能被解决,所以准备训练数据需要格外的小心和注意:
###注意点:
待解决问题的数据本身的分布尽量一致;训练集/测试集分布与线上预测环境的数据分布尽可能一致,这里的分布是指(x,y)的分布,不仅仅是y的分布;y数据噪音尽可能小,尽量剔除y有噪音的数据;非必要不做采样,采样常常可能使实际数据分布发生变化,但是如果数据太大无法训练或者正负比例严重失调(如超过100:1),则需要采样解决。
###常见问题及解决办法
###访购率问题的训练数据
抽取特征完成数据筛选和清洗后,就需要对数据抽取特征,就是完成输入空间到特征空间的转换(见下图)。针对线性模型或非线性模型需要进行不同特征抽取,线性模型需要更多特征抽取工作和技巧,而非线性模型对特征抽取要求相对较低。
通常,特征可以分为HighLevel与LowLevel,HighLevel指含义比较泛的特征,LowLevel指含义比较特定的特征,举例来说:
DEALA1属于POIA,人均50以下,访购率高;DEALA2属于POIA,人均50以上,访购率高;DEALB1属于POIB,人均50以下,访购率高;DEALB2属于POIB,人均50以上,访购率底;基于上面的数据,可以抽到两种特征,POI(门店)或人均消费;POI特征则是LowLevel特征,人均消费则是HighLevel特征;假设模型通过学习,获得如下预估:
如果DEALx属于POIA(LowLevelfeature),访购率高;如果DEALx人均50以下(HighLevelfeature),访购率高。所以,总体上,LowLevel比较有针对性,单个特征覆盖面小(含有这个特征的数据不多),特征数量(维度)很大。HighLevel比较泛化,单个特征覆盖面大(含有这个特征的数据很多),特征数量(维度)不大。长尾样本的预测值主要受HighLevel特征影响。高频样本的预测值主要受LowLevel特征影响。
对于访购率问题,有大量的HighLevel或LowLevel的特征,其中一些展示在下图:
非线性模型的特征1)可以主要使用HighLevel特征,因为计算复杂度大,所以特征维度不宜太高;2)通过HighLevel非线性映射可以比较好地拟合目标。线性模型的特征1)特征体系要尽可能全面,HighLevel和LowLevel都要有;2)可以将HighLevel转换LowLevel,以提升模型的拟合能力。###特征归一化特征抽取后,如果不同特征的取值范围相差很大,最好对特征进行归一化,以取得更好的效果,常见的归一化方式如下:
Rescaling:归一化到[0,1]或[-1,1],用类似方式:
Standardization:设为x分布的均值,为x分布的标准差;
Scalingtounitlength:归一化到单位长度向量
###特征选择特征抽取和归一化之后,如果发现特征太多,导致模型无法训练,或很容易导致模型过拟合,则需要对特征进行选择,挑选有价值的特征。
;w为模型中参数向量,即模型训练中需要学习的对象。所谓训练模型,就是选定假说函数和损失函数,基于已有训练数据(x,y),不断调整w,使得损失函数最优,相应的w就是最终学习结果,也就得到相应的模型。
###模型函数1)假说函数,即假设x和y存在一种函数关系:
2)损失函数,基于上述假设函数,构建模型损失函数(优化目标),在LR中通常以(x,y)的最大似然估计为目标:
###优化算法
梯度下降(GradientDescent)即w沿着损失函数的负梯度方向进行调整,示意图见下图,的梯度即一阶导数(见下式),梯度下降有多种类型,如随机梯度下降或批量梯度下降。
随机梯度下降(StochasticGradientDescent),每一步随机选择一个样本,计算相应的梯度,并完成w的更新,如下式,
批量梯度下降(BatchGradientDescent),每一步都计算训练数据中的所有样本对应的梯度,w沿着这个梯度方向迭代,即
牛顿法(Newton’sMethod)牛顿法的基本思想是在极小点附近通过对目标函数做二阶Taylor展开,进而找到L(w)的极小点的估计值。形象地讲,在wk处做切线,该切线与L(w)=0的交点即为下一个迭代点wk+1(示意图如下)。w的更新公式如下,其中目标函数的二阶偏导数,即为大名鼎鼎的Hessian矩阵。
拟牛顿法(Quasi-NewtonMethods):计算目标函数的二阶偏导数,难度较大,更为复杂的是目标函数的Hessian矩阵无法保持正定;不用二阶偏导数而构造出可以近似Hessian矩阵的逆的正定对称阵,从而在"拟牛顿"的条件下优化目标函数。BFGS:使用BFGS公式对H(w)进行近似,内存中需要放H(w),内存需要O(m2)级别;L-BFGS:存储有限次数(如k次)的更新矩阵
,用这些更新矩阵生成新的H(w),内存降至O(m)级别;OWLQN:如果在目标函数中引入L1正则化,需要引入虚梯度来解决目标函数不可导问题,OWLQN就是用来解决这个问题。
CoordinateDescent对于w,每次迭代,固定其他维度不变,只对其一个维度进行搜索,确定最优下降方向(示意图如下),公式表达如下:
优化模型经过上文提到的数据筛选和清洗、特征设计和选择、模型训练,就得到了一个模型,但是如果发现效果不好?怎么办?【首先】反思目标是否可预估,数据和特征是否存在bug。【然后】分析一下模型是Overfitting还是Underfitting,从数据、特征和模型等环节做针对性优化。
###Underfitting&Overfitting所谓Underfitting,即模型没有学到数据内在关系,如下图左一所示,产生分类面不能很好的区分X和O两类数据;产生的深层原因,就是模型假设空间太小或者模型假设空间偏离。所谓Overfitting,即模型过渡拟合了训练数据的内在关系,如下图右一所示,产生分类面过好地区分X和O两类数据,而真实分类面可能并不是这样,以至于在非训练数据上表现不好;产生的深层原因,是巨大的模型假设空间与稀疏的数据之间的矛盾。
在实战中,可以基于模型在训练集和测试集上的表现来确定当前模型到底是Underfitting还是Overfitting,判断方式如下表: