mahout之推荐算法

我们知道mahout的算法分为三大类:分类、聚类、推荐算法,这一篇博客就简单介绍一下推荐算法。
我们可以通过推荐算法可以向客户推荐商品,根据该用户对某些商品的打分,可以找到与他有相似品味和审美的人群,再根据这些人群进行分析,推荐出商品
举一个小例子如下,进行具体分析

数据准备:
第一个字段是userId, 第二个字段是商品ID,第三个是评分

1,00,1
1,01,2
1,02,5
1,03,5
1,04,5
2,00,1
2,01,2
2,02,5
2,05,4.5
2,06,5
3,01,2.5
3,02,5
3,03,4
3,04,3
4,00,5
4,01,5
4,02,5
4,03,0
在这里插入图片描述

根据上面的图,可以明确的看出用户1和2都是对商品00、01、02有相同的评分,用户2和用户3对02商品都是5分,而用户2和用户4对商品的评分完全不同,所以1、3是2用户的相似人群,可以根据1、3用户对2用户进行推荐,推荐的是2用户没有购买过的商品,有图上可以看到,1、3用户都购买过而2用户没有买过就是商品03、04,所以就能向2用户推荐03、04商品

mahout的maven依赖:
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-core</artifactId>
            <version>0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-math</artifactId>
            <version>0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-integration</artifactId>
            <version>0.9</version>
        </dependency>

代码:

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.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;


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

public class RedCommend {
    public static void main(String[] args) throws IOException, TasteException {
        //创建数据模型, 数据有三列, userId,商品Id ,评分
        FileDataModel dataModel = new FileDataModel(new File("C:\\Users\\asus\\Desktop\\bb1\\user.txt"));
       //用户相似度
        PearsonCorrelationSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
        //近邻对象 第一个参数是 相似性阈值(越大代表只有很相似时才会推荐,小代表稍有相似就推荐)
        ThresholdUserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, dataModel);
//        //UserId=2 的近邻对象都有谁
        long[] userNeighborhood = neighborhood.getUserNeighborhood(2);
        System.out.println("相似人群:"+Arrays.toString(userNeighborhood));
        //推荐器
        GenericUserBasedRecommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, similarity);
        //开始推荐, 为用户id为2的用户推荐 3个上坪
        List<RecommendedItem> recommendtions = recommender.recommend(2, 3);
        //打印推荐的商品id和推荐值
        for (RecommendedItem item : recommendtions){
            //System.out.println(item.getItemID());
            System.out.println("推荐: "+item);

        }
    }
}

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lu_Xiao_Yue/article/details/85536427