Mahout 基于用户的协同过滤推荐简单实现

Javase小例子

1:用户推荐数据:

用户id   商品id   评分

1,01,2.0
1,02,1.0
1,03,2.5
1,04,5.0
1,05,5.0
2,01,1.0
2,03,4.5
2,04,4.0
2,06,3.0
3,01,3.5
3,04,2.0
3,05,3.0
3,07,5.0
4,01,5.0
4,03,3.0
4,05,3.5
4,07,4.0
4,08,6.0
5,01,4.0
5,02,3.0
5,04,2.0
5,09,4.0
5,05,3.5
5,06,4.0

2:maven依赖:

http://mvnrepository.com/artifact/org.apache.mahout/mahout-core

http://mvnrepository.com/artifact/org.apache.mahout/mahout-integration

3:主程序代码()

import org.apache.mahout.cf.taste.common.TasteException;
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.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class C {
    public static void main(String[] args) {
        //准备数据
        File file=new File("D:\\data\\data.txt");
        DataModel dataModel= null;
        try {
            //加载数据
            dataModel = new FileDataModel(file);
            //计算相似度这里采用欧式距离
            UserSimilarity similarity=new EuclideanDistanceSimilarity(dataModel);
            //基于5个邻居计算相似度
            UserNeighborhood neighborhood=new NearestNUserNeighborhood(5,similarity,dataModel);
            //基于用户协同推荐
            Recommender recommender=new GenericUserBasedRecommender(dataModel,neighborhood,similarity);
            int userid=3;
            //给用户id为3的推荐两项项目。
            List<RecommendedItem> list=recommender.recommend(userid,2);
            //打印输出
            for (RecommendedItem item:list){
                System.out.println(item);
                System.out.println(item.getItemID());
                System.out.println(item.getValue());
                System.out.println("\n");
            }
        } catch (IOException e) {
            System.out.println("filed");
            e.printStackTrace();
        } catch (TasteException e) {
            System.out.println("filed");
            e.printStackTrace();
        }
    }
}

4:实现效果:

                                                   

猜你喜欢

转载自blog.csdn.net/qq_34696236/article/details/81174627
今日推荐