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

el/2024/7/17 22:27:21

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”

 

ItemCF:ItemCollaborationFilter,基于物品的协同过滤

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

比如,用户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.ngui.cc/el/5557008.html

相关文章

Neo4j简介及Py2Neo的用法(python操作neo4j)

博客原文: http://cuiqingcai.com/4778.html

neo4j图数据库--Cypher语言入门 二

1、 什么是Cypher 2、写(create、merge、set、delete、remove、foreach、import) 3、读(match、optional match、where、start、聚合) 4、常规(return、order by、limit、skip、with、unwind、union) 5…

SVM支持向量机算法介绍

如果你是一名模式识别专业的研究生,又或者你是机器学习爱好者,SVM是一个你避不开的问题。如果你只是有一堆数据需要SVM帮你处理一下,那么无论是Matlab的SVM工具箱,LIBSVM还是python框架下的SciKit Learn都可以提供方便快捷的解决方…

微信跳一跳游戏外挂(mac电脑+android手机)

外挂源码地址:https://github.com/wangshub/wechat_jump_game 1.先下载github的脚本代码 进入下载后的文件夹,安装依赖文件 pip install -r requirements.txt 2.安装brew(如果有可忽略,直接执行第二步) 安装方法如下&a…

nlp--Latent Semantic Analysis(LSA/ LSI)算法简介

1. 传统向量空间模型的缺陷 向量空间模型是信息检索中最常用的检索方法,其检索过程是,将文档集D中的所有文档和查询都表示成以单词为特征的向量,特征值为每个单词的TF-IDF值,然后使用向量空间模型(亦即计算查询q的向量和每个文档d…

奇异值分解(SVD)、主成分分析(PCA)、潜在语义索引(LSI)

一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于常用的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧&am…

数据挖掘之关联分析

数据挖掘之关联分析一(基本概念) 数据挖掘之关联分析二(频繁项集的产生) 数据挖掘之关联分析三(规则的产生) 数据挖掘之关联分析四(连续属性处理) 数据挖掘之关联分析五(…

sklearn包中K近邻分类器 KNeighborsClassifier的使用

1. KNN算法 K近邻(k-Nearest Neighbor,KNN)分类算法的核心思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法可用于多分类,KNN算法不仅可以用于分类&#xff0…

nlp--使用NLTK进行简单文本分析

原文:http://blog.csdn.net/zzulp/article/details/76146947 nltk的全称是natural language toolkit,是一套基于python的自然语言处理工具集。 1 NLTK的安装 nltk的安装十分便捷,只需要pip就可以。 pip install nltk 在nltk中集成了语料与模型…

nlp---使用NLTK进行建构词性标注器

自然语言是人类在沟通中形成的一套规则体系。规则有强有弱,比如非正式场合使用口语,正式场合下的书面语。要处理自然语言,也要遵循这些形成的规则,否则就会得出令人无法理解的结论。下面介绍一些术语的简单区别。 文法&#xff1a…