mahout简单推荐系统
工具:
mahout 0.8
Myeclipse10
maven3.2.5
代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.GenericUserSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
/**
* @author lyx
*
* 2015-7-17上午11:32:03
*
*mahoutMvn..App
*/
@SuppressWarnings("deprecation")
public class App {
//输入文件
static final String inputFile ="ml-1m/ratings.dat";
//输出文件
static final String outputFile="ml-1m/ratings.csv";
public static void main(String[] argv)throws IOException, TasteException
{
//转换成csv文件
CreateCsvRatingsFile();
MoviceFile.CreateCsvMovice();
MoviceFile.CreateCsvUser();
//-------------------读取ratings的数据
//读取ratings.csv文件
File ratingsFile = new File(outputFile);
//建立模型
DataModel model = new FileDataModel(ratingsFile);
//新建推荐引擎 三种方式
//1-----根据用户相似度建立推荐引擎
/*UserSimilarity userSim = new EuclideanDistanceSimilarity(model);
NearestNUserNeighborhood userNei = new NearestNUserNeighborhood(3, userSim, model);
Recommender cachingRecommender = new GenericUserBasedRecommender(model, userNei, userSim);*/
//----end
//2----根据Item相似度建立推荐引擎
/* ItemSimilarity itemSim = new LogLikelihoodSimilarity(model);
Recommender cachingRecommender = new GenericItemBasedRecommender(model, itemSim);*/
//----end
//3----缓存推荐引擎
CachingRecommender cachingRecommender = new CachingRecommender(new SlopeOneRecommender(model));
//遍历获得的全部用户
for(LongPrimitiveIterator it =model.getUserIDs();it.hasNext();)
{
//获取单个用户ID
long userId =it.nextLong();
//20表示推荐个数
List<RecommendedItem> recommendations = cachingRecommender.recommend(userId, 10);
//该用户没有推荐
if(recommendations.size() ==0)
{
System.out.println("UserId"+userId+":no Recommendations");
}
//输出推荐后的数据
for (RecommendedItem recommendedItem : recommendations) {
System.out.println("UserId"+userId+":"+recommendedItem);
}
}
}
//转换成csv格式函数
private static void CreateCsvRatingsFile() throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(inputFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
String line =null;
String line2write=null;
String[] temp;
int i=0;
//读取ratings.bat文件并写入ratings.csv文件中
//10000控制读取文件中的行数
while( (line=br.readLine())!=null && i<10000)
{
i++;
//将bat的"::" 替换成csv的","
t