一、简介
Taste 是 Apache Mahout提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。Taste 既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste 不仅仅只适用于 Java 应用程序,它可以作为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑(这个测试失败了....求具体流程)。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
二、接口说明
- DateModel
用户喜好信息的抽象接口,它的具体实现可能来自任意类型的数据源以抽取用户喜好信息。Taste提供了MySQLDataModel,方便用户通过JDBC和MySQL访问数据, 此外还通过FileDataModel提供了对文件数据源的支持。
- UserSimilarity 和 ItemSimilarity
用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,定义内容之间的相似度
- UserNeighborhood
用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。
- Recommender
Recommender 是推荐引擎的抽象接口,Taste中的核心组件。程序中,为它提供一个DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
三、案例
(1)下载测试数据
http://www.grouplens.org/node/73
(2)拷贝到指定目录
cp ml-1m.zip /home/hadoop/data/mahout cd /home/hadoop/data/mahout unzip ml-1m.zip # 电影信息文件 格式为MovieID::MovieName::MovieTags cp movies.dat integration/src/main/resources/org/apache/mahout/cf/taste/example/grouplens/ # 打分信息文件 格式为UserID::MovieID::Rating::Timestamp cp ratings.dat integration/src/main/resources/org/apache/mahout/cf/taste/example/grouplens/ mvn install -DskipTests
(3)修改Pom文件
<dependency> <groupId>${project.groupId}</groupId> <artifactId>mahout-examples</artifactId> <version>0.8</version> </dependency>
(4)使用jetty测试
cd integration mvn jetty:run
访问地址查看:http://localhost:8080/mahout-integration/RecommenderServlet?userID=1
(5)命令行方式测试
mvn -q exec:java -Dexec.mainClass="org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommenderEvaluatorRunner" -Dexec.args="-i /home/hadoop/data/mahout/ml-1m/ratings.dat"
四、Taste代码简述
// 1. 选择数据源 // 数据源格式为UserID,MovieID,Ratings // 使用文件型数据接口 DataModel model = new FileDataModel(new File("/Users/matrix/Documents/plan/test/ratings.txt")); // 2. 实现相似度算法 // 使用PearsonCorrelationSimilarity实现UserSimilarity接口, 计算用户的相似度 // 其中PearsonCorrelationSimilarity是基于皮尔逊相关系数计算相似度的实现类 // 其它的还包括 // EuclideanDistanceSimilarity:基于欧几里德距离计算相似度 // TanimotoCoefficientSimilarity:基于 Tanimoto 系数计算相似度 // UncerteredCosineSimilarity:计算 Cosine 相似度 UserSimilarity similarity = new PearsonCorrelationSimilarity(model); // 可选项 similarity.setPreferenceInferrer(new AveragingPreferenceInferrer(model)); // 3. 选择邻居用户 // 使用NearestNUserNeighborhood实现UserNeighborhood接口, 选择最相似的三个用户 // 选择邻居用户可以基于'对每个用户取固定数量N个最近邻居'和'对每个用户基于一定的限制,取落在相似度限制以内的所有用户为邻居' // 其中NearestNUserNeighborhood即基于固定数量求最近邻居的实现类 // 基于相似度限制的实现是ThresholdUserNeighborhood UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, similarity, model); // 4. 实现推荐引擎 // 使用GenericUserBasedRecommender实现Recommender接口, 基于用户相似度进行推荐 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); Recommender cachingRecommender = new CachingRecommender(recommender); List<RecommendedItem> recommendations = cachingRecommender.recommend(1234, 10); // 输出推荐结果 for (RecommendedItem item : recommendations) { System.out.println(item.getItemID() + "\t" + item.getValue()); }
相关推荐
协同过滤-图书馆图书推荐系统(JAVA,JSP,SSM,MYSQL)(毕业论文12544字,共34页,程序代码,MySQL数据库) 【运行环境】 Eclipse, IDEA JDK1.8(JDK1.7) Tomcat8(Tomcat7) 【技术栈】 JAVA, JSP, SSM, JQUERY, MYSQL, HTML, ...
基于python+Flask的协同过滤-文本相似度的图书推荐系统-毕业设计源码+使用文档(高分优秀项目).zip 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试...
### 协同过滤-推荐系统业界实践 #### 概述 推荐系统已成为现代互联网应用中的核心组成部分之一,它能够帮助用户发现感兴趣的内容或商品,并在很大程度上提升了用户体验和平台的商业价值。本篇将深入探讨协同过滤...
基于协同过滤-文本相似度的图书推荐系统,Flask web框架协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能...
Python实现图书推荐系统(基于协同过滤-文本相似度)源码,Python实现图书推荐系统(基于协同过滤-文本相似度)源码,主要功能截图 用户基本模块:包含的主要功能有用户注册、登录,图书模块:包含的主要功能有根据...
《MovieLens-100k数据集:协同过滤推荐算法的基石》 在现代的推荐系统领域,MovieLens-100k数据集是研究者和开发者常用的资源,它为协同过滤推荐算法提供了丰富的实证基础。这个数据集源于MovieLens网站,一个由...
### 基于协同过滤算法的商品推荐系统设计与实现 #### 一、绪论 - **选题动因**:随着互联网技术的发展和电子商务平台的兴起,如何在海量的商品信息中帮助用户找到他们真正感兴趣的商品成为了商家面临的一个重大...
协同过滤是一种广泛应用于推荐系统中的机器学习方法,它基于用户的行为历史和物品的特性来预测用户可能的兴趣。在这个“基于用户的协同过滤算法-matlab”的项目中,我们将深入探讨如何在MATLAB环境中实现这一算法,...
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系...
基于java实现协同过滤算法,并附带测试集,假设用户喜欢跟他过去喜欢的物品相似的物品 ,历史上相似的物品在未来也相似 ,给定用户u,找到他过去喜欢的物品的集合R(u). , 把和R(u)相似的物品推荐给u.
**基于协同过滤的推荐系统** 推荐系统是一种广泛应用在电商、媒体和社交网络等领域的智能算法,旨在根据用户的历史行为和偏好,为用户推荐可能感兴趣的内容或产品。在本项目中,我们将关注一种常见的推荐系统算法...
公用部分功能: 首页展示商品, 首页轮播图, 分类展示商品, 商品详情展示, 协同过滤推荐的商品展示, 网站公告列表及详情展示, 全部商品 买家功能: 登录,注册, 退出,个人信息管理,密码修改,我的订单,我的留言,留言...
该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! ...
Java协同过滤推荐算法是一种在Java环境下实现的个性化推荐系统的核心技术。它主要应用于大数据环境中的信息过滤,通过分析用户的历史行为和偏好,预测用户可能对哪些未知项目感兴趣,从而为用户提供个性化的推荐服务...
基于协同过滤和spark-als的电影推荐系统源码+项目说明.zip基于协同过滤和spark-als的电影推荐系统源码+项目说明.zip基于协同过滤和spark-als的电影推荐系统源码+项目说明.zip基于协同过滤和spark-als的电影推荐系统...
本系统在ANT下可以直接运行,...电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。
协同过滤算法的图书推荐系统-协同过滤算法的图书推荐系统的设计与实现代码-java-ssm-基于ssm的协同过滤算法的图书推荐系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,s sm,vue,ajax,maven,mysql,...
协同过滤(Collaborative Filtering,简称CF)是一种广泛应用于推荐系统中的算法,它基于用户的行为模式来预测他们可能对未评价物品的喜好。本项目基于MovieLens-1M数据集,提供了一个协同过滤算法的演示,帮助理解...