java协同过滤推荐算法

1.什么是协同过滤

协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。

2.推荐过程

创建4个用户,每个用户4个商品在这里插入图片描述
建立物品-用户的对应关系在这里插入图片描述
此时查询张三
张三与用户:李四相似度:0.4082482904638631
张三与用户:王五相似度:0.4082482904638631
张三与用户:麻六相似度:0.3333333333333333

为张三推荐
用户张三,为您推荐广告创意推荐度为:0.8164965809277261
用户张三,为您推荐英语竞赛推荐度为:0.3333333333333333
用户张三,为您推荐公益大赛推荐度为:0.3333333333333333

算法实现代码

import java.util.*;
import java.util.Map.Entry;

/**
 * 基于用户的协同过滤推荐算法实现
 A a b d
 B a c
 C b e
 D c d e
 * @author Administrator
 *
 */
public class UserCF {
    public static void main(String[] args) {
        ACf cF1 = new ACf();
        cF1.setUserId(201704113113L);
        cF1.setProductName("设计大赛,编程大赛,数学竞赛");

        ACf cF2 = new ACf();
        cF2.setUserId(201704113114L);
        cF2.setProductName("设计大赛,广告创意");

        ACf cF3 = new ACf();
        cF3.setUserId(201704113115L);
        cF3.setProductName("数学竞赛,广告创意");

        ACf cF4 = new ACf();
        cF4.setUserId(201704113116L);
        cF4.setProductName("公益大赛,数学竞赛,英语竞赛");

        List<ACf> acfList =new ArrayList<>();

        acfList.add(cF1);
        acfList.add(cF2);
        acfList.add(cF3);
        acfList.add(cF4);

        String filtering = filtering(201704113113L, acfList);

    }

    /**
     * ACF实体类
     * 编号
     * private Long id;
     * 用户编号
     * private Long userId;
     * 已购商品
     * private String productName;
     *
     * 输入用户-->物品条目 一个用户对应多个物品
     * 用户ID 物品ID集合
     * cfs.get(0):ACf.getUserId=1 ACf.getProductName="计算机大赛,数学竞赛,WWE大赛,算法大赛"
     * cfs.get(1):ACf.getUserId=2 ACf.getProductName="计算机大赛,数学竞赛,WWE大赛,算法大赛"
     * cfs.get(2):ACf.getUserId=3 ACf.getProductName="计算机大赛,数学竞赛,WWE大赛,算法大赛"
     * @param userId 当前登录用户
     * @param cfs List集合
     * @return
     */
    public static String filtering(Long userId,List<ACf> cfs){
        //根据集合长度创建二维数组
        int[][] sparseMatrix = new int[cfs.size()][cfs.size()];
        //建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】
        Map<String, Integer> userItemLength = new HashMap<>();
        //存储每一个用户对应的不同物品总数 eg: A 3
        Map<String, Set<String>> itemUserCollection = new HashMap<>();
        //建立物品到用户的倒排表 eg: a A B
        Set<String> items = new HashSet<>();
        //辅助存储物品集合
        Map<String, Integer> userID = new HashMap<>();
        //辅助存储每一个用户的用户ID映射
        Map<Integer, String> idUser = new HashMap<>();
        //辅助存储每一个ID对应的用户映射
        for (int i = 0; i < cfs.size() ; i++){
                //循环历史物品a,b,c 以","间隔
                String[] user_item  = cfs.get(i).getProductName().split(",");
                //当前用户id
                String user = cfs.get(i).getUserId().toString();
                //物品长度
                int length = user_item.length;
                //key存放user用户id  length存放物品数量
                userItemLength.put(user, length);
                //key存放user用户id  value存放当前用户下标
                userID.put(user, i);
                //用户ID与稀疏矩阵建立对应关系
                idUser.put(i, user);
                //建立物品--用户倒排表
                for (int j = 0; j < length; j ++){
                    if(items.contains(user_item[j])){
                        //如果已经包含对应的物品--用户映射,直接添加对应的用户
                        itemUserCollection.get(user_item[j]).add(user);
                    } else{
                        //否则创建对应物品--用户集合映射
                        items.add(user_item[j]);
                        itemUserCollection.put(user_item[j], new HashSet<String>());
                        //创建物品--用户倒排关系
                        itemUserCollection.get(user_item[j]).add(user);
                    }
                }
        }
        System.out.println("itemUserCollection:"+itemUserCollection.toString());

//下面是核心代码,收费,需要可以联系。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目完整可用,配合压缩包内数据库可直接运行使用。 eclipse+mysql5.7+jdk1.8 功能:推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户的个人喜好与特定的参考特征进行比较,并试图预测用户对一些未评分项目的喜好程度。参考特征的选取可能是从项目本身的信息中提取的,或是基于用户所在的社会或社团环境。 根据如何抽取参考特征,我们可以将推荐引擎分为以下四大类: • 基于内容的推荐引擎:它将计算得到并推荐给用户一些与该用户已选择过的项目相似的内容。例如,当你在网上购书时,你总是购买与历史相关的书籍,那么基于内容的推荐引擎就会给你推荐一些热门的历史方面的书籍。 • 基于协同过滤的推荐引擎:它将推荐给用户一些与该用户品味相似的其他用户喜欢的内容。例如,当你在网上买衣服时,基于协同过滤的推荐引擎会根据你的历史购买记录或是浏览记录,分析出你的穿衣品位,并找到与你品味相似的一些用户,将他们浏览和购买的衣服推荐给你。 • 基于关联规则的推荐引擎:它将推荐给用户一些采用关联规则发现算法计算出的内容。关联规则的发现算法有很多,如 Apriori、AprioriTid、DHP、FP-tree 等。 • 混合推荐引擎:结合以上各种,得到一个更加全面的推荐效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值