基于协同过滤算法的图书推荐系统

基于协同过滤算法的图书推荐系统,通过计算皮尔逊相关系数,获取用户之间的相关系数,确定近邻用户,从而推荐用户感兴趣的图书。

源代码和配套文档领取加文章最下方的名片哦~

项目介绍视频:基于协同过滤算法的图书推荐系统,毕业设计真的可以这么简单!!!_哔哩哔哩_bilibili

协同过滤算法讲解视频:基于用户协同过滤算法讲解与演示_哔哩哔哩_bilibili

一、协同过滤算法

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差的商:

上式定义了总体相关系数,常用希腊小写字母

作为代表符号。估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母代表:

r亦可由样本点的标准分数均值估计,得到与上式等价的表达式:

总体和样本皮尔逊系数的绝对值小于或等于1。如果样本数据点精确的落在直线上(计算样本皮尔逊系数的情况),或者双变量分布完全在直线上(计算总体皮尔逊系数的情况),则相关系数等于1或-1

二、系统演示

算法核心代码:


    public List<RecommendedItem> userBasedRecommender(long userID,int size) {
        // step:1 构建模型 2 计算相似度 3 查找k紧邻 4 构造推荐引擎
        List<RecommendedItem> recommendations = null;
        try {

            Class.forName("com.mysql.jdbc.Driver");
            MysqlDataSource dataSource = new MysqlDataSource();
            dataSource.setServerName("localhost");//本地为localhost
            dataSource.setPort(3308);
            dataSource.setUser("root");
            dataSource.setPassword("");
            dataSource.setDatabaseName("bookstorm");//数据库名
            DataModel dataModel=new MySQLJDBCDataModel(dataSource,"score_book","user_id","book_id","score","time");

//*/         File  modelFile = new File("D:\\01-bus\\项目资源\\01_计算机软件专业\\1063-图书推荐系统\\01-源代码\\BookRecommend-master\\bookStore_new\\ratings1.csv");
//            //System.out.println(modelFile);
//            DataModel model = new FileDataModel(modelFile);//构造数据模型

            //UserSimilarity similarity1=new UncenteredCosineSimilarity(model);
            UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);//用PearsonCorrelation 算法计算用户相似度
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, similarity, dataModel);//计算用户的“邻居”,这里将与该用户最近距离为 3 的用户设置为该用户的“邻居”。
            Recommender recommender = new CachingRecommender(new GenericUserBasedRecommender(dataModel, neighborhood, similarity));//采用 CachingRecommender 为 RecommendationItem 进行缓存
            recommendations = recommender.recommend(userID, size);//得到推荐的结果,size是推荐结果的数目

            System.out.println("recommendations="+JSON.toJSONString(recommendations));
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return recommendations;
    }

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值