itemCF算法如果没有用户评分该怎么计算评分矩阵

Python018

itemCF算法如果没有用户评分该怎么计算评分矩阵,第1张

整理一下自己的理解。对于一个users-products-rating的评分数据集,ALS会建立一个user*product的m*n的矩阵其中,m为users的数量,n为products的数量但是在这个数据集中,并不是每个用户都对每个产品进行过评分,所以这个矩阵往往是稀疏的,用户i对产品j的评分往往是空的ALS所做的事情就是将这个稀疏矩阵通过一定的规律填满,这样就可以从矩阵中得到任意一个user对任意一个product的评分,ALS填充的评分项也称为用户i对产品j的预测得分所以说,ALS算法的核心就是通过什么样子的规律来填满(预测)这个稀疏矩阵它是这么做的:假设m*n的评分矩阵R,可以被近似分解成U*(V)TU为m*d的用户特征向量矩阵V为n*d的产品特征向量矩阵((V)T代表V的转置,原谅我不会打转置这个符号。。)d为user/product的特征值的数量关于d这个值的理解,大概可以是这样的对于每个产品,可以从d个角度进行评价,以电影为例,可以从主演,导演,特效,剧情4个角度来评价一部电影,那么d就等于4可以认为,每部电影在这4个角度上都有一个固定的基准评分值例如《末日崩塌》这部电影是一个产品,它的特征向量是由d个特征值组成的d=4,有4个特征值,分别是主演,导演,特效,剧情每个特征值的基准评分值分别为(满分为1.0):主演:0.9(大光头还是那么霸气)导演:0.7特效:0.8剧情:0.6矩阵V由n个product*d个特征值组成对于矩阵U,假设对于任意的用户A,该用户对一部电影的综合评分和电影的特征值存在一定的线性关系,即电影的综合评分=(a1*d1+a2*d2+a3*d3+a4*d4)其中a1-4为用户A的特征值,d1-4为之前所说的电影的特征值参考:协同过滤中的矩阵分解算法研究那么对于之前ALS算法的这个假设m*n的评分矩阵R,可以被近似分解成U*(V)T就是成立的,某个用户对某个产品的评分可以通过矩阵U某行和矩阵V(转置)的某列相乘得到那么现在的问题是,如何确定用户和产品的特征值?(之前仅仅是举例子,实际中这两个都是未知的变量)采用的是交替的最小二乘法在上面的公式中,a表示评分数据集中用户i对产品j的真实评分,另外一部分表示用户i的特征向量(转置)*产品j的特征向量(这里可以得到预测的i对j的评分)在上面的公式中,a表示评分数据集中用户i对产品j的真实评分,另外一部分表示用户i的特征向量(转置)*产品j的特征向量(这里可以得到预测的i对j的评分)用真实评分减去预测评分然后求平方,对下一个用户,下一个产品进行相同的计算,将所有结果累加起来(其中,数据集构成的矩阵是存在大量的空打分,并没有实际的评分,解决的方法是就只看对已知打分的项)参考:ALS在SparkMLlib中的实现但是这里之前问题还是存在,就是用户和产品的特征向量都是未知的,这个式子存在两个未知变量解决的法是交替的最小二乘法首先对于上面的公式,以下面的形式显示:为了防止过度拟合,加上正则化参数为了防止过度拟合,加上正则化参数首先用一个小于1的随机数初始化V首先用一个小于1的随机数初始化V根据公式(4)求U此时就可以得到初始的UV矩阵了,计算上面说过的差平方和根据计算得到的U和公式(5),重新计算并覆盖V,计算差平方和反复进行以上两步的计算,直到差平方和小于一个预设的数,或者迭代次数满足要求则停止取得最新的UV矩阵则原本的稀疏矩阵R就可以用R=U(V)T来表示了以上公式内容截图来自:基于矩阵分解的协同过滤算法总结一下:ALS算法的核心就是将稀疏评分矩阵分解为用户特征向量矩阵和产品特征向量矩阵的乘积交替使用最小二乘法逐步计算用户/产品特征向量,使得差平方和最小通过用户/产品特征向量的矩阵来预测某个用户对某个产品的评分不知道是不是理解正确了有几个问题想请教一下~(1)在第一个公式中加入正则化参数是啥意思?为什么是那种形态的?(2)固定一个矩阵U,求偏导数之后可以得到求解V的公式,为什么?

UserCF(User Collaboration Filter),又称 基于用户的协同过滤算法。

协同过滤:就是指众多的用户可以齐心协力,通过不断地和网站互动,使 自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

而基于用户是指通过分析用户对商品的行为(如浏览、收藏、加入购物车、购买……)计算出哪些用户是兴趣相似的,然后把兴趣相似的用户所关注的商品相互推荐。

举个例子:

由上表可以看出用户A和用户C比较相似,所以把用户A感兴趣的商品4推荐给用户C。

步骤一般分为两步:

再举个详细点的例子:

假设我们这么一些数据(用户(字母)商品(数字)_行为,):

我们可以给不同的行为赋予不同的评分(假设浏览1分、收藏3分、加入购物车5分、购买10分),得到以下数据:

这样看着比较累,而且也不方便计算,可以把它转换为矩阵形式,称之为 评分矩阵

计算相似度

计算相似度的方式有很多,如余弦相似度、切比雪夫距离、欧里几得距离、曼哈顿距离、杰卡德距离、皮尔森系数……计算相似度的方式不同计算出来的相似度也不同。

这里只介绍余弦相似度,其他的请自行百度。

假设有二维向量a,b如下图所示

则他们的余弦相似度为

推广到多维向量a(a1,a2,a3,a4……),b(b1,b2,b3,b4……)

有了公式就能计算出用户相似度了:

推荐列表 = 相似度矩阵 X 评分矩阵

由于用户已经对推荐列表中的一些商品有过行为,所以还要把这些商品给滤除掉

得到最终的推荐列表,其数值代表的意义是用户对商品的感兴趣程度:

ItemCF(Item Collaboration Filter),又称 基于商品(物品)的协同过滤算法。

其原理与UserCF类似,是基于用户对商品的偏好找到相似的商品,然后推荐相似的商品品给他。

计算过程也非常相似,区别在于计算时把UserCF的 评分矩阵转置 ,再计算商品与商品之间的相似度得到 商品之间的相似度矩阵

最后的 推荐列表 = 商品之间的相似度矩阵 X 评分矩阵转置

对于电子商务,用户数量一般大大超过商品数量,此时Item CF的计算复杂度较低。

比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性进进超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。基于物品的协同过滤算法,是目前电子商务采用最广泛的推荐算法。

在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。在社交网络站点中,User CF 是一个更好错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。

推荐多样性和精度,各有千秋。

参考:

Spark基于用户的协同过滤算法 https://www.toutiao.com/a6498952374487368205/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=15393016323&utm_medium=toutiao_android

推荐系统_itemCF和userCF

http://blog.csdn.net/u011263983/article/details/51498458

参考书本: 项亮, 推荐系统实践. 2012

本文系阅读笔记

1.网站用户基数增多,矩阵难以构造,时空复杂度增加。

2.难以对推荐结果做出解释。

该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》。不过, ItemCF 算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。 该算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品B

基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释,比如给用户推荐《天龙八部》的解释可以是因为用户之前喜欢《射雕英雄传》。

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

(1) 计算物品之间的相似度。

(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。

具体公式(ij直接的相似度):

N(i)表示喜欢物品i的用户数。

但是如果物品j很热门,几乎每个人都喜欢,则关系度会接近于1。(如可能很多人都会买《新华字典》或《哈利波特》)

为了避免推荐热门物品,则有公式:

这个公式惩罚了物品j的权重,减轻了热门物品会和很多物品相似的可能性。

尽管上面的公式分母已经考虑到了 j 的流行度,但在实际应用中,热门的 j 仍然会获得比较大的相似度。因此可在分母上进行惩罚。

但不能完全解决,两个不同领域的最热门物品之间往往具有比较高的相似度。这个时候,仅仅靠用户行为数据是不能解决这个问题的,因为用户的行为表示这种物品之间应该相似度很高。此时,我们只能依靠引入物品的内容数据解决这个问题,比如对不同领域的物品降低权重等。这些就不是协同过滤讨论的范畴了。

可以首先建立用户-物品倒排表,即每一个用户建立一个包含他喜欢的物品的列表。

比如电影,一般来说,同系列的电影、同主角的电影、同风格的电影、同国家和地区的电影会有比较大的相似度。

在得到物品之间相似度后,itemCF运用以下公式计算用户u对一个物品j的兴趣:

S(j,K) 与物品j最相似的K个物品的集合

为物品相似度。 即用户u对物品i的兴趣程度,这里可看做有过行为为1。

对既属于用户喜欢的物品,又在与j物品相似的物品集合内的每一个物品,得到权重相加和(即相似度乘感兴趣程度)。

 精度(准确率和召回率) 可以看到 ItemCF 推荐结果的精度也是不和 K 成正相关或者负相关的,因此选择合适的 K 对获得最高精度是非常重要的。

 流行度 和 UserCF 不同,参数 K 对 ItemCF 推荐结果流行度的影响也不是完全正相关的。

随着 K 的增加(流行物品相对增多),结果流行度会逐渐提高,但当 K 增加到一定程度,流行度就不会再有明显变化。

 覆盖率 K 增加会降低系统的覆盖率(流行率增加)。

A.

假设有这么一个用户,他是开书店的,并且买了当当网上 80% 的书准备用来自己卖。那么,他的购物车里包含当当网 80% 的书。假设当当网有 100 万本书,也就是说他买了 80 万本。从前面对 ItemCF 的讨论可以看到,这意味着因为存在这么一个用户,有 80 万本书两两之间就产生了相似度,也就是说,内存里即将诞生一个 80 万乘 80 万的稠密矩阵。

John S. Breese 在论文中提出了一个称为 IUF ( Inverse User Frequence ),即用户活跃度对数的倒数的参数,他也认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加 IUF参数来修正物品相似度的计算公式:ItemCF-IUF算法

同ItemCF相比,降低了流行度,提高了推荐结果的覆盖率。

B.

物品相似度归一化。

Karypis 在研究中发现如果将 ItemCF 的相似度矩阵按最大值归一化,可以提高推荐的准确率。

其研究表明,如果已经得到了物品相似度矩阵 w ,那么可以用如下公式得到归一化之后的相似度矩阵 w' :

相似度的归一化可以提高推荐的多样性。[解释看原书]