项目主要实现了基于mahout开源项目实现了协同过滤算法,用java常见的ssm框架搭建,完成了对于用户喜欢的电影进行推荐。
采取MVC模式将业务逻辑、数据、界面显示分离的方法组织代码,recommender层主要才推荐算法的实现。数据库采用的是mysql。
环境部署:
idea,Tomcat7.9(版本差距不大应该都没问题),mysql5.7,jdk1.8
导入数据(时间可能有点长,等着就行):
LOAD DATA LOCAL INFILE 'C:\\Users\\LPH\\Desktop\\ml-1m\\ml-1m\\movies.dat' INTO TABLE movies_preferences FIELDS TERMINATED BY '::' LINES TERMINATED BY '\n' (userID, movieID,preference,timestamp);主要分为四步: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);根据兴趣度最接近的用户,推荐三部电影
https://github.com/byr068/ssm
欢迎要实现基于知识图谱的推荐算法实现的小伙伴来叨扰,欢迎代码及原理级别的交流,仅限java,水平不高哈,不要介意。