推荐算法之加权采样

Posted 智能推荐系统

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐算法之加权采样相关的知识,希望对你有一定的参考价值。

一、应用场景

  在基于用户兴趣召回物品时,每个用户都有兴趣标签,有时候可能兴趣标签非常多,每一个标签都有计算出来的权重,从高到底进行排序。在进行推荐的时候,我们到底基于哪些兴趣标签进行推荐呢,只选取topN的吗,还是全部?如果只选取topN的,那每次推荐结果都比较相似,而且权重低的兴趣标签似乎得不到推荐;如果按照全部标签进行推荐,可能计算量会非常大。

  这个时候可以加权采样方式筛选用户的兴趣标签,每次召回的不是全部兴趣标签,而是按照权重采样一部分标签进行召回,这样做的好处是显然的:

      1)减少召回的时间复杂度

      2)可以保留更多的标签

      3)每次召回计算都有所变化,满足了推荐多样性

      4)虽有变化,但依然受标签相对权重大小的约束

    在热门排行榜的展示中,也可以采用加权采样方法,比如热门展示位只有10个,那每次可以加权采样10个展示,刷新还有细微变化。

    所以,加权采样应该属于推荐系统中的技巧性方法,能够细微的改善用户的推荐结果,还是非常重要的。

二、有限数据集的加权采样

    现在假设你有用户标签若干,每一个标签都有个权重 w,权重高低反映了用户对这个标签的感兴趣程度高低。你希望每次输出一部分标签用于召回推荐候选集,每次输出时都不一样,但是又能反映用户标签的权重,输出的概率和权重成正比,公式如下:

推荐算法之加权采样

    1、wi 是每个样本的权重,比如用户标签权重;

    2、R 是遍历每个样本时产生的 0 到 1 之间的随机数;

    3、Si 就是每个样本的采样分数。

三、无限数据集-蓄水池抽样

    两种采样都是针对有限数据集的,也就是采样之前都要遍历一遍所有样本。那么如果面对的数据集无限大,或者不知道多大时,该怎么做加权采样呢?这就要讲到另一个采样算法了,名字叫蓄水池采样(也叫蓄水池抽样)。

蓄水池采样:

    假如有一个数据集合,一共有 n 条,要从中采样取出 k 个,那么每个样本被选中的概率就是 k/n 。

蓄水池采样的做法是:

    1、直接先取出前 k 个样本留着,这 k 个就是随时准备最终要输出的;
    2、从第 k+1 个开始,每个都以 k/n 的概率去替换那留着的 k 个样本中的一个。


    这个过程,随时可以取用那 k 个集合作为输出结果,任意时刻,当总样本遍历了 n 个时,他们的概率都是 k/n 。这就是蓄水池采样,蓄水池采样,顾名思义,k 个元素的样本集合就是个蓄水池,是任意时刻的采样结果,可以随时取用。

 

加权蓄水池采样:

    现在回到我们今天的主题来,实际上更需要的是加权蓄水池采样。加权蓄水池采样利用的依然是在前面说的第一种加权采样方法,只不过结合了蓄水池采样的思想:

    1、为每一个样本生成一个分数,分数还是采用上述si的计算公式。

    2、如果结果不足 k 个,直接保存到结果中。

    3、如果结果中已经有 k 个了,如果 Si 比已有的结果里最小那个分数大,就替换它。


附:最近推出了推荐系统系列教程,已推出九期,没看过的朋友们可以点历史消息或点击下面的链接查看。本系列教程全部免费,希望大家每期都不要落下,这样可成体系,也希望各位粉丝朋友多多转发,并在看完后点个“在看”,以示鼓励。

推荐算法之加权采样

「 更多干货,更多收获 」





智能推荐

个性化推荐技术与产品社区

长按并识别关注

一个「在看」,一段时光!

以上是关于推荐算法之加权采样的主要内容,如果未能解决你的问题,请参考以下文章

ML之CB:基于自定义电影数据集利用CB基于内容推荐算法(多个指标基于同种相似度加权得分)实现电影Top5推荐案例

多模型融合推荐算法

java和python实现一个加权SlopeOne推荐算法

推荐系统之TF-IDF算法实现

推荐系统之TF-IDF算法实现

推荐算法小结