推荐系统详解(五)模型融合

本文探讨了推荐系统中的模型融合,特别是线性模型(逻辑回归)和树模型(梯度提升决策树 GBDT)的结合。逻辑回归在CTR预估中广泛使用,但对非线性关系处理有限,而GBDT通过特征组合能捕捉非线性关系。两者结合,GBDT生成高阶特征,作为输入进入逻辑回归,形成有效的融合模型。此外,文章还介绍了因子分解机(FM)模型,它可以看作矩阵分解和逻辑回归的结合,能一网打尽其他模型。最后,文章提到了深度和宽度兼具的融合模型Wide & Deep,结合了线性模型(宽模型)的特征工程优势和深度模型的泛化能力,用于提高推荐系统的性能。
摘要由CSDN通过智能技术生成

经典模型融合办法:线性模型和树模型的组合拳

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

为什么要融合?

挖掘的工作就是对用户和物品做非常深入的结构化分析,庖丁解牛一样,各个角度各个层面的特征都被呈现出来,并且建好索引,供召回阶段使用,大部分挖掘工作都是离线进行的。接下来就是召回,为什么会有召回?因为物品太多了,每次给一个用户计算推荐结果时,如果对全部物品挨个计算,那将是一场灾难,取而代之的是用一些手段从全量的物品中筛选出一部分比较靠谱的。最后就是排序,针对筛选出的一部分靠谱的做一个统一的论资排辈,最后这个统一的排序就是今天要讲的主题:融合。前面巴拉巴拉说了一段,画成图的话会好理解一些,示意图如下。

为什么要融合呢?这还得倒回去说一说召回是什么,以及这个阶段到底发生了什么?

在召回阶段,其实就是各种简单的、复杂的推荐算法,比如说基于内容的推荐,会产生一些推荐结果,比如基于物品的协同过滤会产生一些结果,矩阵分解会产生一些结果,等等。总之,每种算法都会产生一批推荐结果,一般同时还附带给每个结果产生一个推荐分数,是各自算法给出来的。

于是问题就来了,这些不同算法产生的推荐分数,最后要一起排个先后,难道依据各自的分数吗?

这样是不行的,为什么?有几个原因:

1. 有个算法可能只给出结果,不给分数,比如用决策树产生一些推荐结果;

2. 每种算法给出结果时如果有分数,分数的范围不一定一样,所以不能互相比较,大家各自家庭背景不一样;

3. 即使强行把所有分数都归一化,仍然不能互相比较,因为产生的机制不同,有的可能普遍偏高,有的可能普遍偏低。

 

既然来自各个地方的状元凑在一起,谁也不服谁,那只能再举行一次入学考试了,这个入学考试就是融合模型。也就是,不同算法只负责推举出候选结果,真正最终是否推荐给用户,由另一个统一的模型说了算,这个就叫做模型的融合。模型融合的作用除了统一地方军阀,还有集中提升效果的作用。在机器学习中,有专门为融合而生的集成学习思想。今天要讲的一个典型的模型融合方案是:逻辑回归和梯度提升决策树组合,我可以给它取个名字叫做“辑度组合”。

“辑度组合”原理

在推荐系统的模型融合阶段,就要以产品目标为导向。举个简单的例子,信息流推荐,如果以提高 CTR 为目标,则融合模型就要把预估 CTR 作为本职工作,这个工作谁最能胜任呢,一直以来就是逻辑回归。下面,我就来简单介绍一些常见的逻辑回归。

逻辑回归

CTR 预估就是在推荐一个物品之前,预估一下用户点击它的概率有多大,再根据这个预估的点击率对物品排序输出。逻辑回归常常被选来执行这个任务,它的输出值范围就是 0 到 1 之间,刚好满足点击率预估的输出,这是一个基础。因为逻辑回归是广义线性模型,相比于传统线性模型,在线性模型基础上增加了 sigmoid 函数。下面就简单说说,逻辑回归如何做 CTR 预估?我还是按照一直以来的套路来讲,先讲它在真正使用时怎么做的,再一步步往回看怎么得到所需要的条件。在对召回阶段不同算法给出的候选物品计算 CTR 预估时,需要两个东西:特征;权重。

第一个是特征,就是用量化、向量的方式把一个用户和一个物品的成对组合表示出来。

这里说的量化方式包括两种:实数和布尔。

实数好理解,比如一个用户的年龄,一个用户平均在某个品类上每个月的开销,类似等等。

布尔,就是取值 0 或者 1,针对两种类别形式的,比如用户所在的省、市,当时是白天还是晚上,物品的每一个标签。

用户和每一个候选物品都组一下 CP,然后以这种特征化的方式表达出来,就可以计算了,否则类别形式的字段不能直接参与计算。

第二个是权重,每个特征都有一个权重,权重就是特征的话事权。

在这场决定哪些物品最终有机会能走到前台的选秀过程中,用户和物品这对 CP 的所有特征都有投票权,只是同人不同命,每个特征的权重不一样,对最终计算 CTR 影响有大有小。

这个权重就很重要了,显然不能由愚蠢的人类来指定,需要模型自主从大量的历史数据中学习得到。

有了特征,它是一个向量,假如把它叫做 x;还有特征的权重,也是一个维度和特征一样的向量,假如叫做 w。

我们通过对 x 和 w 做点积计算,就得到了一个传统线性模型的输出,再用 sigmoid 函数对这个值做一个变换,就得到一个 0 到 1 之间的值,也就是预估的 CTR。

这里所说的 sigmoid 函数长这个样子:

这个函数曲线如图所示。

那看上去其实要做的就是两件事了:搞特征、学权重。

事实上的确如此,甚至前者占据更多的时间。逻辑回归特特征的取值都要求要在 0 到 1 之间。

甚至在一些领域,比如搜索广告,特征全都是布尔取值,只有出现和不出现两种,一旦遇到实数取值的特征,就将它划分成多个区间段,也变成了布尔取值。

除此之外,由于逻辑回归是广义线性模型,所谓广义就是因为加了 sigmoid 函数,所以很多非线性关系它无能为力。

比如说,有一天你发现“ID 为 233 的用户喜欢买各种钢笔”这个事实,它可以有两个特征组合出来,一个是“ID 为 233”,是一个布尔特征,另一个是“物品为钢笔”,也是一个布尔特征,显然构造一个新特征,叫做“ID 为 233 且物品为钢笔”。

只有两个原始特征都取值为 1 时,这个构造出的特征才会取值为 1,这种组合就是非线性,逻辑回归本身对两个原始特征仅仅是线性加权,并不能很好地刻画这个组合关系,非得组合才能助它一臂之力。

类似这样的工作,行话都叫做特征工程,

刚才举例所说的特征组合叫做二阶组合,还有三阶组合,只要你高兴,也没人拦着你搞四阶组合。

但是要注意,特征组合的难点在于:组合数目非常庞大,而且并不是所有组合都有效,只有少数组合有效。

需要不断去弄脏双手,脚上沾泥地从数据中发现新的、有效的特征及特征组合。

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

权重那部分就是老生常谈了,简单说就是你准备好样本,喂给优化算法,优化算法再挤出新鲜的权重。

权重的学习主要看两个方面:损失函数的最小化,就是模型的偏差是否足够小;

另一个就是模型的正则化,就是看模型的方差是否足够小;

都是希望模型能够有足够的生命力,在实际生产线上最好能和实验阶段表现一样好。

除了要学习出偏差和方差都较小的模型,还需要能够给工程上留出很多余地,具体来说就是两点,

一个是希望越多权重为 0 越好,权重为 0 称之为稀疏,可以减小很多计算复杂度,并且模型更简单,方差那部分会可控。

另一个是希望能够在线学习这些权重,用户源源不断贡献他们的行为,后台就会源源不断地更新权重,这样才能实现生命的大和谐。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值