`
yugouai
  • 浏览: 492367 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

协同过滤-Taste测试

 
阅读更多

一、简介

    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());
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics