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是預計的評分。這是該請求試圖尋找的最優的一個結果。