基于协同过滤的搜索推荐系统
2023-10-31 10:58:13 0 举报
AI智能生成
基于协同过滤的搜索推荐系统 广告推荐 电商推荐 新闻推荐 基于用户的协同过滤推荐 基于内容项的协同过滤推荐 基于模型的协同过滤推荐 协同过滤存在的问题 加权混合协同过滤算法 转换混合协同过滤算法 分区混合协同过滤算法 分层混合协同过滤算法
作者其他创作
大纲/内容
<b><font color="#ff0000">协同过滤的不足</font></b>
协同过滤虽然能帮助用户找到合适的推荐列表,在实践中得到广泛的应用,但是也存在着一下一些问题
<font color="#ff0000"><b>问题清单</b></font>
<font color="#00ff00">冷启动问题</font>
冷启动问题可以分为2类
第1类冷启动问题
当系统建立之初,还未收到足够的用户信息,<br>协同过滤算法不能为指定用户找到合适的邻居,从而无法向用户提供推荐预测
新系统问题<br>就是数据不足,数据质量低
第2类冷启动问题
对于新注册的用户或者新加入的商品,由于系统里面没有他们的历史数据信息,<br>所以协同过滤算法也无法为用户预测推荐
新人/新品问题
<font color="#00ff00">稀疏性问题</font>
稀疏性问题指的是在实际情况下,用户很少会对每个内容项进行评分,<br><br>所以真实的用户-内容项的相似矩阵是稀疏的(即矩阵中的很多元素都是0,表示用户对该内容未进行评分)<br><br>从而降低了计算效率,而且少部分人的错误偏好会降低推荐的准确性
稀疏性问题 - 用户很少对内容进行评分
错误偏好问题- 少部分人的错误偏好会降低推荐的准备性
<font color="#00ff00">最初评价问题</font>
最初评价问题指的是,对于一些从未被评过分的内容,比如新加进的内容或者比较小众的内容,<br><br>他们是不可能会被推荐给用户的,而用户可能会对一些冷门内容也感兴趣
新品不会被推荐给用户
用户可能对冷门或小众内容也感兴趣
<font color="#00ff00">扩展性不足问题</font>
随着推荐系统的发展,用户和内容数量的增加,<br><br>计算用户或者内容项间的相似度时,计算复杂度会大大增加,从而导致系统的性能降低
用户和内容增加,计算量大大增加,系统性能降低
<font color="#00ff00">流行性偏向问题</font>
系统会更偏向于为用户推荐比较流行的内容,因为评分覆盖面广。<br><br>但是对于有着独特口味的用户来说,推荐系统不能提供很好的推荐。
小众内容不能很好的推荐
如何解决协同过滤的不足
为了克服以上缺点,现今的推荐系统一般会采取混合的推荐机制来进行互补,<br><br>而不是单单只采用某一种推荐策略。<br><br>现在运用最广的推荐机制混合方法有以下几种方法
混合推荐机制
加权混合
先用不同的推荐机制对用户进行推荐预测
然后再将他们的结果按照一定的权重加权求和得出最终的推荐预测
具体的权值设置需要根据实际情况决定
转换混合
在不同的状态和条件下,转换选择最为合适的推荐机制对齐进行预测
因为基于不同的情况,推荐机制的选择上可能会有很大的不同,为了充分利用各种推荐机制的优点
我们可以选择转换混合的方式对用户进行推荐预测
分区混合
同时采用多种不同的推荐机制,并将产生的不同结果分成不同的区域推荐给用户
分区混合的方法可以为用户提供更为全面的推荐结果
分层混合
和分区混合一样,分层混合也是采用多种不同的推荐机制,
但是不同的它是将一个推荐机制的结果作为下一个的输入,这样层层作用下去,最终得到一个推荐预测
分层混合的优点在于可以综合不同推荐机制的优缺点,从而提高推荐准确度
总结
在这个数据爆炸的时代,对于电子商务,社交网络或是个性化应用来说,<br>如何能让用户更快速地定位自己想要的信息,如何让用户发掘出自己潜在的兴趣爱好,这是最为关键的。<br><br>庞大的市场需求推动了推荐系统的发展,现如今,推荐系统已慢慢走向成熟。<br><br>很多用户惊叹于推荐系统的能力,因为它不仅能找到与你喜好相似的内容,而且还能发掘出你潜在的喜好,可以这么说,推荐系统可能比你还更了解你自己的需求。<br><br>推荐系统的发展又反作用推动了电子商务等应用的发展,现今的淘宝,京东和豆瓣等网站用户数量已突破千万,更多的用户享受到推荐引擎的美妙之处。
而这篇文章揭示了推荐引擎的背后原理,详细地介绍了推荐引擎最核心的协同过滤算法。<br><br>原来推荐引擎并没有你想象中的那么复杂,它只是先记录下所有用户的行为信息,<br><br>然后基于协同过滤的算法,利用这海量的信息,找出与你有着相似喜好的用户,最后把他们的喜好商品推荐给你。<br><br>也就是说,协同过滤算法是借助他人的经验帮你找到你自己潜在的兴趣爱好,<br><br>而实现这些的前提是需要具有大量的用户行为数据,而大数据时代正好可以满足这一前提条件。
当然协同过滤算法还没有走向真正的成熟,还存在大大小小的问题。<br><br>但只要推荐系统能够根据不同的实际情况,选择不同种类的协同过滤方法或者将它们结合起来,就能得到一个令人较为满意的推荐结果。
参考文献
https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html
https://zh.wikipedia.org/zh-hans/%E6%8E%A8%E8%96%A6%E7%B3%BB%E7%B5%B1
https://zh.m.wikipedia.org/zh-cn/%E5%8D%94%E5%90%8C%E9%81%8E%E6%BF%BE
http://blog.csdn.net/zhangyuming010/article/details/38636931
背景介绍
随着网络技术和信息科技的迅速发展,人们数据量的产出呈现出指数型增长,<br><br>人类在近几年产生的数据量就已经相当于之前产生的所有数据量总和了,这意味着我们已经进入了一个数据大爆炸的时代。
Web 2.0的出现和发展使得人们将大量的数据分享在互联网中,而要想在这海量的数据中快速找到自己真正所需的信息,<br>我们需要借助搜索引擎的力量,如常用的谷歌,百度和必应等。<br><br>但是,搜索引擎也有它的局限性,搜索引擎要求用户输入一定的关键词,才能搜索出相对应的信息。<br><br>但往往在现实中,用户并不很清楚自己的具体需求,从而无法用简单的关键词进行描述。<br><br>在面对海量信息时,用户可能无法准确定位出对自己真正有用的信息。<br><br>虽然信息量增加了,但是用户对信息的使用效率反而下降了,即出现<b><font color="#00ff00">信息超载</font></b>的问题。针对这种情况,推荐系统应运而生。
那么,<font color="#ff0000"><b>推荐系统</b></font>到底是什么呢?<br><br>
维基百科这样解释道:<font color="#ff0000"><b>推荐系统</b></font>是一种<font color="#00ff00">信息过滤</font>系统,用于<font color="#00ff00">预测</font>用户对物品的“<font color="#00ff00">评分”或“偏好”</font>。<br><br>也就是说,推荐系统能够将用户可能感兴趣或者潜在的有用信息推荐给用户,<br><br>最常用于电子商务网站(如淘宝,京东和当当网等)和个性化应用(如音乐,电影和图书推荐等)中。
<b><font color="#ff0000">推荐系统</font></b>的工作原理图如下:<br><br>
<br>
<br><br>为了简单起见,我们先把推荐系统当作是一个<font color="#00ff00">黑盒</font>,这个黑盒的输入包括物品的信息,用户的信息以及用户对物品的偏好等等。<br><br>根据这些输入信息,系统会将物品推荐给对应的用户。<br><br>推荐系统的<font color="#00ff00"><b>主要推荐方法</b></font>有以下几种:<br><font color="#ff0000"><b>①、基于内容推荐、<br></b></font><b><font color="#ff0000">②、协同过滤推荐、<br>③、基于关联规则推荐、<br>④、基于效用推荐、<br>⑤、基于知识推荐以及<br>Ⅵ、组合推荐。</font></b><br><br>其中, 协同过滤是推荐系统算法中很重要的一环,这篇文章将主要向大家介绍该方法。
协同过滤的定义
协同过滤,英文名称为:Collaborative Filtering(协作过滤)。
根据维基百科上的定义:
“协同过滤是利用某<font color="#00ff00">兴趣相投、拥有共同经验</font>之<font color="#ff0000">群体的喜好</font>来推荐用户感兴趣的信息,<br><br>个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以<font color="#00ff00">达到过滤的目的</font>,进而<font color="#00ff00">帮助别人筛选信息</font>,<br><br>其中<font color="#00ff00">回应不一定局限于特别感兴趣</font>的,<font color="#00ff00">特别不感兴趣信息的纪录</font>也相当重要。”<br><br><br>
维基百科的定义可能有点生硬晦涩,我们来假设一个场景,如果你很喜欢<font color="#00ff00">刷剧</font>,经常会碰到<font color="#00ff00">剧荒</font>的情况,虽然新出的美剧,韩剧有很多,<br><br>但是你不确定哪部剧比较适合你的<font color="#00ff00">口味</font>,而你又不想花大量时间在<font color="#00ff00">选剧</font>上,这时你可能会选择<font color="#00ff00">询问</font>和自己有着<font color="#00ff00">相同口味的朋友</font>,<br><br>哪部剧值得推荐,从而达到以<font color="#00ff00">最小的开销</font>来<font color="#00ff00">找到自己喜欢的电视剧的目的</font>,这就是协同过滤的主要思想。
与基于内容过滤的不同
基于内容过滤
协同过滤与传统的基于内容过滤不同
基于<font color="#00ff00">内容过滤</font>是先根据<font color="#00ff00">内容的属性</font>,得出<font color="#00ff00">内容之间的相关性</font>,然后通过<font color="#00ff00">用户的喜好</font>记录将<font color="#00ff00">相关性大的内容推荐</font>给用户。
协同过滤
而<font color="#00ff00">协同过滤</font>是<font color="#00ff00">直接分析用户的喜好</font>记录,在<font color="#00ff00">用户群体中寻找</font>与之有着相似兴趣喜好的<font color="#00ff00">其他用户</font>,<br><br>然后综合分析<font color="#ff0000">这些用户对某一特定内容的评价</font>,最后得出推荐系统为<font color="#00ff00">指定用户</font>对<font color="#00ff00">某一特定内容</font><font color="#ff0000">喜好程度</font>的<font color="#ff0000">预测</font>。
在大数据时代的背景下,我们拥有着海量的用户群体,<br><br>而协同过滤可以利用这大量的用户数据来发掘那些和你有着类似口味的用户,这些用户被称为<font color="#00ff00">你的邻居</font>,<br><br>然后推荐系统<font color="#00ff00">根据你邻居的喜好</font>组成一个排序的目录列表作为推荐提供给你。
协同过滤的实现
我们弄清楚协同过滤是什么之后,再来讨论下协同过滤是怎么实现的。
协同过滤主要由三个步骤,
<b>首先是获取用户群体的喜好记录</b>
获取用户的喜好数据是协同过滤算法的第一步,也是最基础的一步。
推荐系统的输入就是用户的喜好信息,所以不管你后面的推荐算法做的有多好,如果第一步没做好,那么最终得出的推荐效果也会很差。
那么,系统是怎么有效的获得用户的喜好信息呢?
其实,用户的所有行为都会被系统所记录,所以系统可以从用户的行为信息中抽取出用户的喜好信息。
<font color="#00ff00"><b>典型的用户行为分为显式和隐式2类</b></font>
<b><font color="#ff0000">显式</font></b>的用户行为比如用户对内容的评分、投票和转发等
<b><font color="#ff0000">隐式</font></b>的用户行为比如有在某个页面停留的时间,对某些物品的点击查看和购买行为等
推荐系统收集完用户的行为信息后,还需要对这大量的数据信息进行<b><font color="#00ff00">数据清洗</font></b>
其中<font color="#00ff00"><b>最关键的两步</b></font>就是<font color="#ff0000"><b>减噪</b></font>和<b><font color="#ff0000">归一化</font></b>
<b><font color="#ff0000">减噪</font></b>
<b><font color="#ff0000">归一化</font></b>
<font color="#ff0000">减噪</font>的目的是为了过滤掉用户行为中的一些失误操作以及数据中的一些噪音,从而使得系统分析可以更加的准确
<b><font color="#ff0000">手段</font></b>
过滤掉用户行为中的一些失误操作和数据中的噪音
<b><font color="#ff0000">目的</font></b>
使得系统分析可以更加准确
而<b><font color="#ff0000">归一化</font></b>的原因在于,在度量用户对内容喜好程度时,需要对<font color="#ff0000">不同类型</font>的用户<font color="#ff0000">数据进行统计</font>。<br><br>而有的数据<font color="#ff0000">取值范围很大,有的却很小</font>,<br><br>如果不进行归一化处理的话,这些<font color="#00ff00">数据将不具备可比性</font>。<br><br>因为大数值区间的<font color="#00ff00">数据属性权重</font>会变得很大,而小数值区间的数据属性权重就会变得微乎其微。<br><br>所以我们应该将这些<font color="#00ff00">数据都限制在同一个区间内</font>,<font color="#00ff00">但又不能破坏不同数据之间的相对关系</font>,<br><br>最简单的归一化操作就是将所有数据都进行<font color="#00ff00">适当的缩放</font>,使得他们的<font color="#00ff00">取值范围为[0,1]</font>
进行完以上的预处理操作后,系统可以选择不同的用户行为分析方法,最终得到一个反映用户对不同内容喜好程度的<font color="#00ff00">二维相似矩阵</font>,<br>矩阵里的值表示的是用户对不同内容的<font color="#00ff00">喜好程度</font>,取值范围为归一化后的[0,1]区间,类型是<font color="#00ff00">浮点数值</font>,如下图所示:
<b>然后找到与特定用户相类似的其他用户</b>
推荐系统收集到用户的喜好记录后,会根据这些用户信息来计算2个用户之间的相似程度,然后对指定用户进行推荐。
用于推荐的协同过滤算法具体分为三类
基于<b><font color="#ff0000">用户</font></b>的协同过滤
基于<b><font color="#ff0000">内容项</font></b>的协同过滤
基于<b><font color="#ff0000">模型</font></b>的协同过滤
<b><font color="#00ff00">【基于行的用户相似程度】<br></font></b>我们把上面得到的<font color="#00ff00">相似矩阵</font>的<font color="#00ff00">每一行</font>抽取出来,作为每个对应用户的<font color="#00ff00">行向量</font>,<br>而该行向量其实就是对应着该<font color="#00ff00">用户</font>对所有<font color="#ff0000">内容</font>的<font color="#00ff00">喜好程度</font>。<br><br>接着我们计算每2个行向量之间的<font color="#ff0000">相似度</font>,其实就是在计算对应用户间的<font color="#ff0000">相似度评价值</font>。<br><br><b><font color="#00ff00">【基于列的内容喜好程度】</font></b><br>当然,也可以把用户-内容喜好的二维矩阵的每一列抽取出来,对应所有用户对该内容的喜好程度,<br>然后再计算内容之间的相似度。<br><br><b><font color="#00ff00">【相似度算法】<br></font></b>常用的相似度计算方法有<br><font color="#ff0000">①欧几里得距离,<br>②余弦相似度以及<br>③皮尔森相关系数。</font>
扩展阅读
<b><font color="#00ff00">什么是向量</font></b>
https://baike.baidu.com/item/%E5%90%91%E9%87%8F/1396519?fr=aladdin
在数学中,向量(也称为欧几里得向量、几何向量、矢量),指<font color="#00ff00">具有大小(magnitude)和方向的量</font>。<br><br>它可以形象化地表示为带箭头的线段。<br><br>箭头所指:代表向量的方向;<br><br>线段长度:代表向量的大小。<br><br>与向量对应的量叫做数量(物理学中称标量),数量(或标量)只有大小,没有方向。
向量的记法:印刷体记作黑体(粗体)的字母(如a、b、u、v),书写时在字母顶上加一小箭头“→”。<br><br> [1] 如果给定向量的起点(A)和终点(B),可将向量记作AB(并于顶上加→)。<br><br>在空间直角坐标系中,也能把向量以数对形式表示,例如xOy平面中(2,3)是一向量。
在物理学和工程学中,<font color="#00ff00">几何向量</font>更常被称为<font color="#00ff00">矢量</font>。<br><br>许多物理量都是矢量,比如一个物体的位移,球撞向墙而对其施加的力等等。<br><br>与之相对的是<font color="#00ff00">标量</font>,即<font color="#00ff00">只有大小而没有方向</font>的量。<br><br>一些与向量有关的定义亦与物理概念有密切的联系,例如向量势对应于物理中的<font color="#00ff00">势能</font>。
几何向量的概念在线性代数中经由抽象化,得到更一般的向量概念。<br><br>此处向量定义为向量空间的元素,要注意这些抽象意义上的向量不一定以数对表示,大小和方向的概念亦不一定适用。<br><br><br>因此,平日阅读时需按照语境来区分文中所说的"向量"是哪一种概念。<br><br>不过,依然可以找出一个向量空间的基来设置坐标系,也可以透过选取恰当的定义<br><br>,在向量空间上介定范数和内积,这允许我们把抽象意义上的向量类比为具体的几何向量。
相似度算法
欧几里得距离<br><br>(Euclidean Distance)<br>
欧几里得距离公式
欧几里得距离也叫欧式距离,是最常用,也是最简单的计算两个点之间距离的方法<br><br><br>
他的数学公式如下:假设在n维的空间中,存在两点A和B,<br><br>它们的坐标分别为:A=(x1,x2,...,xn ) ,B=(y1,y2,...,yn )。则它们的欧几里得距离为:
<br><br><font color="#ff0000">欧几里得距离公式</font>
<font color="#00ff00">欧几里得相似度公式</font>
当n=2或者n=3时,也就是在二维或者三维空间中,两个点之间的欧氏距离其实就是它们的实际距离。<br><br><font color="#00ff00">两个点距离越小,表示它们的相似度越大</font>,所以<font color="#00ff00">欧氏距离其实和相似度成反比关系</font>,<br><br>我们需要将欧氏距离取个倒数(分母加1是为了防止出现距离为0时的情况):
<br><br><font color="#00ff00"><b>欧几里得距离相似度公式</b></font>
余弦相似度<br><br>(Cosine Similarity)<br>
什么是余弦相似度?
余弦相似度主要用于计算文本之间的相似度,因为文档向量是比较稀疏的所以向量中很多值会等于0,表示该文档不具备某个词。<br><br>又因为任意两个文档肯定不会包含太多相同的词,所以如果统计 0-0 匹配的话,<br><br>那么很多文档都会与其他文档很相似(因为每个文档向量都有很多 0),这显然是不合理的。<br><br><br>
扩展阅读
文本相似度
https://51tools.info/textsimilarity/
1)余弦定理
:通过对两个文本分词,TF-IDF算法向量化,对比两者的余弦夹角,夹角越小相似度越高,<br><br>但由于有可能一个文章的<font color="#00ff00">特征向量词</font>特别多导致整个<font color="#00ff00">向量维度很高</font>,<br><br>使得<font color="#00ff00">计算的代价太大</font><font color="#ff0000">不适合大数据量的计算</font>。
2)SimHash
:算法的主要思想是<font color="#00ff00">降维</font>,将<font color="#ff0000">高维</font>的特征向量<font color="#ff0000">映射</font>成一个<font color="#ff0000">f-bit的指纹</font>(fingerprint),<br><br>通过比较两篇文章的f-bit指纹的Hamming Distance来确定文章是否重复或者高度近似。<br><br>由于每篇文章我们都可以<font color="#ff0000">事先计算好Hamming Distance来保存</font>,到时候直接通过Hamming Distance来计算<br><br>,所以速度<font color="#00ff00">非常快适合大数据计算</font>。<br><br>但是SimHash对于<font color="#00ff00">短文本误判率比较高</font>,因此建议大于500字以上的使用此算法。
NLP文本相似度(TF-IDF)
http://t.zoukankan.com/liangjf-p-8283519.html
<font color="#ff0000"><b>文本相似度的应用场景</b></font>
在生活中,<b><font color="#00ff00">信息检索、文档复制检测</font></b>等领域都应用到“文本相似度”。
可能有人觉得文本是文字,其实不尽然,文本相似度的应用更广,<br><br>除了<b><font color="#00ff00">文字</font></b>的匹配,还可以是<font color="#00ff00"><b>图片</b></font>,<font color="#00ff00"><b>音频</b></font>等,因为他们的实质都是在计算机中都是以<font color="#00ff00">二进制</font>的方式存在的。
举例来说
1. 搜索引擎
以文本搜文本
以图搜图
以音频搜音频
以视频搜视频
2. 文献精准推送
3. 文献查重
论文作弊检测
4. 自动问答
5. 聊天机器人
而余弦相似度则可以满足文档相似性匹配的要求,因为<font color="#00ff00">它不仅能忽略 0-0 匹配</font>,而且<font color="#00ff00">还能处理非二元向量</font>。
余弦相似度的具体公式如下:
<br><b><font color="#00ff00">余弦相似度公式</font></b>
利用余弦相似度计算新闻相似度的实践
https://www.cnblogs.com/qdhxhz/p/9484274.html
皮尔森相关系数<br><br>(Pearson Correlation Coefficient)<br>
什么是皮尔森相关系数
皮尔森相关系数是一种常用于<font color="#00ff00"><b>度量2个变量间紧密关系程度</b></font>的方法,取值范围在<font color="#00ff00"> -1 到 1 </font>之间。
其中<font color="#00ff00"><b> -1 是完全负相关, 0是无关,1表示完全正相关</b></font>,
皮尔森相关系数表达式如下:
<br><b><font color="#00ff00">皮尔森相关系数表达式<br><br></font></b>Sx,Sy 分别代表 A 和 B 的<font color="#ff0000"><b>样品标准偏差</b></font>。<br><br>
<b>最后得出推荐预测</b>
了解完相似度的计算后,我们就可以根据相似度进行推荐了。<br><br>
前面已经说过,推荐的关键步骤是要找出用户-内容的邻居,而<b style=""><font color="#ff0000">挑选邻居的规则</font></b>有两种:<br><br><b><font color="#00ff00">①、一是K近邻原则,<br>②、二是基于阈值的邻居原则。</font></b>
<b><font color="#00ff00">K近邻原则(K-neighborhoods)</font></b><br>
示意图如下所示,我们假设为用户1寻找他的邻居用户,<br><br>K近邻原则要求我们找到与之距离最近的前K个用户,如示意图中K取值为 4,则找到与用户1最近的前 4 个用户,分别为用户 2,3,4 和 5。<br><br><br>
<br><font color="#ff0000"><b>K近邻原则(K-neighborhoods)</b></font><br>
这样做有着<font color="#00ff00"><b>明显的缺点</b></font>,因为它不管实际距离为多少,都固定取 K 个邻居,这样可能导致的后果是那 K 个邻居可能有些与指定用户距离很远,<br><br>但被迫被认为与指定用户喜好相似,从而影响系统的<font color="#00ff00">推荐精度</font>。
这个问题对<b><font color="#00ff00">孤立点</font></b>来说更为严重。
总结
原则
找到距离最近的K个邻居
适用场景
数据稠密
缺点
不适用场景
数据稀疏,如对孤立点的推荐精度很差
<b><font color="#00ff00">基于阈值的邻居原则(Threshold-based neighborhoods)</font></b><br>
<br><b><font color="#ff0000">基于阈值的邻居原则(Threshold-based neighborhoods)</font></b><br>
示意图如下所示,它与 K 近邻原则有着很大的不同。
该原则给定距离 R,然后以指定用户为中心,距离 R 为半径画一个圆,落进该圆范围内的用户都认为是指定用户的邻居,<br><br>而不管这些用户的具体个数有多少。
这样的好处在于,可以确保得到的邻居用户与指定用户的<font color="#ff0000">相似度不会相差很远</font>。
基于阈值的邻居原则强调的是“<b><font color="#00ff00">宁缺毋滥</font></b>”,它比 K 近邻原则效果要好,尤其是在<font color="#ff0000"><b>数据稀疏</b></font>的情况下。
总结
原则
宁缺毋滥
适用场景
数据稀疏
方法
给定距离R,以指定用户为中心,距离R伟半斤画一个圆,落进该圆的用户都认为是指定用户的邻居
优点
邻居与指定用户的相似度不会相差很远
四、协同过滤的分类<br>
当得到指定用户或者内容的邻居后,我们就可以利用这些数据信息为用户进行详细的推荐了。
前面提到过,协同过滤算法分成三类
<b><font color="#00ff00">基于用户的协同过滤</font></b>( User-based CF )
什么是基于用户的协同过滤(User-based CF)
基于用户的协同过滤( User-based CF )是最早被提出来的算法。
是根据用户对不同内容的喜好程度找到他的邻居用户,然后将这些邻居喜欢的内容排序推荐给指定用户。
User-based CF的具体流程是什么
首先利用<font color="#00ff00">相似矩阵的行向量</font>,即代表每个用户<font color="#00ff00">对所有内容</font>的<font color="#00ff00">喜好程度</font>,来计算得出<font color="#ff0000">每个用户间的相似度</font>。
然后根据相似性结果找到 <font color="#00ff00">K个最近的邻居用户</font>(这里用的<font color="#ff0000">K近邻原则或者基于阈值的邻居原则</font>)
再根据邻居的相似性程度对他们进行<font color="#00ff00">加权</font>,利用权重和他们对内容的喜好程度,<font color="#ff0000">预测指定用户</font>可能也会喜欢的内容
最终<font color="#00ff00">得出一个经过排序的内容列表</font>作为该指定用户的推荐。
User-based CF的案例
将用户A作为指定用户,根据他的用户行为,系统可以得出<font color="#00ff00">他对不同内容项的喜好程度</font>,利用这些信息找到他的邻居。<br><br>示例中用户C即为用户A的邻居用户,所以将用户C喜好的内容D推荐给用户A<br>
得出A和C对内容的喜好程度更接近
<br><b><font color="#00ff00">基于用户的协同过滤 User-based CF</font></b>
User-based CF的适用场景是什么
基于用户的协同过滤算法适用于一些<font color="#00ff00"><b>新闻、微博或者其他媒体的推荐系统</b></font>,<br><br>
因为对于这些推荐系统来说,<font color="#00ff00">内容项的数量是远远多于用户的数量</font>,而且<font color="#00ff00">内容更新很快</font>,<br><br><br>
所以与计算内容项之间的相似性相比,我们计算用户之间的相似性可以<font color="#00ff00">大大的减少计算量。</font>
<b><font color="#00ff00">基于内容项的协同过滤</font></b>( Item-based CF )
什么是基于内容的协同过滤 Item-based CF
与基于用户的协同过滤的区别是什么??
基于内容的协同过滤,他与基于用户的协同过滤区别主要在于,<br><br>他是通过<font color="#00ff00"><b>计算内容项之间的相似性</b></font>,而非计算用户间的相似性来得到指定用户的推荐列表。
注意,中间是得到内容与内容之间的关系,如经典的啤酒与尿布的故事
Item-based CF的具体流程是什么?
首先利用相似矩阵的<font color="#00ff00"><b>列向量</b></font>,即代表所有用户对内容项的喜好程度,来<font color="#ff0000">计算得到内容项之间的相似度</font>。
然后利用<font color="#ff0000">指定用户的历史喜好信息</font>,得到一个排序的相似内容列表作为推荐预测。
划重点:
需要指定用户的历史喜好信息
Item-based CF的案例
Fig 6也给出了一个示例
根据所有用户的喜好记录,喜欢内容B的用户大部分也喜欢内容D,也就是说内容B的邻居是内容D,<br><br>而指定用户A喜欢内容B,所以根据基于内容项的协同过滤,<br><br>我们可以预测用户A也应该会喜欢内容D
<br><b><font color="#00ff00">基于内容的协同过滤 Item-based CF</font></b>
Item-based CF的适用场景
基于内容项的协同过滤适用于电子商务网站,如淘宝、京东。拼多多,当当等
因为这些网站的用户数量是海量的,而商品内容的数据相对比较稳定,因此计算内容项之间的相似性可以减少计算量,也不需要频繁的进行更新
<b><font color="#00ff00">基于模型的协同过滤</font></b>( Model-based CF )
什么是基于模型的协同过滤
Model-based CF是目前较为流行的协同过滤类型,她的思想和前面2个类型有较大的区别<br>
和基于用户的协同过滤和基于内容的协同过滤的区别是什么
基于记忆的协同过滤算法<br>Memory-based CF
基于用户的协同过滤和基于内容项的协同过滤都属于<font color="#00ff00"><b>基于记忆的协同过滤算法(Memory-based CF)</b></font>。。<br><br>他们<font color="#ff0000">难以处理大量的数据集</font>,所以<font color="#ff0000">不适用于一些对时效性要求高</font>的应用。
基于模型的协同过滤算法<br>Model-based CF
而基于模型的协同过滤可以胜任该任务,他可以利用<font color="#00ff00">用户和喜好内容间</font>的<font color="#ff0000">历史数据</font>,<br><br><font color="#00ff00">预测</font>出<font color="#00ff00">用户和未知内容之间</font>的喜好关系,最后找到<font color="#00ff00">喜好程度最高</font>的内容推荐给指定用户。
基于模型的协同过滤主要利用了<font color="#ff0000"><b>机器学习</b></font>的方法,对样本的用户喜好数据进行<font color="#ff0000"><b>建模</b></font>,<br><br>并将训练好的模型来预测未知得用户喜好数据,最终得出推荐
他的复杂度高,因为对模型进行训练和评估需要花费大量的时间和精力
收藏
0 条评论
下一页