為豆瓣電影實現Item-based協同過濾的推薦系統

jopen 8年前發布 | 47K 次閱讀 推薦系統 推薦引擎

前面的兩篇文章分別使用Spark mllib ALS實現了Model-based協同過濾推薦系統和使用Mahout實現了User-based的協同過濾推薦系統。
我們再來回顧一下item-base CF算法的特點:

  • 物品數明顯小于用戶數的場合,否則物品相似度矩陣計算代價很大
  • 適合長尾物品豐富,用戶個性化需求強的領域
  • 對新用戶友好,對新物品不友好,因為物品相似度矩陣不需要很強的實時性
  • 利用用戶歷史行為做推薦解釋,比較令用戶信服
  • </ul>

    所以item-base挺適合做電影的推薦。當用戶瀏覽某個電影的時候,我們可以推薦給他類似的電影,或者根據用戶以前的觀影記錄,推薦他感興趣的電影。
    本文還是以mahout 非分布式計算的方式實現。因為電影的記錄比較少(166條),計算量不是很大。

    代碼也非常的簡單,我們還是以皮爾遜算法計算相似度:

    public class DoubanItemBasedRecommender {
        public static void main(String[] args) throws Exception {
            String base = args[0];
            File file = new File(base + "user_movies.csv");
            DoubanFileDataModel model = new DoubanFileDataModel(file);
            ItemSimilarity similarity = new PearsonCorrelationSimilarity(model);
            ItemBasedRecommender recommender = new GenericItemBasedRecommender(model, similarity);
            BatchItemSimilarities batch = new MultithreadedBatchItemSimilarities(recommender, 5);
            int numSimilarities = batch.computeItemSimilarities(Runtime.getRuntime().availableProcessors(), 1, new FileSimilarItemsWriter(new File(base + "item_result.csv")));
            System.out.println("Computed " + numSimilarities + " similarities for " + model.getNumItems() + " items " + "and saved them to file " + base + "item_result.csv");
        }
    }

    8行和第 9行使用多線程批處理的方式,把計算結果寫入到一個文件中。
    生成的文件如下:
    ......
    25821461,26253733,0.8279288411140442
    25821461,26252196,0.819756031036377
    25821461,26366634,0.8181818127632141
    25821461,25919385,0.7033082246780396
    25821585,26328118,0.794719398021698
    25821585,22556810,0.7655318379402161
    25821585,1972724,0.6770924925804138
    25821585,25809260,0.6347297430038452
    ......

    電影 25821461 (旅程終點) 的信息如下:
     為豆瓣電影實現Item-based協同過濾的推薦系統

    和它相似度比較高的電影如下:
     為豆瓣電影實現Item-based協同過濾的推薦系統 為豆瓣電影實現Item-based協同過濾的推薦系統 為豆瓣電影實現Item-based協同過濾的推薦系統 為豆瓣電影實現Item-based協同過濾的推薦系統

    推薦還不錯,基本都屬于劇情,喜劇類型,而且都是國外的,沒有推薦戰爭,科幻或者武俠類的。

    來自:http://colobu.com/2015/12/03/item-based-recommender-for-douban-movies/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!