Mahout tester框架
Tester介绍
Mahout是Apache下的一个Java语言的开源大数据机器学习项目,与其他机器学习项目不同的是,他的算法多事是MapReduce方式,可以在Hadoop上运行,并行处理大规模数据。
协同过滤是在mahout里是由一个叫taste的引擎提供的,提供两种模式一种是以jar包形式嵌入到程序里面在进程内运行,另外一种是MapReduce形式在Hadoop上运行。这两种形式使用的算法是一样的,配置也一样。
- Datamodel:用户喜好信息的抽象接口,他的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste默认提供JDBCDataModel和FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
- UserSimilarity和ltemSimilarity:前者用于定义两个用户间的相似度,他是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的邻居(与用户口味相似的用户),后者类似的计算内容之间的相似度。
- UserNeighborhood:用于基于用户的推荐方法中,推荐内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood定义了确定邻居用户的方法,具体实现一般是基于UserSimilarity计算得到的。
- Recommender:是推荐引擎的抽象接口,taste中的核心组件。程序中,为它提供一个DataModel,他可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类GenericUserBasedRecommender或者GenericitemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
Taste自带的推荐器
Item-based:
GenericitemBasedRecommender
GenericBooleanPrefltemBasedRecommender
KnnltemBasedRecommender
User-based:
GenericUserBasedRecommender
GenericBooleanPrefUserBasedRecommender
Model-based:
SlopeOneRecommender
SVDRecommender
TreeClusteringRecommender
ItemAverageRecommender
ItemUserAverageRecommender
推荐案例
分析:
基于用户推荐
Public class UserItemRecommend{
Public static void main(String[] args){
//创建数据模型
DataModel dm = new FileDataModel(new File(“位置”));
//使用User来推荐
UserSimilarity us = new PearsonCorrelationSimilarity(dm);
UsrNeighborhood unb = NearsetneighorClusterSimilarity(3,us,dm);
//推荐
Recommender re = new GenericUserBasedRecommender(dm,unb,us);
//显示结果
List<RecommenderItem> List = re.recommend(1,1);
For(RecommendedItem recommendItem:list){
System.out.println(recommendItem);
}
}
}
基于商品的推荐
基于SlopeOne推荐