https://www.cnblogs.com/zjuhaohaoxuexi/p/11809278.html
itemCF,userCF
UserCF原理:UserCF给用户推荐那些和他具有共同兴趣爱好的用户喜欢的物品
ItemCF原理:ItemCF给用户推荐那些和他之前喜欢的物品类似的物品
UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度;而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承
UserCF适合于新闻推荐的原因:
热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要
UserCF需要维护一个用户兴趣相似表,而ItemCF需要维护一个物品相似表,在新闻推荐系统中物品的更新速度是很快的,那么如果采用ItemCF的话,物品相似度表也需要很快地更新,这是难以实现的
ItemCF适合于图书、电子商务和电影网站的原因:
用户的兴趣是比较固定和持久的
这些系统中用户不太需要流行度来辅助他们判断一个物品的好坏,而是可以通过自己熟知的领域的知识自己判断物品的质量
UserCF的适用场合:
用户较少的场合,如果用户很多,计算用户相似度度矩阵代价很大(新闻网站)
时效性较强,用户个性化兴趣不太明显的领域
不需要给出令用户信服的推荐解释
ItemCF的适用场合:
适用于物品的数量明显小于用户的数量的场合,如物品很多(网站),计算物品的相似度矩阵代价很大
长尾物品丰富,用户个性化需求强烈的领域
需要利用用户的历史行为给用户做推荐解释,可以令用户比较信服
Mahout介绍和简单应用
https://www.cnblogs.com/ahu-lichang/p/7073836.html
https://www.cnblogs.com/dlts26/archive/2012/06/20/2555772.html
1、Mahout是什么?
Mahout是一个算法库,集成了很多算法。
Apache Mahout 是 Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Mahout项目目前已经有了多个公共发行版本。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到Hadoop集群。
Mahout 的创始人 Grant Ingersoll 介绍了机器学习的基本概念,并演示了如何使用 Mahout 来实现文档集群、提出建议和组织内容。
2、Mahout是用来干嘛的?
2.1 推荐引擎
服务商或网站会根据你过去的行为为你推荐书籍、电影或文章。
2.2 聚类
Google news使用聚类技术通过标题把新闻文章进行分组,从而按照逻辑线索来显示新闻,而并非给出所有新闻的原始列表。
2.3 分类
雅虎邮箱基于用户以前对正常邮件和垃圾邮件的报告,以及电子邮件自身的特征,来判别到来的消息是否是垃圾邮件。
3、Mahout协同过滤算法
Mahout使用了Taste来提高协同过滤算法的实现,它是一个基于Java实现的可扩展的,高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑。Taste的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
Taste主要包括以下几个接口:
DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
UserSimilarity 和 ItemSimilarity 。UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算Item之间的相似度。
UserNeighborhood 用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的邻居用户的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。
Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
RecommenderEvaluator :评分器。
RecommenderIRStatsEvaluator :搜集推荐性能相关的指标,包括准确率、召回率等等。
4、Mahout协同过滤算法编程
1、创建maven项目
2、导入mahout依赖
<dependencies>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout</artifactId>
<version>0.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-examples</artifactId>
<version>0.11.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3、下载电影评分数据
4、基于用户的推荐
public static void main(String[] args) throws Exception {
//准备数据 这里是电影评分数据
File file = new File(*.dat");
//将数据加载到内存中,GroupLensDataModel是针对开放电影评论数据的
DataModel dataModel = new GroupLensDataModel(file);
//计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(dataModel);
//构建推荐器,协同过滤推荐有两种,分别是基于用户的和基于物品的,这里使用基于物品的协同过滤推荐
GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
//给用户ID等于5的用户推荐10个与2398相似的商品
List<RecommendedItem> recommendedItemList = recommender.recommendedBecause(5, 2398, 10);
//打印推荐的结果
System.out.println("使用基于物品的协同过滤算法");
System.out.println("根据用户5当前浏览的商品2398,推荐10个相似的商品");
for (RecommendedItem recommendedItem : recommendedItemList) {
System.out.println(recommendedItem);
}
long start = System.currentTimeMillis();
recommendedItemList = recommender.recommendedBecause(5, 34, 10);
//打印推荐的结果
System.out.println("使用基于物品的协同过滤算法");
System.out.println("根据用户5当前浏览的商品34,推荐10个相似的商品");
for (RecommendedItem recommendedItem : recommendedItemList) {
System.out.println(recommendedItem);
}
System.out.println(System.currentTimeMillis() -start);
}
皮尔森相关度
类名:PearsonCorrelationSimilarity
原理:用来反映两个变量线性相关程度的统计量
范围:[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小。
说明:1、 不考虑重叠的数量;2、 如果只有一项重叠,无法计算相似性(计算过程被除数有n-1);3、 如果重叠的值都相等,也无法计算相似性(标准差为0,做除数)。
该相似度并不是最好的选择,也不是最坏的选择,只是因为其容易理解,在早期研究中经常被提起。使用Pearson线性相关系数必须假设数据是成对地从正态分布中取得的,并且数据至少在逻辑范畴内必须是等间距的数据。Mahout中,为皮尔森相关计算提供了一个扩展,通过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。
网友评论