推薦系統演算法總結

2022-07-25 03:09:08 字數 2907 閱讀 2124

最近看推薦系統方面的東西也有段日子了,有書,部落格,唯獨沒有看**。

總感覺**對於工業界來說用處真的不如學校做課題、**那麼大,只要知道某個演算法好不好用以及怎麼用就可以了,也不必知道太多的細節和數學推導。但根據乙個好的演算法,產品部門可以設計出很多很酷的產品,讓使用者倍感web應用的人性化。

在看書,看大牛們的部落格時,學習到了很多演算法和思路。現在總結一下:

1、item based collective filtering

這個演算法是cf中的一種,也是當今很多大型**都在採用的核心演算法之一。

對於****(以amazon為代表,當然也包括京東那種具有搞笑特色的推薦系統在內),影視類推薦,圖書類推薦,**類推薦系統來說,item的 增長速度遠不如user的增長速度,而且item之間的相似性遠不如user之間的相似性那麼敏感,所以可以在離線系統中將item的相似度矩陣計算好, 以供線上可以近乎即時地進行推薦。因為這種方法靠的是item之間的相關性進行推薦,所以推薦的item一般都和喜歡的item內容或者特性高度相似,很 難推薦出使用者潛在喜歡的item,多樣性也比較差。

2、user based collective filtering

這個是cf中的另外一種,它的主要特色是可以發現和使用者具有同樣taste的人,有句俗話叫做觀其友知其人,大概也是這個道理吧。

3、content based

4、slope one

推薦系統的最最本質的事情就是把user-item rating矩陣中的空白填好,看穿這個本質以後,你可能會覺得問題一下子簡單多了,填格仔啊?填格仔誰不會啊。因此很多高效加搞笑的演算法就出來了。 slope one就是其中,說實話,這個演算法我自己沒有寫過,但是看到這個演算法怎麼實現的,我就覺得應該很好做,而且算起來會很快,但結果肯定不會特別理想。

slope one的基本概念很簡單, 例子1, 使用者x, y和a都對item1打了分. 同時使用者x,y還對item2打了分, 使用者a對item2可能會打多少分呢?

user

rating to item 1

rating to item 2x5

3y43

a4?根據slopeone演算法, 應該是:4 - ((5-3) + (4-3))/2 = 2.5.

當然這個只是個算例簡單地說明下原理,當user和item都很多的時候,你可以用加權的辦法來做。

為什麼我會感覺這個演算法的效果會不理想呢?

因為,這個演算法總是把你的口味和大眾的平均口味作對等,推薦出來的東西很難是非常個性化的。很容易讓很多使用者的推薦結果趨向一致,也就是大數的平均值,也即大眾的平均口味。

5、svd

svd的全稱是:singular

value

decomposition,翻譯過來是奇異值分解,是一種矩陣分解的方法。其實,這個方法是提取一般實矩陣「特徵值」的演算法,(這裡特徵值加引號是因

為,特徵值是針對方陣來定義的,而一般的m*n的實矩陣是沒有特徵值的。)其實,矩陣就是乙個線性變換的表示方法,因為乙個向量乘乙個矩陣的結果是乙個向

量,第乙個向量通過線性變換來變成第二個向量。線性變換有許多變換方向,比如你可以對乙個影象矩陣做伸縮同時也做平移。那麼特徵值和特徵向量又是什麼?一

個特徵向量就是表示其中的乙個變換方向,而對應的特徵值則表示這個變換方向對於整個線性變換有多麼重要。

書歸正傳,那麼奇異值又是什麼?我覺得奇異值就是特徵值從方陣往一般實矩陣的乙個推廣。你將乙個m*n的實矩陣和它的轉置相乘,就會得到乙個方陣,然後對這個方

陣做特徵值分解,得到的特徵值就是所謂的奇異值的平方。我的意思是說,某種意義上,可以講奇異值和特徵值理解為一回事。

那麼拿到奇異值又會有什麼用呢?拿到奇異值後,我們就可以抓到主要的成分,丟掉次要和非常次要的成分進行分析。也就是說,我們可以對原來的龐大的常常又非常稀疏

的矩陣進行降維和分解,而分解後得到的矩陣都是稠密矩陣。最終我們會得到乙個表示user特性的矩陣和乙個表示item特性的矩陣。拿到這些資料之後,我

們就可以進行推薦了,而且也可以很容易地進行聚類分析。

這個演算法的好處在於,可以解決rating矩陣的稀疏性問題,同時可以降低矩陣的維度,提高運算速度。但它的缺點是付出的空間代價太大。在做svd分解時,你需要先把乙個大的rating矩陣分解成三個大的矩陣,這三個矩陣需要存在計算機記憶體中,然後才能進行降維。

其實,svd這個方法的思路和pca(主成分分析法)很像,抓住主要矛盾,忽略次要矛盾。分解降維後的矩陣非常約等於原來的矩陣。

6、聚類演算法

這裡用到的聚類演算法,是用來降低維度以及為平行計算作準備的。

拿到rating矩陣之後,可以通過這些評分將使用者自然地聚成幾簇,然後用上述的演算法對各個簇做推薦演算法平行計算,充分地利用好所有計算資源。

當然你也可以在svd分解之後,拿到user和item矩陣之後,對這兩個矩陣分別作聚類分析,你可以得到user的簇以及item的簇。這樣的結果會非常有意義,你可以作好友推薦,相似item推薦等等。

在基於內容的演算法中,因為很多資訊之間並不是那麼的相關,把他們都相互計算相似度,會得到很多的0,所以沒有必要。因此可以在計算之前,對整個item做個聚類,然後分別對各簇來做相似度計算。

聚類演算法中,我用過效能最好的也是最簡單的就是k-means。

7、組合演算法

任何乙個演算法都有它獨特的優勢和固有的缺陷,因此單用乙個演算法的web應用很少,往往是將各種演算法組合起來用。

一種方式是:將多種演算法計算出來的結果,加權之後排序推薦給使用者。

一種方式是:將多種演算法計算出來的結果,各取前幾個推薦給使用者,這樣做的好處是結果很豐富多彩。

一種方式是:用svd演算法填充後的矩陣作為輸入,用普通cf做計算來輸出,然後排序推薦。這種叫做層次推薦,可以得到兩種方法的好處。

一種方式是:對新使用者做基於內容的推薦,因為新使用者沒有任何評分資料,對老使用者用cf來做。

。。。。

組合的方式太多了。

其實做推薦系統,演算法真的很多,這些只是我學到和用到的一點點。在學術界,許多大牛的**和研究方向就是不斷地改進計算速度,精度和提出新的演算法。

推薦系統演算法總結

最近看推薦系統方面的東西也有段日子了,有書,部落格,唯獨沒有看 總感覺 對於工業界來說用處真的不如學校做課題 那麼大,只要知道某個演算法好不好用以及怎麼用就可以了,也不必知道太多的細節和數學推導。但根據乙個好的演算法,產品部門可以設計出很多很酷的產品,讓使用者倍感web應用的人性化。在看書,看大牛們...

推薦系統演算法總結

阿俊的部落格 最近看推薦系統方面的東西也有段日子了,有書,部落格,唯獨沒有看 總感覺 對於工業界來說用處真的不如學校做課題 那麼大,只要知道某個演算法好不好用以及怎麼用就可以了,也不必知道太多的細節和數學推導。但根據乙個好的演算法,產品部門可以設計出很多很酷的產品,讓使用者倍感web應用的人性化。在...

推薦系統演算法總結

這個演算法是cf中的一種,也是當今很多大型 都在採用的核心演算法之一。對於 以 amazon 為代表,當然也包括京東那種具有搞笑特色的推薦系統在內 影視類推薦,圖書類推薦,類推薦系統來說,item 的增長速度遠不如 user 的增長速度,而且 item 之間的相似性遠不如 user 之間的相似性那麼...