推荐系统技术预研报告.docx
- 文档编号:30224094
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:25
- 大小:263.77KB
推荐系统技术预研报告.docx
《推荐系统技术预研报告.docx》由会员分享,可在线阅读,更多相关《推荐系统技术预研报告.docx(25页珍藏版)》请在冰豆网上搜索。
推荐系统技术预研报告
Mahout技术
预研报告
版本:
V1.0
文档编号
保密等级
作者
最后修改日期
审核人
最后审批日期
批准人
最后批准日期
修订记录
日期
版本
修订说明
修订人
2011-5-31
V1.0
创建
目录
1简介2
1.1编写目的2
1.2背景2
1.2.1任务的提出2
1.2.2使用者2
1.3参考资料2
2协同过滤机制分析3
2.1基于协同过滤的推荐机制基本原理3
2.2基于用户的协同过滤推荐3
2.3基于项目的协同过滤推荐4
2.4SlopeOne协同过滤推荐5
2.5协同过滤各种算法比较7
3相似度的计算7
3.1皮尔逊相关系数(PearsonCorrelationCoefficient)7
3.2欧几里德距离(EuclideanDistance)8
3.3Cosine相似度(CosineSimilarity)8
3.4修正的余弦相似性9
3.5Spearman秩相关系数--SpearmanCorrelation9
3.6Tanimoto系数(TanimotoCoefficient)10
3.7对数似然相似度10
3.8曼哈顿距离10
4降维算法分析11
4.1主成分分析11
4.2奇异值分解11
5关联规则挖掘算法分析13
5.1概要13
5.2并行FPGrowth算法(ParallelFPGrowthAlgorithm)13
6聚类算法分析14
6.1概要14
6.2各种聚类算法14
6.2.1K均值(K-means)14
6.2.2模糊K均值(FuzzyK-means)14
6.2.3Canopy聚类(CanopyClustering)15
6.2.4均值漂移聚类(MeanShiftClustering)15
6.2.5EM聚类(ExpectationMaximization)16
6.2.6狄利克雷聚类算法17
7分类算法分析17
7.1概要17
7.2各种分类算法17
7.2.1逻辑回归算法17
7.2.2贝叶斯算法18
7.2.3SVM(支持向量机)19
7.2.4神经网络20
7.2.5HMM(隐马尔科夫模型)21
7.2.6决策树21
1简介
1.1编写目的
通过对ApacheMahout开源框架和推荐系统相关技术的学习,归纳出推荐系统领域目前的主要相关算法以及这些算法的应用场景及优缺点,为后续“金融产品推荐”产品提供理论支持和技术储备。
1.2背景
1.2.1任务的提出
。
。
。
。
。
。
。
。
1.2.2使用者
金融产品推荐项目组开发者。
1.3参考资料
参考资料主要来源于互联网和相关算法的论文。
2协同过滤机制分析
2.1基于协同过滤的推荐机制基本原理
协同过滤是利用集体智慧的一个典型方法。
协同过滤的核心思想是我们一般更倾向于从口味比较类似的朋友那里得到推荐。
协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
要实现协同过滤,需要以下几个步骤:
●收集用户偏好
●找到相似的用户或物品(计算相似度)
●计算推荐列表
下面介绍mahout实现的的三种协同过滤推荐机制。
2.2基于用户的协同过滤推荐
1.基本原理说明
基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K-邻居”的算法;然后,基于这K个邻居的历史偏好信息,为当前用户进行推荐。
下图给出了原理图。
基于用户的协同过滤推荐机制的基本原理
上图示意出基于用户的协同过滤推荐机制的基本原理,假设用户A喜欢物品A,物品C,用户B喜欢物品B,用户C喜欢物品A,物品C和物品D;从这些用户的历史喜好信息中,我们可以发现用户A和用户C的口味和偏好是比较类似的,同时用户C还喜欢物品D,那么我们可以推断用户A可能也喜欢物品D,因此可以将物品D推荐给用户A。
基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2.基于mahout实现基于用户的协同过滤推荐
给出示例代码如下:
DataModelmodel=newFileDataModel(newFile("preferences.dat"));
UserSimilaritysimilarity=newPearsonCorrelationSimilarity(model);
UserNeighborhoodneighborhood=newNearestNUserNeighborhood(100,
similarity,model);
Recommenderrecommender=newGenericUserBasedRecommender(model,
neighborhood,similarity);
2.3基于项目的协同过滤推荐
1.基本原理说明
基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户,下图诠释了它的基本原理。
基于项目的协同过滤推荐机制的基本原理
假设用户A喜欢物品A和物品C,用户B喜欢物品A,物品B和物品C,用户C喜欢物品A,从这些用户的历史喜好可以分析出物品A和物品C时比较类似的,喜欢物品A的人都喜欢物品C,基于这个数据可以推断用户C很有可能也喜欢物品C,所以系统会将物品C推荐给用户C。
基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
2.基于mahout实现基于项目的协同过滤推荐
给出示例代码如下:
DataModelmodel=newFileDataModel(newFile("preferences.dat"));
ItemSimilaritysimilarity=newPearsonCorrelationSimilarity(model);
Recommenderrecommender=newGenericItemBasedRecommender(model,
similarity);
2.4SlopeOne协同过滤推荐
1.基本原理说明
UserCF和ItemCF是最常用最容易理解的两种CF的推荐策略,但在大数据量时,它们的计算量会很大,从而导致推荐效率较差。
因此Mahout还提供了一种更加轻量级的CF推荐策略:
SlopeOne。
SlopeOne是有DanielLemire和AnnaMaclachlan在2005年提出的一种对基于评分的协同过滤推荐引擎的改进方法,下面介绍一下它的基本思想。
上图给出了例子,假设系统对于物品A,物品B和物品C的平均评分分别是
3,4和4。
基于SlopeOne的方法会得到以下规律:
●用户对物品B的评分=用户对物品A的评分+1
●用户对物品B的评分=用户对物品C的评分
基于以上的规律,我们可以对用户A和用户B的打分进行预测:
●对用户A,他给物品A打分4,那么我们可以推测他对物品B的评分是5,对物品C的打分也是5。
●对用户B,他给物品A打分2,给物品C打分4,根据第一条规律,我们可以推断他对物品B的评分是3;而根据第二条规律,推断出评分是4。
当出现冲突时,我们可以对各种规则得到的推断进行就平均,所以给出的推断是3.5。
这就是SlopeOne推荐的基本原理,它将用户的评分之间的关系看作简单的线性关系。
2.基于mahout实现SlopeOne
下面给出代码示例:
DiffStoragediffStorage=newMemoryDiffStorage(model,Weighting.UNWEIGHTED,false,Long.MAX_VALUE));
Recommenderrecommender=newSlopeOneRecommender(model,Weighting.UNWEIGHTED,
Weighting.UNWEIGHTED,diffStorage);
//Database-basedRecommender
AbstractJDBCDataModelmodel=newMySQLJDBCDataModel();
DiffStoragediffStorage=newMySQLJDBCDiffStorage(model);
Recommenderrecommender=newSlopeOneRecommender(model,Weighting.WEIGHTED,Weighting.WEIGHTED,diffStorage);
2.5协同过滤各种算法比较
基于项目的协同过滤推荐机制是Amazon在基于用户的机制上改良的一种策略,因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于项目的机制比基于用户的实时性更好一些。
但也不是所有的场景都是这样的情况,可以设想一下在一些新闻推荐系统中,也许物品,也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的形似度依然不稳定。
但在大数据量时,基于项目的协同过滤和基于用户的协同过滤计算量会很大,从而导致推荐效率较差。
所以,其实可以看出,推荐策略的选择其实和具体的应用场景有很大的关系。
3相似度的计算
关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。
在推荐的场景中,在用户-物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。
下面我们详细介绍几种常用的相似度计算方法:
3.1皮尔逊相关系数(PearsonCorrelationCoefficient)
皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在[-1,+1]之间。
Sx,Sy是x和y的样品标准偏差。
原理:
用来反映两个变量线性相关程度的统计量
范围:
[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小。
基于皮尔森相关系数的相似度有以下缺点:
●没有考虑用户间重叠的评分项数量对相似度的影响;(共同评分项的数量)
●如果两个用户之间只有一个共同的评分项,相似度也不能被计算。
●如果重叠的值都相等,也无法计算相似性(标准差为0,做除数)。
3.2欧几里德距离(EuclideanDistance)
最初用于计算欧几里德空间中两个点的距离,假设x,y是n维空间的两个点,它们之间的欧几里德距离是:
可以看出,当n=2时,欧几里德距离就是平面上两个点的距离。
当用欧几里德距离表示相似度,一般采用以下公式进行转换:
距离越小,相似度越大。
原理:
利用欧式距离d定义的相似度s,s=1/(1+d)。
范围:
[0,1],值越大,说明d越小,也就是距离越近,则相似度越大。
说明:
同皮尔森相似度一样,该相似度也没有考虑重叠数对结果的影响.只要至少有一个共同评分项,就能用欧几里德距离计算相似度;如果没有共同评分项,那么欧几里德距离也就失去了作用。
3.3Cosine相似度(CosineSimilarity)
Cosine相似度被广泛应用于计算文档数据的相似度:
原理:
多维空间两点与所设定的点形成夹角的余弦值。
范围:
[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。
余弦相似度的特点:
只关注共同评分的项目
●对用户的绝对的数值不敏感
●计算时不考虑用户之间的共同评分项数量,即使仅仅有极少相同评分项,也有可能获得很大的相似度结果
●只要各个评分项之间越趋向于对应成比例,而不论数值差异如何,则相似度越趋近于1.000.
欧式距离和余弦相似性的比较
根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:
欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。
3.4修正的余弦相似性
在余弦相似度的介绍中说到:
余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感。
因此没法衡量每个维数值的差异,会导致这样一个情况:
比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这两个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。
3.5Spearman秩相关系数--SpearmanCorrelation
原理:
Spearman秩相关系数通常被认为是排列后的变量之间的Pearson线性相关系数。
范围:
{-1.0,1.0},当一致时为1.0,不一致时为-1.0。
说明:
计算非常慢,有大量排序。
针对推荐系统中的数据集来讲,用Spearman秩相关系数作为相似度量是不合适的。
3.6Tanimoto系数(TanimotoCoefficient)
Tanimoto系数不关心用户对物品的具体评分值是多少,它关心用户与物品之间是否存在关联关系。
Tanimoto系数依赖于用户和物品之间的这种Boolean关系作为输入。
更准确的说法为:
Tanimoto系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Tanimoto系数只关心个体间共同具有的特征是否一致这个问题。
Tanimoto系数又被叫做Jaccard系数,其值等于两个用户共同关联(不管喜欢还是不喜欢)的物品数量除于两个用户分别关联的所有物品数量。
也就是关联的交集除于关联的并集,用公式表示为:
其值介于[0,1]之间,如果两个用户关联的物品完全相同,交集等于并集,值为1;如果没有任何关联,交集为空,值为0。
Tanimoto系数多用于计算文档数据的相似度:
原理:
是对Jaccard系数的扩展,等式为
范围:
[0,1],完全重叠时为1,无重叠项时为0,越接近1说明越相似。
说明:
处理无打分的偏好数据。
3.7对数似然相似度
原理:
重叠的个数,不重叠的个数,都没有的个数
说明:
处理无打分的偏好数据,比Tanimoto系数的计算方法更为智能。
3.8曼哈顿距离
原理:
曼哈顿距离的实现,同欧式距离相似,都是用于多维数据空间距离的测度
范围:
[0,1],同欧式距离一致,值越小,说明距离值越大,相似度越大。
说明:
比欧式距离计算量少,性能相对高。
4降维算法分析
4.1主成分分析
主成分分析将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。
又称主分量分析。
在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性。
人们自然希望变量个数较少而得到的信息较多。
在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠。
主成分分析是对于原先提出的所有变量,建立尽可能少的新变量,使得这些新变量是两两不相关的,而且这些新变量在反映课题的信息方面尽可能保持原有的信息。
算法原理:
主成分分析所要做的就是设法将原来众多具有一定相关性的变量,重新组合为一组新的相互无关的综合变量来代替原来变量。
通常,数学上的处理方法就是将原来的变量做线性组合,作为新的综合变量,但是这种组合如果不加以限制,则可以有很多,应该如何选择呢?
如果将选取的第一个线性组合即第一个综合变量记为
,自然希望它尽可能多地反映原来变量的信息,这里“信息”用方差来测量,即希望
越大,表示
包含的信息越多。
因此在所有的线性组合中所选取的
应该是方差最大的,故称
为第一主成分。
如果第一主成分不足以代表原来
个变量的信息,再考虑选取
即第二个线性组合,为了有效地反映原来信息,
已有的信息就不需要再出现在
中,用数学语言表达就是要求
=0,称
为第二主成分,依此类推可以构造出第三、四……第
个主成分。
说明:
主成分分析是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。
在推荐引擎中主要用来降维大规模的用户—物品矩阵。
4.2奇异值分解
奇异值分解是一种矩阵分解技术,可将一个矩阵R分解成为3个矩阵的乘积,即R=TSD,S=diag(s1,s2,s3,…,sr),其中,s1>=s2>=s3>=…>=sr,T和D分别为两个正交矩阵,r是矩阵R的秩,S是一个对角矩阵,所有的si按照大小顺序排列,称为奇异值。
奇异值分解有一个优点,它允许存在一个简化的近似矩阵。
对于S,保留k个最大的奇异值,将其余的用0来代替,这样,我们就可以将S简化为仅有k个奇异值的矩阵(k 因为引入了0,可以将S中的值为0的行和列删除,得到一个新的对角矩阵S1,如果对矩阵T和D据此简化得到矩阵T1和D1,那么有重构的矩阵R1=T1S1D1,R1约等于R,并且得到了降维。 奇异值分解能够生成初始矩阵R的所有秩等于k的矩阵中与矩阵R最近似的一个。 5关联规则挖掘算法分析 5.1概要 挖掘数据之间的关联、相关和许多其他有趣的联系,可以发现更多潜在的信息,进而影响商业决策。 此外,他对数据的分类、聚类和其他数据挖掘任务也有很大的帮助。 推荐系统中他可以帮助我们发现潜在的相似的用户群体 5.2并行FPGrowth算法(ParallelFPGrowthAlgorithm) 1.工作原理 在关联规则挖掘领域最经典的算法是Apriori,其本质上就是寻找频繁项集(频繁项集就是所谓的“支持度”比较高的项集),是在满足一定支持度的情况下寻找置信度达到阈值的所有模式。 其致命的缺点是需要多次扫描事务数据库,而且会生成大量短的候选模式。 于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,其中FPGrowth算法就是其中非常高效的一种。 其中使用了一种叫做FP-tree的数据结构,通过这种结构大大的减少了IO开销。 并行实现 我们把整个事务数据库放在一个列表里面传给FPGrowth,在实际中这是不可取的,因为内存不可能容下整个事务数据库,我们可能需要从数据库中一条一条地读入来建立FP-Tree。 但无论如何 FP-Tree是肯定需要放在内存中的,但内存如果容不下怎么办? 另外FPGrowth仍然是非常耗时的,你想提高速度怎么办? 解决办法: 分而治之,并行计算。 我们把原始事务数据库分成N部分,在N个节点上并行地进行FPGrowth挖掘,最后把关联规则汇总到一起就可以了。 2.优缺点 优点: 高效 缺点: 并行的情况下可能会遗漏关联规则或是得到的关联规则可能是冗余的,我们需要针对这两个问题做其他的处理。 另外关联规则挖掘会产生大量的规则,但并不是所有的规则都是有用的及有些规则是隐性的,并不容易挖掘 6聚类算法分析 6.1概要 聚类从广义上来讲是指分组时,将相似的事物放在一起。 与分类不同的是我们事先并不知道事物有哪些类别,只是根据事物的特征将相似的事物归为一种类别。 聚类是一种无监督的数据挖掘方法,它的形式多种多样。 在推荐系统中我们可能会对用户进行聚类,进而针对特定的人群进行推荐。 或是把产品进行聚类,向特定的用户推荐某一类产品。 下面主要介绍一下几种常用的算法 6.2各种聚类算法 6.2.1K均值(K-means) 3.工作原理 算法首先随即的从数据集中选取K个初始聚族中心,计算各个样本数据到各个聚族中心的距离,然后把样本归到离他最近的那个聚族中心所在的类。 计算形成的每一个聚族中数据对象的平均值(中心点)得到新的聚族中心,如果相邻两次的聚族中心没有变化,则说明样本调整已经结束。 本算法的一个特点就是每次迭代都需要检测每个样本是否分类正确,若不正确,则需要调整,在样本全部调整完毕后再修改聚族中心,进入下次迭代。 如果在一次迭代中,所有的样本已经被正确的分类,则不会调整,聚类中心也不会再有任何变化,则标志着算法结束。 4.优缺点 缺点: 这个算法需要人为的去指定聚类的数目,在特定的应用场景中可能并不太适合,我们无法预先知道聚类的数量。 算法起始阶段随即的选取初始聚类中心,这会导致算法对噪音数据及孤点数据的容忍度不够 优点: 这个算法的思想简单,确定的K个划分的平方误差最小,当聚类是密集的且类与类之间的区别明显是效果很好,在处理大数据集时这种算法相对来说是可伸缩的、高效的 6.2.2模糊K均值(FuzzyK-means) 1.工作原理 K均值的分类结果使得一个特征向量要么属于某一聚族,要么不属于,而模糊k均值的结果是一个特征向量属于某一个聚族的概率。 模糊K均值是在K均值算法的一个发展。 2.优缺点 优缺点: K均值的优缺点同样是模糊K均值的优缺点,只是他们的结果集不同而已。 6.2.3Canopy聚类(CanopyClustering) 1.工作原理: capony聚类算法的可以分为两个阶段: Stage1、把相似的样本数据放在一个canopy中,把整个数据集划分为一个个canopy,Canopy之间会存在重叠,但是不会存在某个样本不属于任何一个canopy的情况 Stage2、在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算。 并行算法 并行点是比较明显的,就是生成Canopy的过程可以并行,第一阶段,各个slave可以依据存储在本地的数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 推荐 系统 技术 报告