1 推举引擎的分类

推荐系统 | 协同过滤原详解_用户_物品 文字写作

推举引擎根据不同依据如下分类:

根据其是不是为不同的用户推举不同的数据,分为基于大众行为(网站管理员自行推举,或者基于系统所有用户的反馈统计打算出确当下比较盛行的物品)、及个性化推举引擎(帮你找志同道合,意见意义相投的朋友,然后在此根本上实施推举);

根据其数据源,分为基于人口统计学的(用户年事或性别相同剖断为相似用户)、基于内容的(物品具有相同关键词和Tag,没有考虑人为成分),以及基于协同过滤的推举(创造物品,内容或用户的干系性推举,分为三个子类,下文阐述);

根据其建立办法,分为基于物品和用户本身的(用户-物品二维矩阵描述用户喜好,聚类算法)、基于关联规则的(The Apriori algorithm算法是一种最有影响的挖掘布尔关联规则频繁项集的算法)、以及基于模型的推举(机器学习,所谓机器学习,即让打算机像人脑一样持续学习,是人工智能领域内的一个子领域)。

关于上述第二个分类(2、根据其数据源)中的基于协同过滤的推举:随着 Web2.0 的发展,Web 站点更加提倡用户参与和用户贡献,因此基于协同过滤的推举机制因运而生。
它的事理很大略,便是根据用户对物品或者信息的偏好,创造物品或者内容本身的干系性,或者是创造用户的干系性,然后再基于这些关联性进行推举。

而基于协同过滤的推举,又分三个子类:

基于用户的推举(通过共同口味与偏好找相似邻居用户,K-邻居算法,你朋友喜好,你也可能喜好),

基于项目的推举(创造物品之间的相似度,推举类似的物品,你喜好物品A,C与A相似,可能也喜好C),

基于模型的推举(基于样本的用户喜好信息布局一个推举模型,然后根据实时的用户喜好信息预测推举)。

我们看到,此协同过滤算法最大限度的利用用户之间,或物品之间的相似干系性,而后基于这些信息的根本上实施推举。
下文还会详细先容此协同过滤。

不过一样平常实践中,我们常日还是把推举引擎分两类:

第一类称为协同过滤,即基于相似用户的协同过滤推举(用户与系统或互联网交互留下的统统信息、蛛丝马迹,或用户与用户之间千丝万缕的联系),以及基于相似项目的协同过滤推举(尽最大可能创造物品间的相似度);

第二类便是基于内容剖析的推举(调查问卷,电子邮件,或者推举引擎对本blog内容的剖析)。

2 协同过滤推举

协同过滤是利用集体聪慧的一个范例方法。
要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个大略的问题,如果你现在想看个电影,但你不知道详细看哪部,你会怎么做?大部分的人会问问周围的朋友或者称之为广义上的邻居(neighborhood),看看最近有什么好看的电影推举,而我们一样平常更方向于从口味比较类似的朋友那里得到推举。
这便是协同过滤的核心思想。
如下图,你能从图中看到多少信息?

2.1 协同过滤推举步骤

做协同过滤推举,一样平常要做好以下几个步骤:

1)若要做协同过滤,那么网络用户偏好则成了关键。
可以通过用户的行为诸如评分(如不同的用户对不同的作品有不同的评分,而评分靠近则意味着喜好口味附近,便可剖断为相似用户),投票,转发,保存,书签,标记,评论,点击流,页面勾留韶光,是否购买等得到。
如下面第2点所述:所有这些信息都可以数字化,如一个二维矩阵表示出来。

2)网络了用户行为数据之后,我们接下来便要对数据进行减噪与归一化操作(得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一样平常是 [0,1] 或者 [-1, 1] 的浮点数值)。

两大实战项目:基于FM的电影推举系统 + 基于libfm的电商CTR预估

配套课程做事:共学社群答疑 + 全套课件代码 + CPU云平台

理论和实践完美结合,每个算法配套项目实战代码完备学会深度学习的实质和运用。

下面再大略先容下减噪和归一化操作。

所谓减噪:用户行为数据是用户在利用运用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的剖析更加精确(类似于网页的去噪处理)。

所谓归一化:将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确。
最大略的归一化处理,便是将各种数据除以此类中的最大值,以担保归一化后的数据取值在 [0,1] 范围中。
至于所谓的加权,很好理解,由于每个人占的权值不同,类似于一场唱歌比赛中对某几个选手进行投票决定其是否晋级,不雅观众的投票抵1分,专家评委果投票抵5分,末了得分最多的选手直接晋级。

3)找到相似的用户和物品,通过什么路子找到呢?便是打算相似用户或相似物品的相似度。

4)相似度的打算有多种方法,不过都是基于向量Vector的,实在也便是打算两个向量的间隔,间隔越近相似度越大。
在推举中,用户-物品偏好的二维矩阵下,我们将某个或某几个用户对莫两个物品的偏好作为一个向量来打算两个物品之间的相似度,或者将两个用户对某个或某几个物品的偏好作为一个向量来打算两个用户之间的相似度。

以是说,很大略,找物品间的相似度,用户不变,找多个用户对物品的评分;找用户间的相似度,物品不变,找用户对某些个物品的评分。

5)而打算出来的这两个相似度则将作为基于用户、项目的两项协同过滤的推举。

常见的打算相似度的方法有:欧几里德间隔,皮尔逊干系系数(如两个用户对多个电影的评分,采纳皮尔逊干系系数等干系打算方法,可以决议出他们的口味和偏好是否同等),Cosine相似度,Tanimoto系数。

下面,大略先容个中的欧几里得间隔与皮尔逊干系系数:

欧几里德间隔(Euclidean Distance)是最初用于打算欧几里德空间中两个点的间隔,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德间隔是:

可以看出,当 n=2 时,欧几里德间隔便是平面上两个点的间隔。
当用欧几里德间隔表示相似度,一样平常采取以下公式进行转换:间隔越小,相似度越大(同时,避免除数为0):

余弦相似度Cosine-based Similarity

两个项目 i ,j 视作为两个m维用户空间向量,相似度打算通过打算两个向量的余弦夹角,那么,对付mn的评分矩阵,i ,j 的相似度sim( i , j ) 打算公式:

(个中 " · "记做两个向量的内积)

皮尔逊干系系数一样平常用于打算两个定距变量间联系的紧密程度,为了使打算结果精确,须要找出共同评分的用户。
记用户集U为既评论了 i 又评论了 j 的用户集,那么对应的皮尔森干系系数打算公式为:

个中Ru,i 为用户u 对项目 i 的评分,对应带横杠的为这个用户集U对项目i的评分评分。

6)相似邻居打算。
邻居分为两类:

1、固天命量的邻居K-neighborhoods (或Fix-size neighborhoods),不论邻居的“远近”,只取最近的 K 个,作为其邻居,如下图A部分所示;

2、基于相似度门槛的邻居,落在以当前点为中央,间隔为 K 的区域中的所有点都作为当前点的邻居,如下图B部分所示。

再先容一下K最近邻(k-Nearest Neighbor,KNN)分类算法:这是一个理论上比较成熟的方法,也是最大略的机器学习算法之一。
该方法的思路是:如果一个样本在特色空间中的k个最相似(即特色空间中最临近)的样本中的大多数属于某一个种别,则该样本也属于这个种别。

7)经由4)打算出来的基于用户的CF(基于用户推举之用:通过共同口味与偏好找相似邻居用户,K-邻居算法,你朋友喜好,你也可能喜好),基于物品的CF(基于项目推举之用:创造物品之间的相似度,推举类似的物品,你喜好物品A,C与A相似,那么你可能也喜好C)。

2.2 基于基于用户相似度与项目相似度

上述3.1节中三个相似度公式是基于项目相似度场景下的,而实际上,基于用户相似度与基于项目相似度打算的一个基本的差异是,基于用户相似度是基于评分矩阵中的行向量相似度求解,基于项目相似度打算式基于评分矩阵中列向量相似度求解,然后三个公式分别都可以适用,如下图:

(个中,为0的表示未评分)

基于项目相似度打算式打算如Item3,Item4两列向量相似度;

基于用户相似度打算式打算如User3,User4量行向量相似度。

千言万语不如举个例子。
我们来看一个详细的基于用户相似度打算的例子。

假设我们有一组用户,他们表现出了对一组图书的喜好。
用户对一本图书的喜好程度越高,就会给其更高的评分。
我们来通过一个矩阵来展示它,行代表用户,列代表图书。

如下图所示,所有的评分范围从1到5,5代表喜好程度最高。
第一个用户(行1)对第一本图书(列1)的评分是4,空的单元格表示用户未给图书评分。

利用基于用户的协同过滤方法,我们首先要做的是基于用户给图书做出的评价,打算用户之间的相似度。

让我们从一个单一用户的角度考虑这个问题,看图1中的第一行,要做到这一点,常见的做法是将利用包含了用户喜好项的向量(或数组)代表每一个用户。
相较于利用多样化的相似度量这种做法,更直接。

在这个例子中,我们将利用余弦相似性去打算用户间的相似度。

当我们把第一个用户和其他五个用户进行比较时,就能直不雅观的看到他和其他用户的相似程度。

对付大多数相似度量,向量之间相似度越高,代表彼此更相似。
本例中,第一个用户第二、第三个用户非常相似,有两本共同书本,与第四、第五个用户的相似度低一些,只有一本共同书本,而与末了一名用户完备不相似,由于没有一本共同书本。

更一样平常的,我们可以打算出每个用户的相似性,并且在相似矩阵中表示它们。
这是一个对称矩阵,单元格的背景颜色表明用户相似度的高低,更深的赤色表示它们之间更相似。

以是,我们找到了与第一个用户最相似的第二个用户,删除用户已经评价过的书本,给最相似用户正在阅读的书本加权,然后打算出总和。

在这种情形下,我们打算出n=2,表示为了产生推举,须要找出与目标用户最相似的两个用户,这两个用户分别是第二个和第三个用户,然后第一个用户已经评价了第一和第五本书,故产生的推举书是第三本(4.5分),和第四本(3分)。

此外,什么时候用item-base,什么时候用user-base呢:http://weibo.com/1580904460/zhZ9AiIkZ?mod=weibotime?

一样平常说来,如果item数目不多,比如不超过十万,而且不显著增长的话,就用item-based 好了。
为何?如@wuzh670所说,如果item数目不多+不显著增长,解释item之间的关系在一段韶光内相对稳定(比拟user之间关系),对付实时更新item-similarity需求就降落很多,推举系统效率提高很多,故用item-based会明智些。

反之,当item数目很多,建议用user-base。
当然,实践中详细情形详细剖析。
如下图所示(摘自项亮的《推举系统实践》一书):