需要的元数据:(这些元数据通常应该来自日志文件,数量可能很大,可能有时候需要集群处理,有时间再和大家讨论。)
如果把这些数据当做是某网上书店的推荐引擎
第一列数据可以理解为用户ID,第二列可以理解为书籍ID,第三列可以理解为喜好程度。推荐引擎是学习元数据达到推荐能力,具体到编程中就是 DataMode ,通过对DataMode 的分析,得道一个合理的结果,mahout 本身封装了复杂的统计学,人工神经网络,机器学习相关算法!
假设 C:\\mahout_data.txt 的内容如下,这些数据作为本次Demo的元数据
1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.0
2,103,5.0
2,104,2.0
3,101,2.5
3,104,4.4
3,105,4.5
3,107,5.0
4,101,5.0
4,102,3.0
4,103,4.5
4,105,4.0
5,101,4.0
5,102,4.0
5,103,2.0
5,104,4.0
5,105,4.5
5,106,4.0
下面是代码
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("C:\\mahout_data.txt")); //加载数据模型,供机器学习使用
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//用户相似度/关联度,这是一种推荐方式
UserNeighborhood neighborhood =new NearestNUserNeighborhood(2, similarity, model);
Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); //建立一、、个recommender
List recommendations =recommender.recommend(1, 1); //给ID为1的顾客推荐一本书
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
}
程序输出结果
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Creating FileDataModel for file C:\mahout_data.txt
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
RecommendedItem[item:104, value:4.257081]
结果应该看最后一句,其他是日志信息,为1推荐了id为104的一本书,推荐度是 value:4.257081,大家一定要明白这个地方推荐的含义:
整个过程可以这样理解,这里的推荐显然是给别人介绍他们没有接触过的东西,但是如何推荐呢,就看看和他有相同爱好的人都看了什么书,和他有相同爱好的人看的书,才具有推荐意义,mahout里推荐过程大概就是这样解释的,当然这只是推荐的一种方式.