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來做。
。。。。
論文方向:
推薦系統,學術界,許多大牛的論文和研究方向就是不斷地改進計算速度,精度和提出新的算法。