【注】:此文章由网络各位大神的博客,加上自己试验中的总结得出。
参考文章如下:
1、 http://www.tuicool.com/articles/FzmQziz
2、 http://blog.javachen.com/2015/06/10/collaborative-filtering-using-mahout.html?utm_source=tuicool&
utm_medium=referral
感谢上述各位博主!
Mahout使用了 Taste 来提高协同过滤算法的实现,它是一个基于Java实现的可扩
展的,高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,
同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste
不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和Web Service的
形式向外界提供推荐的逻辑。Taste的设计使它能满足企业对推荐引擎在性能、灵活性
和可扩展性等方面的要求。
Taste主要包括以下几个接口:
DataModel
是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。 UserSimilarity
和 ItemSimilarity
。UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算内容之间的相似度。 UserNeighborhood
用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的邻居用户的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。 Recommender
是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。 RecommenderEvaluator
:评分器。 RecommenderIRStatsEvaluator
:搜集推荐性能相关的指标,包括准确率、召回率等等。
目前,Mahout为DataModel提供了以下几种实现:
UserSimilarity
和 ItemSimilarity
相似度实现有以下几种:
CityBlockSimilarity
:基于Manhattan距离相似度 EuclideanDistanceSimilarity
:基于欧几里德距离计算相似度 LogLikelihoodSimilarity
:基于对数似然比的相似度(最大似然数的相似度)PearsonCorrelationSimilarity
:基于皮尔逊相关系数计算相似度 SpearmanCorrelationSimilarity
:基于皮尔斯曼相关系数相似度 TanimotoCoefficientSimilarity
:基于谷本系数计算相似度 UncenteredCosineSimilarity
:计算 Cosine 相似度
Mahout算法框架自带的推荐器有下面这些:
UserNeighborhood 主要实现有两种:
Recommender分为以下几种实现:
RecommenderEvaluator有以下几种实现:
AverageAbsoluteDifferenceRecommenderEvaluator
:计算平均差值 RMSRecommenderEvaluator
:计算均方根差 RecommenderIRStatsEvaluator的实现类是GenericRecommenderIRStatsEvaluator。