Mahout推薦的簡單實現

由於course project需要,我最近看了一下Mahout的推薦實現。最初看到的是這篇文章。裏面的代碼毫無問題,不過引包的時候錯誤重重。因此重新寫一下,希望能幫助到有同樣問題的同學。廢話不多說,上代碼:

public static void main(String[] args) throws Exception {
		
	System.out.println("1");
	File f = new File("C:/Users/Administrator/Desktop/test.txt");
	System.out.println("2");

	//導入數據,計算相似度
	DataModel model = new FileDataModel(f);
	UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
	//根據數據與相似度,再計算K緊鄰
	UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,
				similarity, model);
	//根據以上三個數據建立推薦引擎			
	Recommender recommender = new GenericUserBasedRecommender(model,
				neighborhood, similarity);
	//直接調用引擎,爲用戶1推薦兩個ItemID。			
	List<RecommendedItem> recommendations = recommender.recommend(1, 2);
	
	for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}
	}


代碼上來看,跟那位同學的完全一樣,我就直接粘貼過來的。引入的包與結果如下:

wKiom1X9v0yi8Xh5AACdpIO6Hoo423.jpg

wKioL1X9wYmQ9DZkAACEc_cBy_k194.jpg


既然我們已經知道了如何搭建最簡單的Mahout推薦模型,那現在我們就來稍微詳細地瞭解一下Mahout吧。Mahout屬於Hadoop家族,給我的理解,只要能夠使用MapReduce這種功能就算是Hadoop家族。Mahout能做三種事:聚類,分類以及推薦。我們使用的推薦功能,能夠以兩種策略推薦。假設說我們想給Amazon上的用戶Tom推薦一些商品,UserCF就是找出與Tom的口味相似的用戶,看看他們都喜歡什麼,然後將這些東西推薦給Tom。ItemCF就是先看看Tom喜歡什麼,然後看看對於這些東西有沒有相似的物品能夠推薦。

wKioL1X9xNewGf1rAAFNNndwH_U591.jpg

這張圖很好地解釋了剛剛寫的代碼中各個步驟之間的依賴關係。我是從Mahout學習路線裏面找到的。ItemCF的代碼如下。輸入的是某個商品的id,得到的是跟這個商品類似的id。

//1.導入數據
DataModel dm = new FileDataModel(new File("data/user_preferences.csv"));
//2.計算物品之間的相似度
ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
//3.構建ItemBase的推薦引擎
GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);
//4.得到推薦列表
List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemID, size);
for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}
DataModel dm = new FileDataModel(f);
		ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
		Recommender recommender = new GenericItemBasedRecommender(dm, sim);
		Recommender cachingRecommender=new CachingRecommender(recommender);
		List<RecommendedItem> recommendations = cachingRecommender.recommend(1, 7);
		for (RecommendedItem recommendation : recommendations) {
			System.out.println(recommendation);
		}

這段代碼輸入的是user的ID以及需要的推薦數,能夠綜合考慮當前用戶喜歡的商品,然後給出一個推薦列表。























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