毕业设计-mahout实现基于用户的协同过滤算法和基于物品的协同过滤算法之java实现(mysql)

简介:

Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

实现:使用Mahout读取mysql进行推荐

一、基于用户的协同过滤算法,基于物品的协同过滤算法

/**  

* <p>Title: MainRecommand.java</p>  

* <p>Description: </p>  

* <p>Copyright: Copyright (c) 2017</p>  

* @author lx  

* @date 2020年6月28日  

* @version 1.0  

*/  
package com.lx;

import java.io.IOException;
import java.util.List;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.JDBCDataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/**
 * 基于用户的协同过滤算法,基于物品的协同过滤
* <p>Title: MainRecommand</p>  

* <p>Description: </p>  

* @author lx  

* @date 2020年6月28日
 */
public class MainRecommand {
	 final static int NEIGHBORHOOD_NUM = 2;   //用户邻居数量
	    final static int RECOMMENDER_NUM = 3;    //推荐结果个数
	 
	    public static void main(String[] args) throws IOException,TasteException
	    {
	 	      
	        MysqlDataSource dataSource=new MysqlDataSource();
	        dataSource.setServerName("127.0.0.1");
	        dataSource.setUser("root");
	        dataSource.setPassword("123456");
	        dataSource.setDatabaseName("mahout");	   
	        JDBCDataModel model=new MySQLJDBCDataModel(dataSource,"rating","userid","movieid","rating", "ratetime");
	 
	        //基于用户的协同过滤算法,基于物品的协同过滤算法
	 
	        UserSimilarity user = new EuclideanDistanceSimilarity(model);  
	        //计算欧式距离,欧式距离来定义相似性,用s=1/(1+d)来表示,范围在[0,1]之间,值越大,表明d越小,距离越近,则表示相似性越大
	        NearestNUserNeighborhood  neighbor = new NearestNUserNeighborhood(NEIGHBORHOOD_NUM, user, model);
	        //指定用户邻居数量
	 
	        //构建基于用户的推荐系统
	        Recommender r = new GenericUserBasedRecommender(model, neighbor, user);
	 
	 
	        //得到所有用户的id集合
	        LongPrimitiveIterator iter = model.getUserIDs();
	 
	        while(iter.hasNext())
	        {
	            long uid = iter.nextLong();
	            List<RecommendedItem> list = r.recommend(uid,RECOMMENDER_NUM);  //获取推荐结果
	            System.out.printf("uid:%s",uid);
	            //遍历推荐结果
	            for(RecommendedItem ritem : list)
	            {
	                System.out.printf("(%s,%f)",ritem.getItemID(),ritem.getValue());
	            }
	            System.out.println();
	        }
	 
	    }

}

二、基于物品的协同过滤算法

/**  

* <p>Title: MainRecommand.java</p>  

* <p>Description: </p>  

* <p>Copyright: Copyright (c) 2017</p>  

* @author lx  

* @date 2020年6月28日  

* @version 1.0  

*/  
package com.lx;

import java.io.IOException;
import java.util.List;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.JDBCDataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

import com.mysql.cj.jdbc.MysqlDataSource;

/**  

* <p>Title: MainRecommand</p>  

* <p>Description: </p>  

* @author lx
* 基于物品的协同过滤算法
*QQ:1197581932  

* @date 2020年6月28日  

*/
public class MainRecommand1 {
	 final static int NEIGHBORHOOD_NUM = 2;   //用户邻居数量
	    final static int RECOMMENDER_NUM = 3;    //推荐结果个数
	 
	    public static void main(String[] args) throws IOException,TasteException
	    {
	        MysqlDataSource dataSource=new MysqlDataSource();
	        dataSource.setServerName("127.0.0.1");
	        dataSource.setUser("root");
	        dataSource.setPassword("123456");
	        dataSource.setDatabaseName("mahout?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8");
	        JDBCDataModel model=new MySQLJDBCDataModel(dataSource,"rating","userid","movieid","rating", "ratetime");
			ItemSimilarity item = new EuclideanDistanceSimilarity(model);

			Recommender r = new GenericItemBasedRecommender(model,item);

			LongPrimitiveIterator iter = model.getUserIDs();

			while(iter.hasNext())
			{
				long uid = iter.nextLong();
				List<RecommendedItem> list = r.recommend(uid,RECOMMENDER_NUM);  //获取推荐结果
				System.out.printf("uid:%s",uid);
				//遍历推荐结果
				for(RecommendedItem ritem : list)
				{
					System.out.printf("(%s,%f)",ritem.getItemID(),ritem.getValue());
				}
				System.out.println();
			}

	    }

}

 

三、依赖包

   <properties>
          <mahout.version>0.9</mahout.version>
        <slf4j-log4j12.version>1.7.25</slf4j-log4j12.version>
    </properties>
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-core</artifactId>
            <version>${mahout.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-integration</artifactId>
            <version>${mahout.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-math</artifactId>
            <version>${mahout.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-examples</artifactId>
            <version>${mahout.version}</version>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>



        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j-log4j12.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-log4j12.version}</version>
        </dependency>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章