基于mahout的协同过滤推荐算法实现

1、简述项目架构

 项目主要实现了基于mahout开源项目实现了协同过滤算法,用java常见的ssm框架搭建,完成了对于用户喜欢的电影进行推荐。

采取MVC模式将业务逻辑、数据、界面显示分离的方法组织代码,recommender层主要才推荐算法的实现。数据库采用的是mysql。

基于mahout的协同过滤推荐算法实现_第1张图片

环境部署:

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_preferences

FIELDS 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、结果展示

根据兴趣度最接近的用户,推荐三部电影

基于mahout的协同过滤推荐算法实现_第2张图片

5、代码及数据

https://github.com/byr068/ssm

结尾:

欢迎要实现基于知识图谱的推荐算法实现的小伙伴来叨扰,欢迎代码及原理级别的交流,仅限java,水平不高哈,不要介意。

你可能感兴趣的:(协同过滤,java,mysql)