如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化。相关内容 推荐最常见的两块就是“关联推荐”和“相关内容推荐”,关联推荐就是我们常说的购物篮分析,即使用购买了某商品的用户同时购买了什么这个规则来发现商品间 的潜在联系,之前有相关的文章介绍——向上营销、交叉营销与关联推荐;关联推荐是基于用户行为分析的推荐,而相关内容推荐是基于内容固有特征的推荐,只与内容本身有关,与用户的行为完全无关,所以相关内容推荐的模型是一种“冷启动”的算法,不需要任何历史浏览访问数据的支持。

内容固有属性

相关内容推荐因为完全不借助用户浏览行为的数据,所以底层数据不依赖于网站的点击流日志,唯一的基础数据就是内容的固有属性及完整信息。我们以豆瓣网的几大块内容为例来看看对于这些内容一般包含哪些固有属性:

书籍-书名、作者、出版时间、出版社、分类、标签

音乐-专辑名、歌手、发行时间、发行方、风格流派、标签

电影-电影名称、导演、演员、上映时间、制片方、类型、标签

豆瓣很多地方都使用了“标签”这个词,用贴标签的形式来完成内容的分类和标识,但其实标签又分为很多种,有些标签是在内容生成时就被贴上的,有些可 能是后续用户贴上去的,而且豆瓣一般为内容和标签定义了原始分类,如书籍分为文学、流行、文化……既然分类和标签内容源生就带有,那同样可以作为内容的固 有属性。

还需要说明的是,这里不涉及文本挖掘和字符切分模糊匹配等问题,因此内容的标题、简介和全文不参与文本相似度的分析,虽然这些可能在构建完整的相关 内容模型中不可缺少,但这里只考虑一些固有属性是否相同实现简单应用。基于上述豆瓣几类内容的属性特征,选择和整理适合分析的内容属性如下:

“作者”就是指内容的创造者,“来源”指内容的发布方或获取渠道,“分类”为内容归属的类别,“标签”可以包含对内容的各类描述信息和关键词等。这 里为了能够尽可能清晰地描述整个分析模型和思路只选取了大部分内容都包含的一些属性,如果要构建更加高效的相关内容分析模型,需要更完整的内容属性,可以 根据自身内容的特征进行属性的定义和选取。

KNN算法及应用

KNN(K-Nearest Neighbor algorithm),K最近邻算法,通过计算样本个体间的距离或者相似度寻找与每个样本个体最相近的K个个体,算法的时间复杂度跟样本的个数直接相关, 需要完成一次两两比较的过程。KNN一般被用于分类算法,在给定分类规则的训练集的基础上对总体的样本进行分类,是一种监督学习(Supervised learning)方法。

这里我们不用KNN来实现分类,我们使用KNN最原始的算法思路,即为每个内容寻找K个与其最相似的内容,并推荐给用户。相当于每个内容之间都会完 成一次两两比较的过程,如果你的网站有n个内容,那么算法的时间复杂度为Cn2,即n(n-1)/2。但是用内容固有属性有一个好处就是因为固有属性一旦 创建后基本保持不变,因此算法输出的数据一旦计算好之后不需要重复计算去刷新,也就是对于网站内容而言,原有内容的数据在首次初始化之后可以不断重复使 用,只要更新新增内容的数据就可以,数据的统计计算可以使用增量更新的形式,这样可以有效地减少服务器的计算压力。

相关内容模型

有了基础数据和算法的支持,我们就可以创建数据模型了。先看下基础数据的类型,作者、分类、来源和标签都是字符型,其中作者、分类、来源基本可以当 做是单个值的属性,标签一般包含多个值。首先由于都是字符可以确定属性之间相似性的判定只能通过“是否相同”,无法体现数值上的差异,所以对于作者、分 类、来源这几个单值属性而言,比较的结果就是一个布尔型的度量,相同或者不相同;对于标签这个多值属性可以考虑使用Jaccard相关系数,但因为每个内 容标签的个数存在较大差异,使用验证后的结果并不理想,所以不考虑使用(当然,如果内容的标签个数比较固定,Jaccard相关系数是有效的)。因此,直 接创建加权相似度模型如下,首先是标签的相似度分值设定:

再结合作者、分类和来源,通过加权设定总体的相似度分值:

将所有属性加权相似度分值的结果相加应该分布在[0,100],分值越高说明内容间的相似度越高。对于这种简单的加权相似度评分模型,估计又有很多 人要问权重是怎么确定的,确实,这里的权重并没有通过任何定量分析模型的方法去计算,只是简单的经验估计,但估计的过程经过反复地调整和优化,也就是不断 地尝试调整各属性的权重系数并输出结果,抽样检验结果是否符合预期、是否有提升优化的空间。

基于上述内容间相似度的计算结果,套用KNN的原理实现相关内容推荐就异常简单了,只要根据每个内容与之比较的所有内容的相似度分值降序排列取前K个内容 作为该内容的最相关内容推荐给用户就可以了。当然中间可能会涉及相同相似度分值的内容如何排序的问题(因为模型的关系分值分布可能不会很离散),建议如果 相似度分值相同使用随机排序,以保证推荐结果有一定的变化,均匀内容的曝光。

好了,所有的分析流程介绍完了,好像跟前一篇的距离和相似度度量完 全没有关系,其实距离和相似度度量是KNN的基础算法,因为KNN的个体相似度或邻近的距离都会选择距离度量和相似度度量中的某种方法进行计算,但这里考 虑到了现实的数据情况和应用环境,并不是KNN就一定要硬套欧氏距离,其实换一种简单的方法可能反而更加适合整个模型,而且模型的最终效果可能会更理想。 所以一切的数据挖掘算法的选择和使用都是基于数据模型的有效性和输出结果的效果来决定的,并不是简单的算法效果就一定不好,而高级复杂的算法一定更加有 效。对了,如果你已经做了相关内容推荐,那么优化相关内容推荐这篇文章里面介绍的一些方法将是检验推荐效果的一个很好的参考。

转载于:https://www.cnblogs.com/peizhe123/p/4619329.html

基于KNN的相关内容推荐相关推荐

  1. php 加日志,添加日志的相关内容推荐

    在开发应用的过程中,调试也是非常重要的一个环节,除了IDE支持的即时调试(如VS.PHP或IDE支持的调试功能),给Web应 用添加适当的调试信息也是非常有用的一个方法,开发过Java或.Net 应用 ...

  2. 推荐系统之基于内容推荐

    目录 (1)基于内容推荐原理 (2)基于内容推荐优势与应用场景 (3)基于内容推荐架构图详解 (4)基于内容推荐TF-IDF详解 (5)构建基于内容推荐开发环境 (6)内容推荐开发步骤与数据演化详解 ...

  3. 基于内容推荐算法实现原理

    本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要关注的点等5个方面来讲解. 1.什么是基于内容的推荐算法 所谓基于内容的推荐算法(Content-Ba ...

  4. 推荐机制 协同过滤和基于内容推荐的区别

    基于人口统计学的推荐 基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后 ...

  5. 推荐算法-基于内容推荐(CB)

    推荐算法CB 写在前面 一 为什么要做推荐系统 二 基于内容推荐是什么? 1 引入Item属性的Content Based推荐 2 引入User属性的Content Based推荐 三 正排表与倒排表 ...

  6. 协同过滤推荐算法和基于内容推荐算法的区别?

    文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼:我热爱编程.热爱算法.热爱开源.所有源码在我的个人github :这博客是记录我学习的点点滴滴,如果您对 Python.Java.AI ...

  7. 推荐算法之协同过滤和基于内容推荐

    一.协同过滤 基于用户商品评分矩阵来做协同,典型的是根据余弦相似来求向量相似. 协同过滤典型的有两种Usercf和Itemcf,Usercf的思路就是根据a,b用户相似,将b用户喜欢的a用户未浏览过的 ...

  8. 如何使用Spring+SpringMVC+Mybatis开发实现个性化小说推荐系统 协同过滤推荐算法实现 基于用户、项目的协同过滤推荐 基于聚类、关联规则、内容推荐算法 WebNovelCFRS

    如何使用Spring+SpringMVC+Mybatis开发实现个性化小说推荐系统 协同过滤推荐算法实现 基于用户.项目的协同过滤推荐 基于聚类.关联规则.内容推荐算法 WebNovelCFRS 一. ...

  9. 基于机器学习的内容推荐算法及其心理学、社会学影响闲谈

    基于机器学习的内容推荐算法目前在各类内容类APP中使用的非常普遍.在购物.时尚.新闻咨询.学习等领域,根据用户的喜好,进行较为精准的用户画像与内容推荐.此类算法不但可以较为准确的分析用户的特征,如年龄 ...

最新文章

  1. retina 负样本回归增强loss
  2. 视频直播技术详解(3)编码和封装
  3. 不用任何比较判断找出两个数中较大的数
  4. Python之路(第二十篇) subprocess模块
  5. 在PLSQL中,存储过程的输出参数(varchar2)最大支持多大
  6. MetaWeblog API中文说明
  7. php 注入是什么意思,如何理解ThinkPHP框架里的依赖注入?
  8. dhtmlxTree 10分钟做一个树
  9. Linux工作笔记037---Centos下Linux创建用户_用户组_删除用户
  10. 帆软报表重要Activator之DesignerStartup中的GlobalListenerProvider扩展开发
  11. php git pull
  12. JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码
  13. [转帖] bat方式遍历目录内的文件
  14. XML wsdl soap xslt xsl ide
  15. 复制百度文库文字最简单的方法
  16. 设计一个具有大纯时延时间的一阶惯性环节的计算机控制系统,计算机控制课程设计——大纯时延一阶惯性环节温度控制系统...
  17. Tiny6410 初体验
  18. 牛客网刷题——斩获offer
  19. 实验四+049+尤帆贤
  20. ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索

热门文章

  1. Ubuntu安装rjava
  2. MATLAB报错:未定义函数或变量
  3. nstimer循环引用_解决NSTimer循环引用导致内存泄漏的六种方法
  4. python __reduce__魔法方法_关于python魔术方法payload:.__class__.__mro__[2].__subclasses__()[40](/etc/passwd...
  5. matlab ufunc,ufunc函数
  6. redis api java 正则_java代码怎么正则删除redis的数据
  7. mysql语句大全 新浪博客_MySQL语句入门
  8. 对python的认识800字_我对python里True和False的理解
  9. html 地图 自动适应,Html显示地图
  10. graphpad怎么处理cck8的_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI