推薦算法簡單總結
1、Item based collective filtering
總結:物以類聚
很多網站的核心算法之一
原因:item的增長速度遠小于user的增長速度
方法:離線計算item的相似度矩陣供線上使用
缺點:由于基于item的相似性,故推薦的item相似,缺乏多樣性
2、user based collective filtering
總結:人以群分
找和用戶有相同品味的其他用戶
適用范圍:item更新頻繁的應用
方法:通過相似用戶喜歡的item推薦給該用戶
缺點:相似用戶群比較敏感,要頻繁地計算出用戶的相似用戶矩陣,運算量會非常大。 推薦的大多是大家都喜歡的熱門推薦,有點趨于大眾化了
3、content based
方法:提取關鍵詞計算相似性 可以提前咨詢用戶的偏好
好處:沒有數據稀疏問題
4、slope one
方法:
Slope One的基本概念很簡單, 例子1, 用戶X, Y和A都對Item1打了分. 同時用戶X,Y還對Item2打了分, 用戶A對Item2可能會打多少分呢?
User | Rating to Item 1 | Rating to Item 2 |
X | 5 | 3 |
Y | 4 | 3 |
A | 4 | ? |
根據SlopeOne算法, 應該是:4 - ((5-3) + (4-3))/2 = 2.5.
優點:簡單,快速
5、svd
Singular Value Decomposition(奇異值分解)
總結:擒賊先擒王。 抓主要矛盾,忽略次要矛盾
這個方法是提取一般實矩陣“特征值”的算法,(這里特征值加引號是因為,特征值是針對方陣來定義的,而一般的m*n的實矩陣是沒有特征值的。)
將一個m*n的實矩陣和它的轉置相乘,就會得到一個方陣,然后對這個方陣做特征值分解,得到的特征值就是所謂的奇異值的平方。
拿到奇異值后,我們就可以抓到主要的成分,丟掉次要和非常次要的成分進行分析。也就是說,我們可以對原來的龐大的常常又非常稀疏的矩陣進行降維和分解,而分解后得到的矩陣都是稠密矩陣。最終我們會得到一個表示user特性的矩陣和一個表示item特性的矩陣。拿到這些數據之后,我們就可以進行推薦了,而且也可以很容易地進行聚類分析。
好處在于,可以解決rating矩陣的稀疏性問題,同時可以降低矩陣的維度,提高運算速度。但它的缺點是付出的空間代價太大
6、聚類算法
這里用到的聚類算法,是用來降低維度以及為并行計算作準備的。
拿到rating矩陣之后,可以通過這些評分將用戶自然地聚成幾簇,然后用上述的算法對各個簇做推薦算法并行計算,充分地利用好所有計算資源。
當然你也可以在svd分解之后,拿到user和item矩陣之后,對這兩個矩陣分別作聚類分析,你可以得到user的簇以及item的簇。這樣的結果會非常有意義,你可以作好友推薦,相似item推薦等等。
在基于內容的算法中,因為很多資訊之間并不是那么的相關,把他們都相互計算相似度,會得到很多的0,所以沒有必要。因此可以在計算之前,對整個item做個聚類,然后分別對各簇來做相似度計算。
最簡單的就是k-means。
7、組合算法
總結:博采眾長
任何一個算法都有它獨特的優勢和固有的缺陷,因此單用一個算法的web應用很少,往往是將各種算法組合起來用。
1:將多種算法計算出來的結果,加權之后排序推薦給用戶。
2:將多種算法計算出來的結果,各取前幾個推薦給用戶,這樣做的好處是結果很豐富多彩。
3:用svd算法填充后的矩陣作為輸入,用普通cf做計算來輸出,然后排序推薦。這種叫做層次推薦,可以得到兩種方法的好處。
4:對新用戶做基于內容的推薦,因為新用戶沒有任何評分數據,對老用戶用cf來做。
。。。。