ItemCF,基于物品的协同过滤算法

转载自   ItemCF,基于物品的协同过滤算法

ItemCF:Item Collaboration Filter,基于物品的协同过滤

算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品。

比如,用户A之前买过《数据挖掘导论》,该算法会根据此行为给你推荐《机器学习》,但是ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。

==>该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

基于物品的协同过滤算法主要分为两步:

一、计算物品之间的相似度;

二、根据物品的相似度和用户的历史行为给用户生成推荐列表;


下面分别来看这两步如何计算:

一、计算物品之间的相似度:

我们使用下面的公式定义物品的相似度:


其中,|N(i)|是喜欢物品i的用户数,|N(j)|是喜欢物品j的用户数,|N(i)&N(j)|是同时喜欢物品i和物品j的用户数。

从上面的定义看出,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,两个物品相似度越高,说明这两个物品共同被很多人喜欢。

这里面蕴含着一个假设:就是假设每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度。


举例,用户A对物品a、b、d有过行为,用户B对物品b、c、e有过行为,等等;


依此构建用户——物品倒排表:物品a被用户A、E有过行为,等等;


建立物品相似度矩阵C:



其中,C[i][j]记录了同时喜欢物品i和物品j的用户数,这样我们就可以得到物品之间的相似度矩阵W。


在得到物品之间的相似度后,进入第二步。

二、根据物品的相似度和用户的历史行为给用户生成推荐列表:

ItemCF通过如下公式计算用户u对一个物品j的兴趣:


其中,Puj表示用户u对物品j的兴趣,N(u)表示用户喜欢的物品集合(i是该用户喜欢的某一个物品),S(i,k)表示和物品i最相似的K个物品集合(j是这个集合中的某一个物品),Wji表示物品j和物品i的相似度,Rui表示用户u对物品i的兴趣(这里简化Rui都等于1)。

该公式的含义是:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。


下面是一个书中的例子,帮助理解ItemCF过程:



至此,基础的ItemCF算法小结完毕。



下面是书中提到的几个优化方法:

(1)、用户活跃度对物品相似度的影响

即认为活跃用户对物品相似度的贡献应该小于不活跃的用户,所以增加一个IUF(Inverse User Frequence)参数来修正物品相似度的计算公式:


用这种相似度计算的ItemCF被记为ItemCF-IUF。

ItemCF-IUF在准确率和召回率两个指标上和ItemCF相近,但它明显提高了推荐结果的覆盖率,降低了推荐结果的流行度,从这个意义上说,ItemCF-IUF确实改进了ItemCF的综合性能。


(2)、物品相似度的归一化

Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确度。其研究表明,如果已经得到了物品相似度矩阵w,那么可用如下公式得到归一化之后的相似度矩阵w':


最终结果表明,归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。

用这种相似度计算的ItemCF被记为ItemCF-Norm。

以上内容参考自《推荐系统实践》


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

Swagger是一个描述RESTful的Web API的规范和框架。如果使用ASP.NET的话,可以用Swashbuckle来自动生成Swagger,具体参考如何使 WebAPI 自动生成漂亮又实用在线API文档。下面详细的介绍一下如何给ASP.NET Core的项目自动生成Swagger的API帮助文档。 创建ASP.NET Core的…

涨知识 | 100个中国最难读的地名,第一个就折了

内容来源网络,侵删! 1.浙江丽水的丽,不读l,读l。 2.浙江台州、天台的台,不读ti,读tāi。 3.浙江嵊州的嵊,读音为shng。 4.浙江鄞县的鄞,读音为yn,不读jn。 5.浙江乐清的乐…

JSP 教程

JSP 教程JSP 教程JSP 简介JSP 开发环境搭建Eclipse JSP/ServletJSP 结构JSP 生命周期JSP 语法JSP 指令JSP 动作元素JSP 隐式对象JSP 客户端请求JSP 服务器响应JSP HTTP 状态码JSP 表单处理JSP 过滤器JSP Cookie 处理JSP SessionJSP 文件上传JSP 日期处理JSP 页面重定向JSP 点击…

IronPython项目有了新负责人

运行IronPython项目的社区领导职责已经交给了Alex Earl和Benedikt Eggers。之前的负责人Jeff Hardy自微软在2010年不再积极参与以来一直负责项目的运行。 Jeff Hardy写道: 应该已经相当明显了,IronPython项目有点停滞不前,那主要是我的错&…

修改Tomcat编码方式的两种方法

转载自 修改Tomcat编码方式的两种方法方法一:推荐,不会影响到其它项目 见我的另一篇博客:http://www.cnblogs.com/x_wukong/p/3292664.html 修改方法: 修改tomcat下的conf/server.xml文件,找到Connector标签&#x…

Microsoft宣布.NET Core支持计划

微软宣布针对.NET Core、ASP.NET Core和Entity Framework Core的支持计划。据来自微软的Lee Coward介绍,公司计划使用一种双管齐下的方法来管理这些系统的发布。该计划回答了微软开源计划背后的其中一个主要问题——开发人员可以在多长时间内依赖微软向这些年轻的项…

《机器学习项目开发实战》送书活动结果公布

截止到8月8日24:00,本次送书活动 共收到70位同学参与回复,本次很多同学在看到活动的书《机器学习项目开发实践》,自行就到各大网络商店上购买了书,据反馈这个书很不错,小二昨天也收到一本人民邮电出版社的书…

如何在局域网访问Tomcat项目

转载自 如何在局域网访问Tomcat项目1 前言有时候因为工作需要,我们需要访问服务器上的项目或是把你的机器上的项目让你的同事访问到,诸如此类的,都涉及到了这个课题:如何在局域网访问Tomcat项目?而tomcat本身是支持局…

键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)

package com.coffn.demos; /*** 4、键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。例如:12345 数出54321 78760 输出6787(0省去)*/ import java.util.Scanner;public class Demo1 {public static vo…

Entity Framework Core延期及弃用的特性

由于破坏了向后兼容性,Entity Framework的名声相当不光彩,但与Entity Framework Core的完全重写相比就相形见绌了。在本文中,InfoQ将着眼于其中部分主要特性的变化及其影响。 延期及弃用的特性 首先,我们将看下那些EF Core 1.0没有…

JSP页面EL表达式不解析

转载自 JSP页面EL表达式不解析问题是这样:在搭建springMVC环境的时候,笔者写了一个简单的Controller如下:Controller public class HelloController {RequestMapping(value "/hello.do", method RequestMethod.GET)public Strin…

将字符串String str= “abc god 中国 java“ 反转每个单词 结果: “cba dog 国中

/*** String str "abc god 中国 java"(较难) 反转每个单词结果: "cba dog 国中 avaj"**/ public class Demo2 {public static void main(String[] args) {String str …

netcore - MVC的ActionFilter的使用

经过一周的时间没有分享文章了,主要是在使用.netcore做一个小的项目,项目面向大众用户的增删改查都做的差不多了,打算本周在云服务器上部署试试,很期待,也希望上线后大家多多支持;以上纯属个人废话&#xf…

启动tomcat不出现命令窗口

转载自 启动tomcat不出现命令窗口 有个软件要安装在U盘中,B/S结构,用tomcat做应用服务器,客户要求tomcat不能注册为系统服务,启动时tomcat启动时不能出现命令行窗口,怎么实现?根据你的问题描述&#xff0c…

猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示‘您真是个天才’,若10也没猜对,显示“您太笨了,下次努力吧!”, 若是第2-10次猜对了,只简单的显示:“恭喜您猜对了”。

猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示‘您真是个天才’,若10也没猜对,显示“您太笨了,下次努力吧!”, 若是第2-10次猜对了,只简单的显示:“恭喜您猜对了…

Java:对double值进行四舍五入,保留两位小数的几种方法

转载自 Java:对double值进行四舍五入,保留两位小数的几种方法1. 功能 将程序中的double值精确到小数点后两位。可以四舍五入,也可以直接截断。 比如:输入12345.6789,输出可以是12345.68也可以是12345.67。至于是否需…

有一种陪伴不在身边,却在心间

内容来源:这里 有一种情,不求朝暮相见 只想在灵魂深处相偎 能多久,就多久 有一种朋友不在生活里 却在生命里 有一种陪伴不在身边 却在心间 每天在朋友圈都可以看到 你的行踪或心语 有空回复一下 感觉彼此就在面前,全心一笑…

NSubstitute完全手册索引

NSubstitute 是什么? NSubstitute 是一个 .NET 单元测试模拟类库。 一直以来,开发者对 mocking 类库的语法的简洁性有强烈的需求,NSubstitute 试图满足这一需求。简单明了的语法可以让我们将重心放在测试本身,而不是纠缠在测试替代…

如何彻底删除MySQL数据库(保姆级教学)

如何彻底删除MySQL数据库: 一、首先在控制面板删除你的MySQL数据库的部分安装 如图所示: 二、打开你的C盘,在Program Files 或者 Program Files(x86)里面找到有关MySQL的所有文件夹,并删除 如图所示&…

获取一个 Byte 的各个 Bit 值

转载自 获取一个 Byte 的各个 Bit 值1. bit:位 一个二进制数据0或1,是1bit;2. byte:字节 存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45) 即是指 45个字节; 1 byte 8 bit3. 一…