Mahout 目前提供了一些工具,可用于通过 Taste 库建立一个推荐引擎 — 针对 CF 的快速且灵活的引擎。Taste 支持基于用户和基于项目的推荐,并且提供了许多推荐选项,以及用于自定义的界面。Taste 包含 5 个主要组件,用于操作 用户
、项目
和 首选项
:
DataModel
:用于存储用户
、项目
和首选项
UserSimilarity
:用于定义两个用户之间的相似度的界面ItemSimilarity
:用于定义两个项目之间的相似度的界面Recommender
:用于提供推荐的界面UserNeighborhood
:用于计算相似用户邻近度的界面,其结果随时可由Recommender
使用
如下代码可以构建一个简单的基于用户间相似度的推荐系统。
import org.apache.mahout.cf.taste.impl.model.file.*;
import org.apache.mahout.cf.taste.impl.neighborhood.*;
import org.apache.mahout.cf.taste.impl.recommender.*;
import org.apache.mahout.cf.taste.impl.similarity.*;
import org.apache.mahout.cf.taste.model.*;
import org.apache.mahout.cf.taste.neighborhood.*;
import org.apache.mahout.cf.taste.recommender.*;
import org.apache.mahout.cf.taste.similarity.*;
import java.io.*;
import java.util.*;
class RecommenderIntro {
public static void main(String[] args) throws Exception {
DataModel model = new FileDataModel(new File("intro.csv"));
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood(2, similarity, model);
Recommender recommender = new GenericUserBasedRecommender(
model, neighborhood, similarity);
List<RecommendedItem> recommendations =
recommender.recommend(1, 1);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
}
可以看出各个模块间的依赖关系:
接口的视图如下:
参考:
【1】 http://www.ibm.com/developerworks/cn/java/j-mahout/
【2】 mahout in action