协同过滤

协同过滤

点点圈 提交于 2019-12-12 06:34:32
协同过滤算法 算法思想 :物以类聚,人以群分 基本的协同过滤推荐算法基于以下假设: “跟你喜好相似的人喜欢的东西你也很很大可能喜欢” :基于用户的协同过滤推荐(User-based CF) “跟你喜欢的东西相似的东西你也很有可能喜欢 ”:基于物品的协同过滤推荐(Item-based CF) 实现协同过滤推荐有以下几个步骤: 找出最相似的人或物品:TOP-N相似的人或物品 通过计算两两的相似度来进行排序,即可找出TOP-N相似的人或物品 根据相似的人或物品产生推荐结果 利用TOP-N结果生成初始推荐结果,然后过滤掉用户已经有过记录的物品或明确表示不感兴趣的物品 以下是一个简单的示例,数据集相当于一个用户对物品的购买记录表:打勾表示用户对物品的有购买记录 例如 关于相似度计算这里先用一个简单的思想:如有两个同学X和Y,X同学爱好[足球、篮球、乒乓球],Y同学爱好[网球、足球、篮球、羽毛球],可见他们的共同爱好有2个,那么他们的相似度可以用:2/3 * 2/4 = 1/3 ≈ 0.33 来表示。 基本用户的 CF 来源: CSDN 作者: AutismPatiente 链接: https://blog.csdn.net/AutismPatiente/article/details/103496807

协同过滤算法

ε祈祈猫儿з 提交于 2019-12-11 23:19:20
推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。 1. 推荐算法概述 推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。概括来说,可以分为以下5种: 基于内容的推荐 这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。这一类由于需要NLP的基础,本文就不多讲,在后面专门讲NLP的时候再讨论。 协调过滤推荐 本文后面要专门讲的内容。协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。 混合推荐 这个类似我们机器学习中的集成学习,博才众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐

推荐系统中协同过滤算法实现分析

烈酒焚心 提交于 2019-12-05 21:38:33
原创博客,欢迎转载,转载请注明: http://my.oschina.net/BreathL/blog/62519 最近研究Mahout比较多,特别是里面协同过滤算法;于是把协同过滤算法的这个实现思路与数据流程,总结了一下,以便以后对系统做优化时,有个清晰的思路,这样才能知道该如何优化且优化后数据亦能正确。 推荐中的协同过滤算法简单说明下: 首先,通过分析用户的偏好行为,来挖掘出里面物品与物品、或人与人之间的关联。 其次,通过对这些关联的关系做一定的运算,得出人与物品间喜欢程度的猜测,即推荐值。 最后,将推荐值高的物品推送给特定的人,以完成一次推荐。 这里只是笼统的介绍下,方便下边的理解,IBM的一篇博客对其原理讲解得浅显易懂,同时也很详细 《 深入推荐引擎相关算法 - 协同过滤》 ,我这里就不细讲了。 协同过滤算法大致可分为两类,基于物品的与基于用户的;区分很简单,根据上面的逻辑,若你挖掘的关系是物品与物品间的,就是基于物品的协同过滤算法,若你挖掘的关系是用户与用户间的,就是基于用户的协同过滤算法;由于它们实现是有所不同,所以我分开整理,先来看看基于物品的协同过滤实现,我自己画了一幅图: 我通过数字的顺序,来标示数据变化的方向(由小到大);下面分析下每一个步骤的功能以及实现。 首先,说明下两个大的数据源, 用户偏好数据 :UserID、ItemID、Preference

深入推荐引擎相关算法

时光毁灭记忆、已成空白 提交于 2019-12-05 03:07:34
在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现。 Apache Mahout 是 ASF 的一个较新的开源项目,它源于 Lucene ,构建在 Hadoop 之上,关注海量数据上的机器学习经典算法的高效实现。 点击下面地址阅读全文: http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/ 来源: oschina 链接: https://my.oschina.net/u/129540/blog/14612

协同过滤的itemCF,userCF区别适用场景

≡放荡痞女 提交于 2019-12-03 21:14:52
UserCF原理:UserCF给用户推荐那些和他具有共同兴趣爱好的用户喜欢的物品 ItemCF原理:ItemCF给用户推荐那些和他之前喜欢的物品类似的物品 UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的 热门程度 ;而ItemCF的推荐更加 个性化 ,反映了用户自己的兴趣传承 UserCF适合于新闻推荐的原因: 热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要 UserCF需要维护一个用户兴趣相似表,而ItemCF需要维护一个物品相似表,在新闻推荐系统中物品的更新速度是很快的,那么如果采用ItemCF的话,物品相似度表也需要很快地更新,这是难以实现的 ItemCF适合于图书、电子商务和电影网站的原因: 用户的兴趣是比较固定和持久的 这些系统中用户不太需要流行度来辅助他们判断一个物品的好坏,而是可以通过自己熟知的领域的知识自己判断物品的质量 UserCF的适用场合: 用户较少的场合,如果用户很多,计算用户相似度度矩阵代价很大(新闻网站) 时效性较强,用户个性化兴趣不太明显的领域 不需要给出令用户信服的推荐解释 ItemCF的适用场合: 适用于物品的数量明显小于用户的数量的场合,如物品很多(网站),计算物品的相似度矩阵代价很大 长尾物品丰富,用户个性化需求强烈的领域 需要利用用户的历史行为给用户做推荐解释,可以令用户比较信服 来源: https:/

协同过滤推荐算法

时光总嘲笑我的痴心妄想 提交于 2019-12-02 11:50:38
一、推荐算法 当你在电商网站购物时,天猫会弹出“和你买了同样物品的人还买了XXX”的信息;当你在SNS社交网站闲逛时,也会看到“你可能认识XXX“的信息;当你在微博添加关注人时,也会看到“你可能对XXX也感兴趣”等等。所有这一切,都是背后的推荐算法运作的结果。 推荐算法,不是某一个也不是某一类算法,凡是能实现推荐功能的算法(比如关联算法、分类算法、聚类算法),都可称之为推荐算法。 推荐功能就是为用户(User)推荐商品(Item)。 依据不同的角度,推荐大致分为以下几种: 1)基于内容的推荐:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。 2)基于流行度的推荐:常见的比如基于最多用户点击、最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。 3)基于人口统计信息的推荐:这一类是最简单的,它只是简单的根据用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。 4)混合推荐:这个类似机器学习中的集成学习,博采众长,通过多个推荐算法的结合得到一个更好的。 5)协同过滤推荐:目前最主流的,花样繁多,在工业界已经有了很广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法得到较好的推荐效果。工程上容易实现

推荐算法初探

丶灬走出姿态 提交于 2019-12-01 05:02:22
1. 推荐算法简介 0x1:关于推荐的几个小故事 在开始讨论抽象具体的算法和公式之前,笔者希望先通过几个小故事,来帮助读者朋友建立一个对推荐算法的感性理解。同时我们也可以更好地体会到在现实复杂世界中,推荐是一项非常复杂的事情,现在的最新的推荐算法可能只模拟了其中30%不到的程度。 1. 150年前美国西部小镇的生活情形 假想150年前一个美国小镇的生活情形,大家都互相认识: 百货店某天进了一批布料,店员注意到这批布料中某个特定毛边的样式很可能会引起Clancey夫人的高度兴趣,因为他知道Clancey夫人喜欢亮花纹样,于是他在心里记着等Clancey夫人下次光顾时将该布料拿给她看看。 Chow Winkler告诉酒吧老板Wilson先生,他考虑将多余的雷明顿(Renmington)来福枪出售,Wilson先生将这则消息告诉Bud Barclay,因为他知道Bud正在寻求一把好枪。 Valquez警长及其下属知道Lee Pye是需要重点留意的对象,因为Lee Pye喜欢喝酒,并且性格暴躁、身体强壮 100年前的小镇生活都与 人和人之间的联系 有关。人们知道你的喜好、健康和婚姻状况。不管是好是坏,大家得到的都是 个性化的体验 。那时,这种高度个性化的社区生活占据了当时世界上的大部分角落。 请注意,这里每个人都对其他 每个人的个性和近期情况 非常了解

协同过滤 Collaborative Filtering

匆匆过客 提交于 2019-11-30 06:19:32
协同过滤 collaborative filtering 人以类聚,物以群分 相似度 1. Jaccard 相似度 定义为两个集合的交并比: Jaccard 距离,定义为 1 - J(A, B),衡量两个集合的区分度: 为什么 Jaccard 不适合协同过滤?—— 只考虑用户有没有看过,没考虑评分大小。 2. 余弦相似度 根据两个向量夹角的余弦值来衡量相似度: 为什么余弦相似度不适合协同过滤?—— 不同用户各自评分总和不一样,导致评分占总比不一样,可能计算出和事实相反的结果。 3. Pearson 相似度 解决余弦相似度中的相似度差异问题,又称中心余弦算法。先中心化,再算余弦相似度,这样正值表示正相关,负值表示负相关。 基于用户的协同过滤 通过用户对物品的喜爱程度进行度量和打分。根据不同用户对相同商品或内容的态度进行商品推荐。 举例说明,每个行向量表示某个用户对所有电影的评分 先把数据中心化 然后计算用户 A 和其他用户的 Pearson 相关系数: 可以发现用户 A 和用户 B 喜好接近,因此可以将 B 喜欢但 A 没看过的密室推荐给 A,同时也可以将 A 喜欢但 B 没看过的火焰杯推荐给 B。 用户法存在的问题:   1. 数据稀疏性。物品太多,不同用户之间买的物品重叠性较低,导致无法找到一个偏好相似的用户   2. 算法扩展性。最近邻算法的计算量随着用户和物品数量的增加而增加

推荐系统| 基于协同过滤

坚强是说给别人听的谎言 提交于 2019-11-29 23:55:12
基于协同过滤的推荐算法 协同过滤(Collaborative Filtering,CF) 基于近邻的协同过滤     基于用户(User-CF)     基于物品(Item-CF) 基于模型的协同过滤     奇异值分解(SVD)     潜在语义分析(LSA)     支撑向量机(SVM) 1. 协同过滤CF的推荐 基于内容(Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容 CF 可以解决 CB 的一些局限     物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐     CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干扰     CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系) 分为两类:基于近邻和基于模型 2. 基于近邻的推荐 基于近邻的推荐系统根据的是相同“口碑”准则 是否应该给Cary推荐《泰坦尼克号》? 基于用户的协同过滤(User-CF) 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品 在一般的应用中是采用计算“K- 近邻”的算法;基于这 K 个邻居的历史偏好信息,为当前用户进行推荐 User

基于flink的协同过滤

给你一囗甜甜゛ 提交于 2019-11-29 00:13:19
最近flink较火,尝试使用flink做推荐功能试试,说干就干,话说flink-ml确实比较水,包含的算法较少,且只支持scala版本,以至flink1.9已经将flink-ml移除,看来是准备有大动作,但后期的实时推荐,flink能派上大用场。所幸基于物品的协同过滤算法相对简单,实现起来难度不大。先看目前推荐整体的架构。 先说一下用到的相似算法: X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn) 那么欧式距离为: 很明显,值越大,相似性越差,如果两者完全相同,那么距离为0。 第一步准备数据,数据的格式如下: actionObject 是房屋的编号,actionType是用户的行为,包括曝光未点击,点击,收藏等。 下面的代码是从hdfs中获取数据,并将view事件的数据清除,其他的行为转化为分数 public static DataSet<Tuple2<Tuple2<String, String>, Float>> getData(ExecutionEnvironment env, String path) { DataSet<Tuple2<Tuple2<String, String>, Float>> res= env.readTextFile(path).map(new MapFunction<String, Tuple2<Tuple2