协同过滤-Taste测试
一、簡介
? ? Taste 是 Apache Mahout提供的一個協同過濾算法的高效實現,它是一個基于 Java 實現的可擴展的,高效的推薦引擎。Taste 既實現了最基本的基于用戶的和基于內容的推薦算法,同時也提供了擴展接口,使用戶可以方便的定義和實現自己的推薦算法。同時,Taste 不僅僅只適用于 Java 應用程序,它可以作為內部服務器的一個組件以 HTTP 和 Web Service 的形式向外界提供推薦的邏輯(這個測試失敗了....求具體流程)。Taste 的設計使它能滿足企業對推薦引擎在性能、靈活性和可擴展性等方面的要求。
?
二、接口說明
- ?DateModel
? ? 用戶喜好信息的抽象接口,它的具體實現可能來自任意類型的數據源以抽取用戶喜好信息。Taste提供了MySQLDataModel,方便用戶通過JDBC和MySQL訪問數據, 此外還通過FileDataModel提供了對文件數據源的支持。
- UserSimilarity 和 ItemSimilarity
? ? 用于定義兩個用戶間的相似度,它是基于協同過濾的推薦引擎的核心部分,可以用來計算用戶的“鄰居”,這里我們將與當前用戶口味相似的用戶稱為他的鄰居。ItemSimilarity 類似的,定義內容之間的相似度
- UserNeighborhood
? ? 用于基于用戶相似度的推薦方法中,推薦的內容是基于找到與當前用戶喜好相似的“鄰居用戶”的方式產生的。UserNeighborhood 定義了確定鄰居用戶的方法,具體實現一般是基于 UserSimilarity 計算得到的。
- Recommender
? ? Recommender 是推薦引擎的抽象接口,Taste中的核心組件。程序中,為它提供一個DataModel,它可以計算出對不同用戶的推薦內容。實際應用中,主要使用它的實現類 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分別實現基于用戶相似度的推薦引擎或者基于內容的推薦引擎。
?
三、案例
(1)下載測試數據
? ??http://www.grouplens.org/node/73
(2)拷貝到指定目錄
cp ml-1m.zip /home/hadoop/data/mahout cd /home/hadoop/data/mahout unzip ml-1m.zip # 電影信息文件 格式為MovieID::MovieName::MovieTags cp movies.dat integration/src/main/resources/org/apache/mahout/cf/taste/example/grouplens/ # 打分信息文件 格式為UserID::MovieID::Rating::Timestamp cp ratings.dat integration/src/main/resources/org/apache/mahout/cf/taste/example/grouplens/ mvn install -DskipTests
(3)修改Pom文件
<dependency><groupId>${project.groupId}</groupId><artifactId>mahout-examples</artifactId><version>0.8</version> </dependency>?(4)使用jetty測試
cd integration mvn jetty:run
? ?
? ? 訪問地址查看:http://localhost:8080/mahout-integration/RecommenderServlet?userID=1
(5)命令行方式測試
mvn -q exec:java -Dexec.mainClass="org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommenderEvaluatorRunner" -Dexec.args="-i /home/hadoop/data/mahout/ml-1m/ratings.dat"
?
四、Taste代碼簡述
?
// 1. 選擇數據源 // 數據源格式為UserID,MovieID,Ratings // 使用文件型數據接口 DataModel model = new FileDataModel(new File("/Users/matrix/Documents/plan/test/ratings.txt"));// 2. 實現相似度算法 // 使用PearsonCorrelationSimilarity實現UserSimilarity接口, 計算用戶的相似度 // 其中PearsonCorrelationSimilarity是基于皮爾遜相關系數計算相似度的實現類 // 其它的還包括 // EuclideanDistanceSimilarity:基于歐幾里德距離計算相似度 // TanimotoCoefficientSimilarity:基于 Tanimoto 系數計算相似度 // UncerteredCosineSimilarity:計算 Cosine 相似度 UserSimilarity similarity = new PearsonCorrelationSimilarity(model); // 可選項 similarity.setPreferenceInferrer(new AveragingPreferenceInferrer(model));// 3. 選擇鄰居用戶 // 使用NearestNUserNeighborhood實現UserNeighborhood接口, 選擇最相似的三個用戶 // 選擇鄰居用戶可以基于'對每個用戶取固定數量N個最近鄰居'和'對每個用戶基于一定的限制,取落在相似度限制以內的所有用戶為鄰居' // 其中NearestNUserNeighborhood即基于固定數量求最近鄰居的實現類 // 基于相似度限制的實現是ThresholdUserNeighborhood UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, similarity, model);// 4. 實現推薦引擎 // 使用GenericUserBasedRecommender實現Recommender接口, 基于用戶相似度進行推薦 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); Recommender cachingRecommender = new CachingRecommender(recommender); List<RecommendedItem> recommendations = cachingRecommender.recommend(1234, 10);// 輸出推薦結果 for (RecommendedItem item : recommendations) {System.out.println(item.getItemID() + "\t" + item.getValue()); }?
?
總結
以上是生活随笔為你收集整理的协同过滤-Taste测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何利用GraphPad Prism绘制
- 下一篇: Java 常用数据类型的输入输出