个性化推荐系统是大观数据在金融、电商、媒体、直播等行业的主要产品之一。在大观数据的个性化推荐系统架构中,可以简单分为五层。每层处理相应的数据并输出到下一层。它们是:数据处理层是推荐系统末端的数据处理层,主要作用是先对客户上传的一些无用噪声数据进行清洗过滤,将推荐系统需要的数据导入到数据存储中层;数据存储层一般将item数据存储在Mysql中,与Mysql的扩展性相比,HBase和Hive对于数据量越来越大的item数据是更好的选择。Hive可以方便离线分析操作。对于实时性模块,以及一些与进程同步相关的模块,如果对实时性要求比较高,redis可以派上用场。作为缓存,将生产者的生产数据写入redis,供消费者读取;生成候选集,通过协同过滤、content-base、点击反馈、热门数据等一系列基础算法,为每个用户生成个性化的候选集;融合候选集按照一系列规则对各个算法生成的候选集中的项进行融合过滤。重排序是将融合过滤后的项集按照一定的算法重新排序,并将排序后的结果输出给用户。这里常用机器学习相关的模型和算法,比如LR和GBDT。本文将重点介绍在重排序中使用的集成学习算法(EnsembleMethod)。集成学习概述集成学习算法本身并不是一个单独的机器学习算法,而是通过构建和组合多个机器学习器来完成学习任务。可以说是百家争鸣,在机器学习算法上可以有很高的准确率。缺点是模型的训练过程可能比较复杂,效率不是很高。目前常见的集成学习算法主要有两种:基于Bagging的算法和基于Boosting的算法。基于Bagging的代表算法是随机森林,而基于Boosting的代表算法有Adaboost、GBDT、XGBOOST等。基于Bagging的算法Bagging算法(装袋法)是bootstrapaggregating的简称。它主要是对样本训练集进行随机抽样,通过反复抽样训练出新的模型,最后在这些模型的基础上取平均。基本思想1.给定一个弱学习算法和一个训练集;2、单一的弱学习算法准确率不高;3.多次使用学习算法得到一个预测函数序列并进行投票;4.***结果的准确性将会提高。以随机森林为例详细解释随机森林的基本原理随机森林是由LeoBreiman(2001)提出的,从原始训练样本集N中反复随机抽取k个样本有放回生成新的训练样本集,然后根据自助样本集生成新的训练样本集K个分类树组成随机森林,新数据的分类结果取决于分类树得票数形成的分数。其实质是对决策树算法的改进。多个决策树合并在一起。每棵树的建立依赖于一个独立抽取的样本。森林中的每棵树都有相同的分布,分类误差取决于每棵决策树。一棵树的分类能力以及它们之间的相关性。特征选择采用随机的方式分裂每个节点,然后比较不同情况下产生的误差。可以检测到的内在估计误差、分类能力和相关性决定了要选择的特征数量。单棵树的分类能力可能很小,但是在随机生成大量决策树后,测试样本可以通过统计每棵树的分类结果来选择最可能的分类。随机森林算法流程1、从训练数据中选取n个数据作为训练数据输入。一般n远小于整体训练数据N,会造成部分数据不可用。这部分数据称为袋外数据,袋外数据可用于误差估计。2.选择输入训练数据后,需要构建决策树。具体方法是每个分裂节点从整体特征集M中选取m个特征进行构造。一般m远小于M。3.在构建每棵决策树的过程中,决策树的构建是根据分裂节点的选择,通过选择最小的Gini指数来进行的。决策树的其他节点按照相同的分裂规则构建,直到该节点的所有训练样本都属于同一类或达到树的最大深度。4.多次重复步骤2和3,每一个输入数据对应一棵决策树,这样就得到了一个随机森林,可以用来对预测数据进行决策。5.输入的训练数据已经选择好,构建了多棵决策树,对预测数据进行预测。比如输入一个待预测的数据,然后多个决策树同时进行决策,最后采用多数表决的方式进行类别决策。RandomForestNote1.在构建决策树的过程中不需要剪枝。2.整个森林的树木数量和每棵树的特性需要手动设置。3.在构建决策树时,分裂节点的选择是根据基尼系数最小的。提升算法(Boosting)是一种常用且有效的统计学习算法,属于迭代算法。它使用一个弱学习器来弥补之前弱学习器的“不足”,从而串行构造一个相对弱的学习器。一个stronglearner,这个stronglearner可以让目标函数值足够小。基本思想1.首先给每个训练样本相同的概率;2.然后进行T次迭代。在每次迭代后,增加误分类样本的权重(重采样),以便在下一次迭代中更多地关注这些样本。.Boosting系列算法中最流行的算法主要有AdaBoost算法和boosting树系列算法。提升树系列中使用最广泛的算法是梯度提升树(GradientBoostingTree)。以AdaBoost算法为代表算法,对基本原理进行详细讲解。Adaboost(adaptiveboosting:boosting+单层决策树)是boosting中的代表算法。基本思想是通过训练数据的分布构造一个分类器,然后利用错误率找到这个如果通过更新训练数据的分布来更新弱分类器的权值,迭代进行,直到迭代次数为达到或损失函数小于某个阈值。假设训练数据集是算法过程Bagging和Boosting算法的异同Bagging算法和Boosting算法的核心是将一系列弱学习器算法按照特定的组合策略组合成一个强学习器的过程。两者的区别在于以下几点:1.样本选择:Bagging:训练集是在原始集中有放回地选取的,从原始集中选取的每一轮训练集都是独立的。一轮的训练集不变,但训练集中分类器中每个样本的权重发生变化。根据上一轮的分类结果调整权重。2.样本权重:Bagging:采用均匀采样,每个样本的权重相等。Boosting:根据错误率不断调整样本的权重。错误率越大,权重越大。3.预测函数:Bagging:所有预测函数具有相同的权重。Boosting:每个弱分类器都有对应的权重,分类误差小的分类器会有更大的权重。4.并行计算:Bagging:每个预测函数可以并行生成。Boosting:每个预测函数只能顺序生成,因为后面的模型参数需要上一轮模型的结果。集成学习的组合策略上面部分我们主要关注学习器本身,不涉及学习器之间的组合策略。本节主要介绍常用的组合策略,主要包括平均法、投票法和学习法。平均法对于数值类的回归预测问题,通常采用的组合策略是平均法,即将几个较弱的学习器的输出进行平均,得到最终的预测输出。最简单的平均就是算术平均,也就是说最后的预测就是投票法。学习方法前两节中的方法是对弱学习器的结果进行平均或投票。比较简单,但是学习误差可能比较大,所以就有了learningmethod的方法,对于学习方法来说,代表性的方法就是stacking。在使用stacking的组合策略时,不是对弱学习器的结果做简单的逻辑处理,而是增加一层学习器,即Say,我们将训练集弱学习器的学习结果作为输入,输出为训练集作为输出,再训练一个学习器得到最终结果。在这种情况下,我们将弱学习器称为初级学习器,将用于组合的学习器称为次级学习器。对于测试集,我们先用primarylearner预测一次得到secondarylearner的输入样本,然后用secondarylearner预测一次得到最终的预测结果。综上所述,Bagging和Boosting都是将几个分类器集成到一个分类器中的集成学习方法,只是集成方式不同,最终得到的效果也不同。下面是决策树结合这些算法框架得到的新算法:1.Bagging+决策树=随机森林2.AdaBoost+决策树=boostingtree3.GradientBoosting+决策树=GBDT其中GBDT在大观数据中个性化推荐重排序层得到很好的应用。作者:陈祥龙大观数据挖掘工程师,毕业于复旦大学计算机科学与技术专业,现主要负责大型私有化推荐项目部署。【本文为专栏作者“大观数据”原创稿件,如需转载可通过专栏取得联系】点此查看该作者更多好文
