一個簡單的基於用戶的mahout推薦程序

mahout版本:0.9

根據《mahout實戰》中的第一個例子:

一個簡單的基於用戶的mahout推薦程序,輸入文件intro.csv如下

1,101,5
1,102,3
1,103,2.5
2,101,2
2,102,2.5
2,103,5
2,104,2
3,101,2.5
3,104,4
3,105,4.5
3,107,5
4,101,5
4,103,3
4,104,4.5
4,106,4
5,101,4
5,102,3
5,103,2
5,104,4
5,105,3
5,106,4

程序代碼如下:

package test.mahout.recommendation;

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

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
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.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class RecommendIntro {
    public static void main(String[] args) throws IOException, TasteException
    {
        DataModel model = new FileDataModel(new File("F:/mahout/mahout_test/intro.csv"));//裝載數據文件,DataModel實現存儲併爲計算提供其所需要的所有偏好、用戶和物品數據
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//計算用戶的相似度,利用皮爾遜相關係數
        UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);//對每個用戶找到最相似的兩個用戶,第一個參數是近鄰的規模
        Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);//生成基於用戶的協同過濾算法的推薦引擎
        //recommend(long userID, int howMany)
        List<RecommendedItem> recommendations = recommender.recommend(1, 1);//爲用戶1推薦物品1
        for(RecommendedItem recommendation : recommendations)
        {
            System.out.println(recommendation);
        }
        
    }
}

這是一個單機版的推薦程序。運行這個例子並不需要導入hadoop的jar包以及運行在hadoop環境下,即便運行在hadoop環境下也是會單機運行。

要注意的是,將下載的mahout-distribution-0.9裏的jar包要都導入到該項目中,否則會出現錯誤

Exception in thread "main" java.lang.NoClassDefFoundError:

我導入的jar包有:

mahout-core-0.9.jar

mahout-core-0.9-job.jar

mahout-examples-0.9.jar

mahout-examples-0.9-job.jar

mahout-math-0.9.jar

mahout-integration-0.9.jar

對於這個例子並不是這裏的jar包都需要,但是由於瞭解的不是很清楚,所以就把mahout下面的這幾個jar包都導入了

運行出來的結果爲:

RecommendedItem[item:104, value:4.257081]

item是爲用戶1推薦的書 value是預計的評分。這是該請求試圖尋找的最優的一個結果。



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