日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Mahout的taste推荐系统里的几种Recommender分析

發布時間:2023/12/4 windows 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mahout的taste推荐系统里的几种Recommender分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Taste簡介

看自:http://blog.csdn.net/zhoubl668/article/details/13297583

Mahout 是apache下的一個java語言的開源大數據機器學習項目,與其他機器學習項目不同的是,它的算法多數是mapreduce方式寫的,可以在hadoop上運行,并行化處理大規模數據。


協同過濾在mahout里是由一個叫taste的引擎提供的, 它提供兩種模式,一種是以jar包形式嵌入到程序里在進程內運行,另外一種是MapReduce Job形式在hadoop上運行。這兩種方式使用的算法是一樣的,配置也類似。基本上搞明白了一種,就會另外一種了。


Taste的系統結構如下圖



其中:

Perference:表示用戶的喜好數據,是個三元組(userid, itemid, value),分別表示用戶id, 物品id和用戶對這個物品的喜好值。

DataModel:是Perference的集合,可以認為是協同過濾用到的user*item的大矩陣。DateModel可以來自db, 文件或者內存。

Similarity:相似度計算的接口,各種相似度計算算法都是繼承自這個接口,具體相似度計算的方法,可以參考這篇文章:http://anylin.iteye.com/blog/1721978

Recommender: 利用Similarity找到待推薦item集合后的各種推薦策略,這是最終要暴露個使用者的推薦接口,本文將重點介紹下taste里各種recommender的實現策略,有錯誤之處,請多指正。


各種Recommender介紹

按照協同過濾方法的分類, taste里的recommender可以分別劃到對應的分類下:

Item-based:

? ? ? ? GenericItemBasedRecommender

? ? ? ? GenericBooleanPrefItemBasedRecommender

? ? ? ? KnnItemBasedRecommender

User-based:

? ? ? ? GenericUserBasedRecommender

? ? ? ? GenericBooleanPerfUserBasedRecommender

Model-based:

? ? ? ? SlopeOneRecommender

? ? ? ? SVDRecommender

? ? ? ? TreeClusteringRecommender

?ItemAverageRecommender

? ? ? ? ItemUserAverageRecommender


每種Recommender的詳細介紹如下:

GenericUserBasedRecommender

一個很簡單的user-based模式的推薦器實現類,根據傳入的DataModel和UserNeighborhood進行推薦。其推薦流程分成三步:

第一步,使用UserNeighborhood獲取跟指定用戶Ui最相似的K個用戶{U1…Uk};

第二步,{U1…Uk}喜歡的item集合中排除掉Ui喜歡的item, 得到一個item集合 {Item0...Itemm}

第三步,對{Item0...Itemm}每個itemj計算 Ui可能喜歡的程度值perf(Ui, Itemj) ,并把item按這個數值從高到低排序,把前N個item推薦給Ui。其中perf(Ui, Itemj)的計算公式如下:

其中 是用戶Ul對Itemj的喜好值。

GenericBooleanPerfUserBasedRecommender

繼承自GenericUserBasedRecommender, 處理邏輯跟GenericUserBasedRecommender一樣,只是 的計算公式變成如下公式

其中是布爾型取值,不是0就是1。

GenericItemBasedRecommender

一個簡單的item-based的推薦器,根據傳入的DateModel和ItemSimilarity去推薦。基于Item的相似度計算比基于User的相似度計算有個好處是,item數量較少,計算量也就少了,另外item之間的相似度比較固定,所以相似度可以事先算好,這樣可以大幅提高推薦的速度。

其推薦流程可以分成三步:

? ? ? 第一步,獲取用戶Ui喜好的item集合{It1…Itm}

第一步,使用MostSimilarItemsCandidateItemsStrategy(有多種策略, 功能類似UserNeighborhood) 獲取跟用戶喜好集合里每個item最相似的其他Item構成集合 {Item1…Itemk};

第二步,對{Item1...Itemk}里的每個itemj計算 Ui可能喜歡的程度值perf(Ui, Itemj) ,并把item按這個數值從高到低排序,把前N個Item推薦給Ui。其中perf(Ui, Itemj)的計算公式如下:

其中 是用戶Ul對Iteml的喜好值。

GenericBooleanPrefItemBasedRecommender

繼承自GenericItemBasedRecommender, 處理邏輯跟GenericItemBasedRecommender一樣,只是 的計算公式變成如下公式

其中是布爾型取值,不是0就是1。

KnnItemBasedRecommender

繼承自GenericItemBasedRecommender, 處理邏輯跟GenericItemBasedRecommender一樣,只是 的計算公式比較復雜,基于一篇論文提到的算法,論文地址在這里

http://public.research.att.com/~volinsky/netflix/BellKorICDM07.pdf。根據論文介紹,該算法對數據進行了一些預處理,同時改進了鄰居選取策略,再不怎么增加計算量的情況下,可以較大幅度提高推薦準確度。

ItemAverageRecommender

這是一個提供給實驗用的推薦類,簡單但計算快速,推薦結果可能會不夠好。它預測一個用戶對一個未知item的喜好值是所有用戶對這個item喜好值的平均值,預測公式如下。

ItemUserAverageRecommender

在ItemAverageRecommender的基礎上,考慮了用戶喜好的平均值和全局所有喜好的平均值進行調整,它的預測公式如下:

? ? ? ? 其中 是所有用戶對Itemj喜好的平均值, 是用戶Ul所有喜好的平均值,是全局所有喜好值的平均值。

RandomRecommender

隨機推薦item, ?除了測試性能的時候有用外,沒太大用處。

SlopeOneRecommender

基于Slopeone算法的推薦器,Slopeone算法適用于用戶對item的打分是具體數值的情況。Slopeone算法不同于前面提到的基于相似度的算法,他計算簡單快速,對新用戶推薦效果不錯,數據更新和擴展性都很不錯,預測能達到和基于相似度的算法差不多的效果,很適合在實際項目中使用。


基本原理:


用戶 ? 對itema打分 ? ? 對itemb打分

X ? ? ? ? ? ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ? ?4

Y ? ? ? ? ? ? ? ? ? ? ? ? ?2 ? ? ? ? ? ? ? ? ? ? ? ? ?4

Z ? ? ? ? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ? ? ? ? ? ??

用戶Z對itemb的打分可能是多少呢? Slope one算法認為:所有用戶對事物A對itemb的打分平均差值是:((3 - 4) + (2 - 4)) / 2 = -1.5,也就是說人們對itemb的打分一般比事物A的打分要高1.5,于是Slope one算法就猜測Z對itemb的打分是4 + 1.5 = 5.5


當然在實際應用中,用戶不止X,Y 兩個,跟itemb相關的item也不止A一個,所以slopeone的預測公式如下:

其中表示與, 用戶Ui打過分的除itemj之外所有其他item集合, 表示用戶Ui對 itemk的打分。表示除Ui外所有其他用戶對itemk和itemj打分差值的平均值。

其中表示除Ui外其他所有用戶的集合。

SVDRecommender

?SVD(Singular Value Decomposition)的想法是根據已有的評分情況,分析出評分者對各個因子的喜好程度以及電影包含各個因子的程度,最后再反過來根據分析結果預測評分。電影中的因子可以理解成這些東西:電影的搞笑程度,電影的愛情愛得死去活來的程度,電影的恐怖程度。。。。。。SVD的想法抽象點來看就是將一個N行M列的評分矩陣R(R[u][i]代表第u個用戶對第i個物品的評分),分解成一個N行F列的用戶因子矩陣P(P[u][k]表示用戶u對因子k的喜好程度)和一個M行F列的物品因子矩陣Q(Q[i][k]表示第i個物品的因子k的程度)。用公式來表示就是
? ? ? ? ? ? ? ?R = P * T(Q) ? ? ? ? ? ? ?//T(Q)表示Q矩陣的轉置


基于SVD矩陣分解技術的推薦器,暫時沒有研究, 具體可以參考這個文檔。

https://cwiki.apache.org/confluence/display/MAHOUT/Collaborative+Filtering+with+ALS-WR

1、關于奇異值分解的理論基礎,請參看下面的鏈接http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html2、關于奇異值分解的應用場景,請參看下面的例子http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/3、關于奇異值分解輸入、輸出文格式的件的轉換,,請參考http://bickson.blogspot.com/2011/02/mahout-svd-matrix-factorization.html注意輸出結果解析的時應該用NamedVector,而不是SequentialAccessSparseVector4、輸出結果解釋輸入的矩陣記為A,mahout svd輸出的結果為矩陣A^t *A的特征值和特征向量,需要注意的是,特征值是按照順序排列的。要得到U和奇異值需要做進一步的運算(參照第一步里面提到的公式),V則是輸出的特征向量。


TreeClusteringRecommender

基于樹形聚類的推薦算法

特點

用戶數目少的時候非常合適

計算速度快

需要預先計算

這個算法在mahout-0.8版本中,已經被@Deprecated。


基于模型的推薦算法、基于滿意度得推薦算法(未實現)


轉載于:https://blog.51cto.com/1992mrwang/1337936

總結

以上是生活随笔為你收集整理的Mahout的taste推荐系统里的几种Recommender分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。