推荐系统三十六式学习笔记:原理篇.模型融合13|经典模型融合办法:线性模型和树模型的组合拳

目录

  • 为什么要融合?
  • “辑度组合”原理
    • 逻辑回归
    • 梯度提升决策树GBDT
    • 二者结合
  • 总结

推荐系统在技术实现上一般划分为三个阶段:挖掘、召回、排序 。

为什么要融合?

挖掘的工作是对用户和物品做非常深入的结构化分析,各个角度各个层面的特征都被呈现出来,并且建好索引,供召回阶段使用,大部分挖掘工作都是离线进行的。

接下来是召回,为什么是召回呢?因为物品太多了,每一次给一个用户计算推荐结果时,如果对全部物品挨个计算,那将是一场灾难,取而代之的是用一些手段从全量的物品中筛选出一部分比较靠谱的。

最后是排序,针对筛选出的一部分靠谱的做一个人统一的按资排辈,最后这一个统一的排序就是今天要讲的主题:融合。

在这里插入图片描述
什么要融合呢?这个还需要回到召回阶段,看这个阶段到底发生了什么?

在召回阶段,其实就是很多推荐算法,比如基于内容的推荐,协同过滤或矩阵分解等等,每一种土建算法都会产生一批推荐结果,一般还附带给每个结果产生一个推荐分数。

于是问题来了,这些不同的算法产生的推荐分数,最后要一起排个先后,难道依据各自的分数吗?
这样是不行的,有如下几个原因:
1、有的算法可能只给出结果,不给分数,比如用决策树产生一些推荐结果;
2、每种算法给出结果时如果有分数,分数范围不一定一样,所以不能相互比较;
3、即时强行把所有分数都做归一化,仍然不能相互比较,因为产生机制不同,有的可能普遍偏高,有的可能普遍偏低。

举一个例子,比如江苏的考生江苏卷考进清华,北京的考生北京卷考进清华,河南的考生全国卷考进清华,他们都是学霸,可是我如何从中选择出学霸中的学霸呢?很简单,来一次入学统一考试就可以了。这个入学考试就是模型融合。也就是说,不同的算法只负责推举出候选结果,真正最终是否推荐给用户,由另一个统一的模型说了算,这个就叫做模型的融合。

模型的融合除了统一规范,还有集中提升效果的作用。在机器学习中,有专门为融合而生的集成学习思想。

今天要讲的典型的模型融合方案是:逻辑回归和梯度提升决策树组合,我可以给它取个名字“辑度组合”。

“辑度组合”原理

在推荐系统的模型融合阶段,就要以产品目标为导向。举个简单的例子,信息流推荐,如果以提高CTR为目标,则融合模型就要把预估CTR作为本职工作,可以选用逻辑回归。

逻辑回归

CTR预估就是在推荐一个物品之前,预估一下用户点击它的概率有多大,再根据这个预估的点击对物品排序输出。

逻辑回归常常被选择来执行这个任务,它的输出范围就是从0到1之间,刚好满足点击预估的输出,这是一个基础。因为逻辑回归是广义线性模型,相比于传统线性模型,在线性模型基础上增加了sigmoid函数。

逻辑回归如何做CTR预估呢?先看一下计算CTR预估时,需要的两个东西:
1.特征; 2.权重

第一个是特征,就是向量化的把一个用户和物品成对组合展示出来;第二个是权重,每一个特征都有一个权重,权重就是特征的话事权,每个特征的权重不一样,对最终计算CTR影响有大有小。

有了特征,它是一个向量,假如把它叫做x,还有特征的权重,也是一个维度和特征一样的向量,假如叫做w。我们通过对x和w做点积计算,就得到一个传统的线性模型的输出,再用一个sigmoid函数对这个值做一个变换,就得到一个0到1之间的值,也就是预估的CTR。
sigmoid 函数:
σ ( w , x ) = 1 1 + e ( − w ∗ x ) σ(w,x) =\frac{1}{1+e^{(-w * x)}} σ(w,x)=1+e(wx)1

在这里插入图片描述
要做的就是两件事;搞特征,学权重。前者占据更多时间。特征在很多领域都是布尔取值,比如搜索广告,只有出现和不出现两种。还有一些特征是实数取值,很多场景下可以把他划分成多个区间段,也变成了布尔取值。除此之外,逻辑回归是广义线性回归,所谓广义是因为加了sigmoid函数,很多非线性关系它也无能为力。

特征可以组合,有二阶组合,还有三阶组合,特征组合的难点在于:组合数目非常庞大,而且并不是所有组合都有效,只有少数组合有效。
需要不断从数据中发现新的、有效的特征及特征组合。

特征工程+线性模型,是模型融合、CTR预估等居家旅行必备。

权重的学习主要看两个方面:损失函数的最小化,就是模型的偏差是否足够小;另一个就是模型的正则化,就是看模型的方差是否足够小;
除了要学习出偏差和方差都较小的模型,还需要给工程留有余地,具体来说有两点:一个是希望越多权重为0越好,权重为0称为稀疏,可以减小计算复杂度。

另一个是希望能够在线学习这些权重,后台源源不断地更新权重。要学习逻辑逻辑回归的权重,经典的方法如梯度下降一类,尤其是随机梯度下降,可以实现在实时数据流情形下,更新逻辑回归的权重,每一个样本更新一次。

但随机梯度下降为人诟病的是很难得到稀疏的模型,效果收敛也很慢。后来,google在2013年发表了新的学习算法:FTRL,一种结合了L1正则和L2正则的在线优化算法,现在基本都采用这个算法。

梯度提升决策树GBDT

特征组合又能有效表达出数据中的非线性事实,可以通过树模型提高效率。树模型天然就可以肩负起特征组合的任务,从第一个问题开始,也就是树的根节点,到最后得到答案,也就是叶子节点,这一路径下来就是若干个特征的组合。

树模型最开始的是决策树,简称DT,实践发现,把“多个表现”略好于“随机乱猜”的模型以某种方式集成在一起往往出奇效,所以就是说树模型的集成模型。最常见的就是说随机森林,简称RF,和梯度提升树,简称GBDT。

梯度提升树,可以分为两部分,一个是GB,一个是DT.GB是得到集成模型的方案,沿着残差梯度下降的方向构建新的子模型,而DT就是指构建子模型要用的决策树。

举例:

在这里插入图片描述
现在有个任务是根据是否喜欢养花,喜欢打游戏,喜欢帽子来预测年龄,模型就是梯度提升决策树GBDT。假设我们设定好每个子树只有一层,那么三个特征各自按照取值都可以构成
两分支的小树枝。
树根节点为:是否喜欢养花,左分支是不喜欢,被划分进去的样本有13,14,15,35;右边是喜欢,被划分进去的样本有25,49,68,71,73。左边的样本均值是19.25,右边样本均值是57.2。
树根节点为:是否喜欢游戏,左分支是不喜欢,被划分进去的样本有49,71,73;右边是喜欢,被划分进去的样本有13,14,15,25,35,68。左边的均值是64,右边的均值是28.3。
树根节点为:是否喜欢帽子,左分支是不喜欢,被划分进去的样本有14,15,49,71;右边是喜欢,被划分进去的样本有13,25,35,68,73。左边的均值是37.25,右边的均值是42.8。

叶子节点上都是被划分进去的样本年龄均值,也就是预测值。这里是看哪个树让残差减小最多,分别拿三个方案取预测每个样本,统计累积的误差平方和,三个分别是1993.55,2602,5007.95,
于是显然第一颗树的预测结果较好,所以GBDT第一颗树胜出。
接下来第二棵树如何生成呢?GBDT用上一棵树取预测所有样本,得到每一个样本的残差,下一棵树不是去拟合样本的目标值,而是去拟合上一颗树的残差。这里,就是去拟合下面这个表格:
在这里插入图片描述

新一轮构建树的过程以最后一列残差为目标。构建过程这里不再赘述,得到第二颗树。如此不断在上一次建树的残差基础上构建新树,直到满足条件后停止。

在得到所有这些树后,真正使用时,是将它们的预测结果相加作为最终输出结果。这就是GBDT的简单举例。

这里有几个问题:
第一个,上面的例子是回归问题,如何将它用来做分类呢?那就是把损失函数从上面的误差平方和换成适合分类的损失函数,比如对数损失函数。更新时按照梯度方向即可,上面的误差平方和的梯度就刚好是
残差。对于CTR预估这样的二分类任务,可以将损失函数定义为:
− y l o g p − ( 1 − y ) l o g ( 1 − p ) -ylog p - (1-y)log(1-p) ylogp(1y)log(1p)

第二个,通常还需要考虑防止过拟合,也就是损失函数汇总需要增加正则项,正则化的方法一般是:限制总的树个数,树的深度,以及叶子节点的权重大小。
第三个,构建每一颗树时,如果遇到实数值的特征,还需要将其分裂成若干区间,分裂指标有很多,可以参考xgboost中的计算分裂点收益,也可以参考决策树所用的信息增益。

二者结合

前面介绍了逻辑回归LR,以及梯度提升决策树GBDT的原理。实际上可以将两者结合在一起,用于做模型融合阶段的CTR预估。这是Facebook在其广告系统中使用的方法,其中GBDT的任务就是产生高阶特征组合;

具体做法是:GBDT产生了N棵树,一条样本来了后,在每一颗树上都会从根节点走到叶子节点,到了叶子节点后,就是1或者0.把每棵树的输出结果看成是一个组合特征,取值为0或者1,一共N颗树,每棵树i有Mi个叶子就相当于有M种组合,一棵树对应一个one-hot(独热)编码方式,一共就有 ∑ i = 1 N M i \sum_{i=1}^N{M_i} i=1NMi个维度的新特征,作为输入向量进入LR模型,输出最终的结果。

在这里插入图片描述
每一条样本,样本内容一般是把用户、物品、场景三类特征拼接在一起,先经过N颗GBDT树各自预测一下,给出0或1的预测结果。接着,这个N个预测结果再作为one-hot编码特征拼接成一个向量送入逻辑回归中,产生最终的融合预测结果。另外,由于两者结合后用来做推荐系统的模型融合,所以也可以考虑在输入特征中加入各个召回模型产生的分数。

以上就是“辑度组合”原理,虽然简单,但在实际应用中非常有效。

总结

今天我们主要讲了简单的逻辑回归和梯度提升决策树,两者都不是太复杂的模型。并且无论是逻辑回归,还是梯度提升决策树,都有非常成熟的开源实现,可以很快落地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之可扩展性(六)

可扩展性 向外扩展 12.重新均衡分片数据 如有必要,可以通过在分片间移动数据来达到负载均衡。举个例子,许多读者可能听一些大型图片分享网站或流行社区网站的开发者提到过用于分片间移动用户数据的工具。在分片间移动数据的好处很明显。例如&#xff…

鸿蒙开发设备管理:【@ohos.batteryInfo (电量信息)】

电量信息 该模块主要提供电池状态和充放电状态的查询接口。 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import batteryInfo from ohos.batteryInfo;属性 描述电池信息。 系统能…

NLP经典论文研读--xlnet论文代码复现记录

xlnet源码解读(简易pytorch实现版本) xlnet这个模型还是相当复杂的,我看了很长一段时间也还是有很多地方没有搞明白,最后又在网上搜了很多大佬写的相关博客,才算是大致弄明白了,想了解xlnet的原理,请参考原论文&#…

(2024,RNN,梯度消失和爆炸,记忆诅咒,重参数化和动态学习率,权重矩阵对角化,复值 RNN)梯度消失和爆炸并不是故事的结局

Recurrent neural networks: vanishing and exploding gradients are not the end of the story 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 梯度消失和梯度爆炸 2. 记…

%运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 在python中,可以使用%运算符进行灵活多样的格式化处理,通用的语法格式为: (格式模板&…

面试突击:ArrayList源码详解

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类,并且在面试过程中也是一个非常高频的知识点&#…

机器人控制系列教程之URDF文件语法介绍

前两期推文:机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2),我们主要从数学的角度介绍了机器人的动力学建模的方式,随着机器人技术的不断发展,机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

ZSWatch 开源项目介绍

前言 因为时不时逛 GitHub 会发现一些比较不错的开源项目,突发奇想想做一个专题,专门记录开源项目,内容不限于组件、框架以及 DIY 作品,希望能坚持下去,与此同时,也会选取其中的开源项目做专题分析。希望这…

基于Java的汽车租赁系统【附源码】

论文题目 设计(论文)综述(1000字) 当今社会,汽车租赁已成为一种受欢迎的出行方式。本文旨在探讨汽车租赁行业的发展趋势、市场规模及其对环境的影响。目前,汽车租赁行业正在经历着快速的发展。随着经济的发…

【独家揭秘】SmartEDA电路仿真软件:电子电路基础学习的神器!

在电子科技日新月异的今天,电路基础学习的重要性愈发凸显。但你是否曾为复杂的电路图、难以理解的电路原理而感到困扰?今天,我要向大家推荐一款学习神器——SmartEDA电路仿真软件,让你轻松踏入电子电路基础学习的殿堂!…

22 Shell编程之免交互

目录 22.1 Here Document免交互 22.1.1 Here Document概述 22.1.2 Here Document免交互 22.1.3 Here Document变量设定 22.1.4 Here Document格式控制 22.1.5 Here Document多行注释 22.2 expect免交互 22.2.1 expect概述 22.2.2 expect安装 22.2.3 基本命令介绍 22.2.4expec…

ARM裸机:地址映射

S5PV210的地址映射详解 什么是地址映射? S5PV210属于ARM Cortex-A8架构,32位CPU,CPU设计时就有32根地址线&32根数据线。 32根地址线决定了CPU的地址空间为4G,那么这4G空间如何分配使用?这个问题就是内存映射问题。…

NAND闪存巨头铠侠(Kioxia)计划最迟于10月下旬通过首次公开募股IPO

据路透社于6月26日引用消息来源的报道,在半导体市场条件反弹及财务业绩迅速改善的背景下,NAND闪存巨头铠侠(Kioxia)正准备尽快提交初步申请,并计划最迟于10月下旬通过首次公开募股(IPO)在东京证…

9.二维数组的遍历和存储

二维数组的遍历和存储 二维数组的遍历 二维数组a[3][4],可分解为三个一维数组,其数组名分别为: 这三个一维数组都有4个元素,例如:一维数组a[0]的 元素为a[0][0],a[0][1],a[0][2],a[0][3]。所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元…

Eclipse代码编辑器自主配色

1. 打开 Eclipse 的设置 - Java - Editor - Syntax Coloring 2. 自定义各种类型的颜色,例如: 1. Interface 勾选,设置为紫色 2. Class 勾选,设置为淡蓝色 3. Abstract classes 勾选,有自己默认的颜色 …

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

使用jupyter打开本地ipynb文件的方法

常用方法: 先启动jupyter,然后在打开的页面点击upload,选择想要打开的文件上传然后打开,但是这样其实是先复制了一份到jupyter中,然后打开运行。而我不想复制。 方法二 先打开项目文件所在文件夹,文件夹…

【Dison夏令营 Day 01】如何用Python写一个游戏“石头剪刀布”

欢迎你们踏入这个充满无限可能性的编程世界!作为一名热爱Python的开发者,我深感编程的魅力,并希望与你们一同分享这份乐趣和激情。编程,不仅仅是一种技能,更是一种思维方式和解决问题的工具。在Python的世界里&#xf…

如何寻找强势货币和弱势货币?

外汇交易的独特之处在于,它融合了两种货币的价值,其中一种货币的价值通过另一种货币来体现。举例来说,USDJPY外汇反映了美元与日元之间的价值关系,而EURUSD则代表了欧元与美元的价值对比。 通过开仓操作,我们预测一种…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天,随处的WIFI给与了大众极大的方便,也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…