畢業設計-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>

 

 

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