(1)基于物品内容的推荐算法:仅利用物品或内容的基本信息,衡量物品之间或内容之间的相似度,再根据用户的历史偏好记录,将相似的物品或内容推荐给当前用户。
用户A偏好音乐A,该音乐是由贝多芬作曲的轻音乐;用户B偏好音乐B,也是由贝多芬作曲的轻音乐;用户C偏好音乐C,音乐C是由Prince作曲的摇滚曲;
基于各音乐的基础信息,衡量音乐之间的相似度;在该例中我们发现音乐A和音乐B是同一种类型的,可将音乐A推荐给偏好音乐B的用户,将音乐B推荐给偏好音乐A的用户
问题:
数据质量要求高:该推荐算法依赖于物品或内容的描述数据,描述得越全面、完整,推荐得就越精确;即该算法对物品内容的数据质量要求较高;
考虑不全面:该算法仅从物品内容本身的特征出发,没有考虑到用户对物品内容的态度;
新用户问题:需要基于用户的历史偏好信息,所有对新用户无法进行推荐;
(2)关联规则:也叫购物篮分析,是为了研究购物篮中商品之间的关系,可产生A->B这样的蕴涵式(或者说是规则),尿布->啤酒。
其中A和B分别称为关联规则的 先导和后继。衡量该规则的强弱,有支持度、置信度和提升度这三种指标。
0001A B C
0002A B
0003C
0004B C
0005A C
项集(Item):同时出现的项的集合,k项集即包含k个元素的项集;在本例中,{A}是1项集,{A C}是2项集;
候选集(Candidate itemset):通过向下合并得出的项集,定义为C[k];在本例中,1项集{A} 、{B},向下合并,产生项集{A B},此时称为候选集;
频繁集(Frequent itemset):支持度大于等于特定的最小支持度的项集,表示为L[k];在本例中,设最小支持度阈值为0.3,
候选集{A B}的支持度为0.4,大于阈值0.3,所以候选集{A B}是频繁集;
支持度(Support):定义为 supp(X) = occur(X) / count(D) = P(X),其中D是交易数据库,即事件X出现的概率;在本例中,supp(A)=3/5
置信度(Confidence): 定义为 conf(X->Y) = supp(X ∪ Y) / supp(X) = P(Y|X),即在事件X出现的情况下事件Y出现的概率;在本例中,conf(A->B)=2/3
提升度(Lift):lift(X->Y) = lift(Y->X) = conf(X->Y)/supp(Y) = conf(Y->X)/supp(X) = P(XY)/(P(X)P(Y)),即在事件X出现的情况下事情Y出现的概率,
相较于整体情况下事件Y出现的概率,提升了多少倍,可通俗理解为提升度反映 了“物品X的出现”对物品Y的出现概率发生了多大的变化;在本例中,lift(A->B)=(2/3)/(3/5)=10/9
NOTE : 支持度是对关联规则重要性的衡量,置信度是对关联规则的准确度的衡量。
支持度说明了这条规则在所有交易中有多大的代表性,显然支持度越大,关联规则越重要。
有些关联规则置信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
若提升度lift(X->Y)=1,根据公式,可得P(XY)=(P(X)P(Y)),也可以根据conf(X->Y)=supp(Y),即P(Y|X)=P(Y),
换句话说X是否出现,对Y出现 的概率没有影响,即说明X与Y相互独立;
若lift(X->Y)>1,说明X的出现提高了Y的出现概率,有促进作用,该规则有效,若 lift(X->Y)<1,则该规则无效。
(3)隐语义模型的基本思想: 主要是根据隐含特征将用户与物品联系起来。
假设用户A喜欢《数据挖掘导论》,用户B喜欢《三个火枪手》,现在小编要对用户A和用户B推荐其他书籍。
基于UserCF: 找到与他们偏好相似的用户,将相似用户偏好的书籍推荐给他们;
基于ItemCF: 找到与他们当前偏好书籍相似的其他书籍,推荐给他们。
其实还有一种思路,就是根据用户的当前偏好信息,得到用户的兴趣偏好,将该类兴趣对应的物品推荐给当前用户。
比如,用户A喜欢的《数据挖掘导论》属于计算机类的书籍,那我们可以将其他的计算机类书籍推荐给用户A;
用户B喜欢的是文学类数据,可将《巴黎圣母院》等这 类文字作品推荐给用户B。
这就是隐语义模型,依据“兴趣”这一隐含特征将用户与物品进行连接,需要说明的是此处的“兴趣”其实是对物品类型的一个分类而已。
数学解释
R矩阵是用户对物品的偏好信息(Rij表示的是user i对item j的兴趣度),
P矩阵是用户对各物品类别的一个偏好信息(Pij表示的是user i对class j的兴趣度),
Q矩阵是各物品所归属的的物品类别的信息(Qij表示的是item j在class i中的权重)。
隐语义模型就是要将矩阵R分解为矩阵P和矩阵Q的乘积,即通过矩阵中的物品类别(class)将用户user和物品item联系起来
隐语义模型会把物品分成K个类型,这个是我们根据经验和业务知识进行反复尝试决定的,
p(u,k)表示用户u对于第k个分类的喜爱程度(1 < k <= K),q(k, i)表示物品i属于第k个分类的权重(1 < k <= K)。
隐语义模型是从用户的偏好数据出发进行个性推荐的,即基于用户的行为统计进行自动聚类,所以能解决以上提到的5个问题:
隐语义模型是基于用户的行为数据进行自动聚类的,能反应用户对物品的分类意见;
我们可以指定将物品聚类的类别数k,k越大,则粒度越细;
隐语义模型能计算出物品在各个类别中的权重,这是根据用户的行为数据统计的,不会只将其归到一类中;
隐语义模型得到的物品类别不是基于同一个维度的,维度是由用户的共同兴趣决定
样本选择:
隐语义模型在显性反馈数据(也就是评分数据)上能解决评分预测问题并达到了很好的精度。
对于隐性反馈数据集,这种数据集的特点:只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)
所以对负样本采样时应该 遵循以下原则:
对每个用户,要保证正负样本的平衡(数目相似);每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品;
一般认为,很热门而用户却没有行为更加代表用户对这个物品不感兴趣。因为对于冷门的物品,用户可能是压根没在网站中发现这个物品,所以谈不上是否感兴趣;
计算矩阵P和矩阵Q中的参数值:一般做法是最优化损失函数来求参数。
损失函数的优化使用随机梯度下降算法
λ是用来防止过拟合的正则化项,λ需要根据具体应用场景反复实验得到。
损失函数的意义是:用户u对物品i的真实喜爱程度与推算出来的喜爱程度的均方根误差,通俗来说就是真实的喜爱程度与推算的喜爱程度的误差,
要使模型最合理当然就是使这个误差达到最小值。
公式中最后两项是惩罚因子,用来防止分类数取得过大而使误 差减少的不合理做法的发生,λ参数是一个常数,需要根据经验和业务知识进行反复尝试决定的。
其中α是在梯度下降的过程中的步长(学习率),这个值不宜过大也不宜过小,过大会产生震荡而导致很难求得最小值,过小会造成计算速度下降,需要经过试验得到最合适的值。
最终会求得每个用户对于每个隐分类的喜爱程度矩阵P和每个物品与每个隐分类的匹配程度矩阵Q。
在用户对物品的偏好信息矩阵R中,通过迭代可以求得每个用户对每个物品的喜爱程度,选取喜爱程度最高而且用户没有反馈过的物品进行推荐。
在隐语义模型中,重要的参数有以下4个:
1)隐分类的个数F
2)梯度下降过程中的步长(学习速率)α;
3)损失函数中的惩罚因子λ;
4)正反馈样本数和负反馈样本数的比例ratio;
这四项参数需要在试验过程中获得最合适的值.1)3)4)这三项需要根据推荐系统的准确率、召回率、覆盖率及流行度作为参考, 而2)步长α要参考模型的训练效率。
隐语义模型在实际使用中有一个困难,那就是它很难实现实时推荐。经典的隐语义模型每次训练时都需要扫描所有的用户行为记录,
这样才能计算出用户对于 每个隐分类的喜爱程度矩阵P和每个物品与每个隐分类的匹配程度矩阵Q。
而且隐语义模型的训练需要在用户行为记录上反复迭代才能获得比较好的性能,因此 LFM的每次训练都很耗时,
一般在实际应用中只能每天训练一次,并且计算出所有用户的推荐结果。从而隐语义模型不能因为用户行为的变化实时地调整推荐结果来满足用户最近的行为。
协同过滤
STEP1 : 收集数据收集用户对物品的偏好信息,主要包含以下内容:
显式的用户反馈:用户在浏览、使用网站以外,显式提供的反馈信息,比如用户对物品的评分、评论等;
隐式的用户反馈:用户在浏览、使用网站时产生的数据,隐式地反映了用户的偏好,比如订购信息、浏览信息等;用户表达偏好的方式有很多种,不同应用也是大不相同的。
比如对文章的转发、收藏,对活动的投票等也是显式的偏好反馈,用户浏览网站时停留时间也是一种隐式的反馈,不过这一个指标的噪声较大。
STEP2 : 数据预处理如何整合显式、隐式的偏好反馈信息呢?有以下两种方法。
分组:显式反馈为一组,隐式反馈为一组,然后基于不同的行为组别分别计算用户之间或物品之间的相似度;
亚马逊上在商品详情页进行推荐时一般都会有‘购买此商品的顾客也同时购买’和‘看过此商品后顾客买的其他商品’这两种方式的推荐;
加权:根据不同行为反映的偏好程度进行加权,显式反馈的权重大,隐式权重小,得到用户对物品的总体偏好;整合后如何进行数据预处理呢?
减噪:这些偏好反馈信息可能会存在大量的噪声,可应用常用的减噪算法进行清洗,或作离群点识别等;
归一化: 不同偏好行为对应的数据的量纲会有很大的差别,需统一量纲;
聚类:在用户数或物品数很大的情况下,可先对用户和物品进行聚类,形成用户群和物品群,将单个用户对单个物品的偏好转换为某个用户群对某个物品群的偏好,
可降低整个推荐算法的计算量,当然推荐精度也会受影响;
STEP3 : 最近邻搜索基于用户的协同过滤:计算用户之间的相似性,找到与当前用户最相似的N个用户,如果在数据预处理中进行了聚类,就计算用户群之间的相似性,
找到最邻近的N个用户群;基于物品的协调过滤:计算物品之间的相似性,找到与当前物品最相似的N个物品,同样的,如果进行了聚类,就计算物品群之间的相似性,
找到最邻近的N个物品群;
STEP4 : 进行推荐基于用户的协同过滤:将最近邻用户(群)中出现频次较高并且还未出现在当前用户偏好列表中的物品推荐给当前用户;
基于物品的协同过滤:根据当前用户的偏好列表,将最相似的物品推荐给用户;
基于用户的协调过滤和基于物品的协调过滤都能达到不错的效果,但在应用场景上会存在一定的区别。
如果一个电商网站,用户的数量远超物品的数量,同时物品信息相对稳定,在这种情况下基于物品的协同过滤算法更合适,不仅计算量小,而且不用频繁更新;
如果是一个新闻或者是博客网站,内容数据偏多且不断更新,这时候可采用基于用户的协同过滤。