基于mahout的协同过滤推荐算法实现
1、简述项目架构
项目主要实现了基于mahout开源项目实现了协同过滤算法,用java常见的ssm框架搭建,完成了对于用户喜欢的电影进行推荐。
采取MVC模式将业务逻辑、数据、界面显示分离的方法组织代码,recommender层主要才推荐算法的实现。数据库采用的是mysql。
环境部署:
idea,Tomcat7.9(版本差距不大应该都没问题),mysql5.7,jdk1.8
2、数据库建立和数据导入
CREATE DATABASE movie;USE movie;CREATE TABLE movies ( // 保存电影相关的信息。id INTEGER NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL,published_year varchar(4) default NULL,type varchar(100) default NULL,PRIMARY KEY (id));CREATE TABLE movie_preferences ( // 保存用户对电影的评分,即喜好程度userID INTEGER NOT NULL,movieID INTEGER NOT NULL,preference INTEGER NOT NULL DEFAULT 0,timestamp INTEGER not null default 0,FOREIGN KEY (movieID) REFERENCES movies(id) ON DELETE CASCADE);
导入数据(时间可能有点长,等着就行):
LOAD DATA LOCAL INFILE 'C:\\Users\\LPH\\Desktop\\ml-1m\\ml-1m\\movies.dat'INTO TABLE movies_preferencesFIELDS TERMINATED BY '::'LINES TERMINATED BY '\n'(userID, movieID,preference,timestamp);
3、基于用户的协同过滤实现
主要分为四步:1 构建模型 2 计算相似度 3 查找k紧邻 4 构造推荐引擎
详细原理需要自己详细去看。
DataModel model = MyDataModel.mydataModel();//构造数据模型//http://www.cnphp6.com/archives/84955//曼哈顿相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.CityBlockSimilarity(model);//欧几里德相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity(model);//对数似然相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity(model);//斯皮尔曼相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.SpearmanCorrelationSimilarity(model);//Tanimoto 相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity(model)//Cosine相似度//UserSimilarity similarity = new org.apache.mahout.cf.taste.impl.similarity.UncenteredCosineSimilarity();UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//用PearsonCorrelation 算法计算用户相似度//计算用户的“邻居”,这里将与该用户最近距离为 3 的用户设置为该用户的“邻居”。UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, similarity, model);//采用 CachingRecommender 为 RecommendationItem 进行缓存Recommender recommender = new CachingRecommender(new GenericUserBasedRecommender(model, neighborhood, similarity));//得到推荐的结果,size是推荐结果的数目recommendations = recommender.recommend(userID, size);
4、结果展示
根据兴趣度最接近的用户,推荐三部电影
5、代码及数据
https://github.com/byr068/ssm
结尾:
欢迎要实现基于知识图谱的推荐算法实现的小伙伴来叨扰,欢迎代码及原理级别的交流,仅限java,水平不高哈,不要介意。
基于mahout的协同过滤推荐算法实现相关推荐
- 基于Mahout实现协同过滤推荐算法的电影推荐系统
1 Mahout介绍 Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更 ...
- 协同过滤算法_基于Mahout的协同过滤推荐算法
1协同过滤 基于物品的协同过滤 对物品进行相似度计算,然后再进行推荐. 基于用户的协同过滤 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢,并对这些喜好进行度量和打分.根据不 ...
- 协同过滤算法_基于用户的协同过滤推荐算法原理和实现
(给算法爱好者加星标,修炼编程内功) 来源:Create Chen's Blog https://www.cnblogs.com/technology/p/4467895.html 在推荐系统众多方法 ...
- 基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型、项目相似度、推荐结果、平均绝对误差MAE)
基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型.项目相似度.推荐结果.平均绝对误差MAE) 一.开发工具及使用技术 MyEclipse10.jdk1.7.movielens数 ...
- python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...
在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...
- 基于用户的协同过滤推荐算法原理和实现
在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...
- 基于用户的协同过滤推荐算法原理和实现分析
本文转载自nieson 基于用户的协同过滤推荐算法原理和实现 在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 ...
- (一)基于用户的协同过滤推荐算法原理和实现
在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...
- mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...
# Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...
最新文章
- zillow房价预测比赛_Zillow房价预测:2018年美国房价将会上涨
- 读 博 失 败 的 10 大 作 死 方 法
- .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中
- dos输入java Hello,出现错误: 找不到或无法加载主类 Hello
- Android Studio Button背景颜色无法修改
- C++学习系列笔记(二)
- [VTK]VTK的三维模型保存、读取之保存为vtk格式
- 年后跳槽 BAT 必看,10 种干货帮你 Offer 拿到手软!
- 超酷的jQuery百叶窗图片滑块实现教程
- 5G协议学习(38.300-总体描述)
- HttpSession概述
- 基于Matlab的男女声音信号分析与处理
- 手机浏览器的扫一扫功能在哪里,有什么作用
- 英语四级和计算机一级算多少学分,英语四级几分过 英语四级426分过了吗。
- Linux命令总结归纳
- 阿里云oss对象存储的使用
- 什么是 ASP.NET?
- Android androidx.startup:startup-runtime的minCompileSdk问题
- 带计时器和读存档的打字游戏
- coursera课程,coursera课程下载学习