推荐系统MostPopular算法的Python实现方式

目录
  • 推荐系统MostPopular算法的Python实现
    • 算法代码如下
    • 在ML-1M数据集上的测试结果(100个用户)
  • 推荐系统的几种常用算法总结
    • 一、什么是推荐系统?
    • 二、推荐系统要解决的问题?
    • 三、推荐系统的发展趋势?
    • 四、基于流行度的推荐算法
    • 五、基于用户的协同过滤推荐算法
    • 六、基于物品的协同过滤推荐算法
    • 七、基于内容的推荐算法
    • 八、基于模型的推荐算法
    • 九、基于混合式的推荐算法
    • 十、推荐结果列表处理
    • 十一、推荐结果评估

推荐系统MostPopular算法的Python实现

MostPopular 算法的 是指对每个用户都选择出当前流行度最高的Top-K个物品进行推荐,在推荐的时候,需要去除用户原先就浏览过的项目。

算法代码如下

# Most Pop
def MostPopular(pop_dict, I, K):
    '''
        pop_dic:流行度字典,存储了每个item:pop_value的键值对。
        I:用户可以选择的Item空间(需去除已经看过的item)
        K:Top-K 值,推荐出K个item给用户
    '''
    pop_dict_sort = sorted(pop_dict.items(), key=lambda kv: (kv[1], kv[0]), reverse=True)
    for each_item in pop_dict_sort:
        if each_item[0] not in I:
            pop_dict_sort.remove(each_item)

    return [i[0] for i in pop_dict_sort[:K]]

在ML-1M数据集上的测试结果(100个用户)

Precision: 0.05399999999999998
Recall: 0.0659683173313864
HR: 0.08
NDCG: 0.2668352016595219
ARP: 25.750500000000002

推荐系统的几种常用算法总结

之前也做过一些关于推荐系统的项目,下面就来系统的总结一下。

一、什么是推荐系统?

引用百度百科的一段解释就是:“利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。”

在这个数据过载的时代,信息的消费者需要从海量的信息中找到自己所需要的信息,信息的生产者要让自己生产的信息在海量的信息中脱颖而出,这时推荐系统就应运而生了。对用户而言,推荐系统不需要用户提供明确的目标;对物品而言,推荐系统解决了2/8现象的问题(也叫长尾效应),让小众的物品可以展示到需要它们的用户面前。

二、推荐系统要解决的问题?

1、帮助用户找到想要的物品 如:书籍、电影等

2、可以降低信息过载

3、有利于提高站点的点击率/转化率

4、有利于对用户进行深入了解,为用户提供个性化服务

三、推荐系统的发展趋势?

推荐系统的研究大致可以分为三个阶段,第一阶段是基于传统的服务,第二阶段是基于目前的社交网络的服务,第三阶段是即将到来的物联网。

这其中产生了很多基础和重要的算法,例如协同过滤(包括基于用户的和基于物品的)、基于内容的推荐算法、混合式的推荐算法、基于统计理论的推荐算法、基于社交网络信息(关注、被关注、信任、知名度、信誉度等)的过滤推荐算法、群体推荐算法、基于位置的推荐算法。

其中基于邻域的协同过滤推荐算法是推荐系统中最基础、最核心、最重要的算法,该算法不仅在学术界得到较为深入的研究,而且在业界也得到非常广泛的应用,基于邻域的算法主要分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法,除此之外,基于内容的推荐算法应用也非常广泛等等,因此下文将对涉及推荐系统的常用算法进行详细介绍。

1、基于流行度的推荐算法

2、基于协同过滤的推荐算法(UserCF与ItemCF)

3、基于内容的推荐算法

4、基于模型的推荐算法

5、基于混合式的推荐算法

四、基于流行度的推荐算法

基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。

注:独立访客(UV)、访问次数(VV)两个指标有什么区别?

① 访问次数(VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。

② 独立访客(UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。

③ PV访问量(Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。

1、优点:该算法简单,适用于刚注册的新用户

2、缺点:无法针对用户提供个性化的推荐

3、改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

五、基于用户的协同过滤推荐算法

当目标用户需要推荐时,可以先通过兴趣、爱好或行为习惯找到与他相似的其他用户,然后把那些与目标用户相似的用户喜欢的并且目标用户没有浏览过的物品推荐给目标用户。

1、基于用户的CF原理如下:

① 分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;

② 根据用户对物品的隐性评分计算得到所有用户之间的相似度;

③ 选出与目标用户最相似的K个用户;

④ 将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。

2、优点:

① 基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;

② 适于物品比用户多、物品时效性较强的情形,否则计算慢;

③ 能实现跨领域、惊喜度高的结果。

3、缺点:

① 在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;

② 用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;

③ 推荐结果的个性化较弱、较宽泛。

4、改进:

① 两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;

② 如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;

③ 在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;

④ 把类似地域用户的行为作为推荐的主要依据。

六、基于物品的协同过滤推荐算法

当一个用户需要个性化推荐时,举个例子由于我之前购买过许嵩的《梦游计》这张专辑,所以会给我推荐《青年晚报》,因为很多其他用户都同时购买了许嵩的这两张专辑。

1、基于物品的CF原理如下:

① 分析各个用户对物品的浏览记录;

② 依据浏览记录分析得出所有物品之间的相似度;

③ 对于目标用户评价高的物品,找出与之相似度最高的K个物品;

④ 将这K个物品中目标用户没有浏览过的物品推荐给目标用户

2、优点:

① 基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。

② 物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。

③ 应用最广泛,尤其以电商行业为典型。

④ 适于用户多、物品少的情形,否则计算慢

⑤ 推荐精度高,更具个性化

⑥ 倾向于推荐同类商品

3、缺点:

① 不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。

② 在物品冷启动、数据稀疏时效果不佳

③ 推荐的多样性不足,形成信息闭环

4、改进:

① 如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;

② 活跃用户对物品相似度的贡献小于不活跃的用户;

③ 同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;

④ 在描述目标用户偏好时,给其最近喜欢的商品较高权重;

⑤ 同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。

七、基于内容的推荐算法

协同过滤算法仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性,而基于内容的算法会考虑到物品本身的属性。

根据用户之前对物品的历史行为,如用户购买过什么物品、对什么物品收藏过、评分过等等,然后再根据计算与这些物品相似的物品,并把它们推荐给用户。例如某用户之前购买过许嵩的《寻宝游戏》,这可以说明该用户可能是一个嵩鼠,这时就可以给该用户推荐一些许嵩的其他专辑或著作。

1、基于内容的推荐算法的原理如下:

① 选取一些具有代表性的特征来表示每个物品

② 使用用户的历史行为数据分析物品的这些特征,从而学习出用户的喜好特征或兴趣,也即构建用户画像

③ 通过比较上一步得到的用户画像和待推荐物品的画像(由待推荐物品的特征构成),将具有相关性最大的前K个物品中目标用户没有浏览过的物品推荐给目标用户

2、优点:

① 是最直观的算法

② 常借助文本相似度计算

③ 很好地解决冷启动问题,并且也不会囿于热度的限制

3、缺点:

① 容易受限于对文本、图像、音视频的内容进行描述的详细程度

② 过度专业化(over-specialisation),导致一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。

③ 主题过于集中,惊喜度不足

八、基于模型的推荐算法

基于模型的推荐算法会涉及到一些机器学习的方法,如逻辑回归、朴素贝叶斯分类器等。基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

九、基于混合式的推荐算法

现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

十、推荐结果列表处理

1、当推荐算法计算得出推荐结果列表之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;

2、若多次推荐后用户依然对某个物品毫无兴趣,就需要将这个物品降低权重,调整排序;

3、有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。

十一、推荐结果评估

当一个推荐算法设计完成后,一般需要用查准率(precision),查全率(recall),点击率(CTR)、转化率(CVR)、停留时间等指标进行评价。

  • 查准率(precision):推荐给用户且用户喜欢的物品在推荐列表中的比重
  • 查全率(recall):推荐给用户且用户喜欢的物品在用户列表中的比重
  • 点击率(CTR):实际点击了的物品/推荐列表中所有的物品
  • 转化率(CVR):购买了的物品/实际点击了的物品

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python实现计算AUC的三种方式总结

    目录 介绍 实现代码 方法补充 介绍 AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1.又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间.AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值. auc计算方式:参考Python实现计算AUC的示例代码 实现代码 import numpy as np from sklearn.metrics import roc_auc_sc

  • python计算auc指标实例

    1.安装scikit-learn 1.1Scikit-learn 依赖 Python (>= 2.6 or >= 3.3), NumPy (>= 1.6.1), SciPy (>= 0.9). 分别查看上述三个依赖的版本, python -V 结果:Python 2.7.3 python -c 'import scipy; print scipy.version.version' scipy版本结果:0.9.0 python -c "import numpy; print

  • AUC计算方法与Python实现代码

    -AUC计算方法 -AUC的Python实现方式 AUC计算方法 AUC是ROC曲线下的面积,它是机器学习用于二分类模型的评价指标,AUC反应的是模型对样本的排序能力.它的统计意义是从所有正样本随机抽取一个正样本,从所有负样本随机抽取一个负样本,当前score使得正样本排在负样本前面的概率. AUC的计算主要以下几种方法: 1.计算ROC曲线下的面积.这是比较直接的一种方法,可以近似计算ROC曲线一个个小梯形的面积.几乎不会用这种方法 2.从AUC统计意义去计算.所有的正负样本对中,正样本排在负

  • 推荐系统MostPopular算法的Python实现方式

    目录 推荐系统MostPopular算法的Python实现 算法代码如下 在ML-1M数据集上的测试结果(100个用户) 推荐系统的几种常用算法总结 一.什么是推荐系统? 二.推荐系统要解决的问题? 三.推荐系统的发展趋势? 四.基于流行度的推荐算法 五.基于用户的协同过滤推荐算法 六.基于物品的协同过滤推荐算法 七.基于内容的推荐算法 八.基于模型的推荐算法 九.基于混合式的推荐算法 十.推荐结果列表处理 十一.推荐结果评估 推荐系统MostPopular算法的Python实现 MostPop

  • Python用户推荐系统曼哈顿算法实现完整代码

    出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和. 图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离.曼哈顿距离--两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|.对于一个具有正南正北.正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西

  • K最近邻算法(KNN)---sklearn+python实现方式

    k-近邻算法概述 简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类. k-近邻算法 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标

  • 详解K-means算法在Python中的实现

    K-means算法简介 K-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,相同簇中的数据相似度较高,不同簇中数据相似度较低. K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法.k-means 算法接受输入量 k :然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小. 核心思想 通过迭代寻找

  • Python多进程方式抓取基金网站内容的方法分析

    本文实例讲述了Python多进程方式抓取基金网站内容的方法.分享给大家供大家参考,具体如下: 在前面这篇//www.jb51.net/article/162418.htm我们已经简单了解了"python的多进程",现在我们需要把抓取基金网站(28页)内容写成多进程的方式. 因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList = [r[x:

  • 基于YUV 数据格式详解及python实现方式

    YUV 数据格式概览 YUV 的原理是把亮度与色度分离,使用 Y.U.V 分别表示亮度,以及蓝色通道与亮度的差值和红色通道与亮度的差值.其中 Y 信号分量除了表示亮度 (luma) 信号外,还含有较多的绿色通道量,单纯的 Y 分量可以显示出完整的黑白图像.U.V 分量分别表示蓝 (blue).红 (red) 分量信号,它们只含有色彩 (chrominance/color) 信息,所以 YUV 也称为 YCbCr,C 意思可以理解为 (component 或者 color). 维基百科上的 RGB

  • python 非线性规划方式(scipy.optimize.minimize)

    一.背景: 现在项目上有一个用python 实现非线性规划的需求.非线性规划可以简单分两种,目标函数为凸函数 or 非凸函数. 凸函数的 非线性规划,比如fun=x^2+y^2+x*y,有很多常用的python库来完成,网上也有很多资料,比如CVXPY 非凸函数的 非线性规划(求极值),从处理方法来说,可以尝试以下几种: 1.纯数学方法,求导求极值: 2.使用神经网络,深度学习来处理,可参考反向传播算法中链式求导的过程: 3.寻找一些python库来做,本文介绍scipy.optimize.mi

  • 详解非极大值抑制算法之Python实现

    一.概述 这里不讨论通用的NMS算法(参考论文<Efficient Non-Maximum Suppression>对1维和2维数据的NMS实现),而是用于目标检测中提取分数最高的窗口的.例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数.但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况.这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口. NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪.数据挖掘

  • 人工智能——K-Means聚类算法及Python实现

    目录 1 概述 1.1 无监督学习 1.2 聚类 1.3 K-Mean均值算法 2 K-Mean均值算法 2.1 引入 2.2 针对大样本集的改进算法:Mini Batch K-Means 2.3 图像 3 案例1 3.1 代码 3.2 结果 4 案例2 4.1 案例——数据 4.2 代码 4.3 结果 4.4 拓展&&改进 1 概述 1.1 无监督学习 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签

  • 朴素贝叶斯算法的python实现方法

    本文实例讲述了朴素贝叶斯算法的python实现方法.分享给大家供大家参考.具体实现方法如下: 朴素贝叶斯算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 比如我们想判断一个邮件是不是垃圾邮件,那么我们知道的是这个邮件中的词的分布,那么我们还要知道:垃圾邮件中某些词的出现是多少,就可以利用贝叶斯定理得到. 朴素贝叶斯分类器中的一个假设是:每个特征同等重要 函数 loadDataSet() 创建数据集,这里的数据集

随机推荐