毕业设计-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>

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mahout是一个开源的机器学习框架,其包括了协同过滤算法实现Mahout支持基于用户协同过滤算法和基于物品协同过滤算法。 基于用户协同过滤算法 基于用户协同过滤算法是基于用户的历史行为数据来推荐物品算法。它的主要思想是找到和目标用户相似的用户,然后把这些相似用户喜欢的物品推荐给目标用户Mahout实现基于用户协同过滤算法可以通过以下步骤实现: 1. 加载用户行为数据 Mahout用户行为数据可以是一个矩阵,每行代表一个用户,每列代表一个物品,矩阵的每个元素表示该用户对该物品的评分。Mahout提供了多种加载用户行为数据的方法,可以从文件读取、从数据库读取,或者从其他数据源读取。 2. 计算用户相似度 Mahout提供了多种计算用户相似度的方法,例如基于皮尔逊相关系数、基于余弦相似度等。通过计算用户之间的相似度,可以找到和目标用户相似的用户。 3. 找到相似用户喜欢的物品 找到和目标用户相似的用户后,可以根据这些用户的历史行为数据,找到这些用户喜欢的物品。 4. 推荐物品给目标用户 根据相似用户喜欢的物品,可以推荐一些物品给目标用户。推荐的物品可以是和相似用户喜欢的物品相似的物品,也可以是和目标用户历史行为数据相似的物品。 基于物品协同过滤算法 基于物品协同过滤算法是基于物品之间的相似度来推荐物品算法。它的主要思想是找到和目标物品相似的物品,然后把这些相似物品推荐给目标用户Mahout实现基于物品协同过滤算法可以通过以下步骤实现: 1. 加载用户行为数据 和基于用户协同过滤算法一样,Mahout也需要加载用户行为数据。 2. 计算物品相似度 Mahout提供了多种计算物品相似度的方法,例如基于皮尔逊相关系数、基于余弦相似度等。通过计算物品之间的相似度,可以找到和目标物品相似的物品。 3. 找到相似物品 找到和目标物品相似的物品后,可以将这些物品推荐给目标用户。 4. 推荐物品给目标用户 推荐的物品可以是和相似物品相似的物品,也可以是和目标用户历史行为数据相似的物品。 以上就是Mahout实现基于用户协同过滤算法和基于物品协同过滤算法java实现
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值