集體智慧型程式設計 第二章,推薦演算法

2022-07-18 21:57:28 字數 1573 閱讀 4123

有乙個**,允許使用者對她看過的電影打分。乙個可能的結果是:

使用者1:

使用者2:

使用者3:

省略其他使用者。

怎麼計算相似度呢?

第一種方式是向量距離,也就是常用的(x1-x2)^2+(y1-y2)^2開根號。

第二種方式是pearson相關係數,利用的是斜率,比如jack喜歡打高分(a:5,b:4)tom喜歡打低分(a:3,b:2),那麼還是認為jack和tom是類似的,雖然向量距離相差很遠。

這樣你就找到了與jack類似的人,比如

u1:0.9

u2:0.8

u3:0.2

那麼你是否應該直接依賴u1呢,看她推薦的,如果他給某個電影打了高分,而jack又沒看過,就推薦?

這樣做有兩個問題:

1. u1看的電影可能很少,找不到jack沒看過的電影;

2. u1可能有獨特的口味,對一步爛片可能打高分;

怎麼避免這種情況呢,我們還需要對所有電影打分,不過不同使用者打分的權重不一樣,和我們相似度高的權重高,否則權重低,這樣我們就能給所有電影打分,然後推薦分數高的電影給jack。這樣我們就能給某個使用者推薦最好的電影。

但是怎麼根據一步電影推薦另一部電影呢?可能這個使用者什麼電影都沒看過,但正在瀏覽一步電影,我們向他推薦類似的電影?

這種情況下,我們需要做乙個transform,把之前的資料變成movie:(user1:points)*的格式。然後我們就需要找出電影之間的相似度:

movie1:0.9

movie2:0.8

movie3:0.7

當使用者在瀏覽電影時,系統就會根據相識度列出哪些類似的電影。

對於大型購物**來說,有上千萬的商品,乙個使用者通常只買其中的很小一部分。

user1

如果要計算user和其他user的相似度,計算量非常的巨大。而且每個使用者都需要計算一次,實時推薦就比較困難了。

這個時候我們就需要利用基於item的過濾方式。通過獲得item:(user:grade)*的資料,利用pearson係數計算出各個item之間的相似度。更重要的是這個item之間的相似度變化比較緩慢,不必頻繁的更新。

但是如果只是利用這個相似度,給所有人的推薦就完全一樣了,這也不夠個性化。怎樣才能做出個性化的推薦呢?

假設item的相似度詞典是這樣的:

item11

item12

item13

item14

item1

.90.8

0.7.6

item2

.8.7

0.6.5

使用者給item1和item2打了分的,但是對item1x沒打分,怎麼根據item1和item2的分推算出item1x的分呢?答案就是

item1的分 * item1與它的相似度+ item2的分* item2與它的相似度

這樣就能對item1x進行排序,推薦出使用者最喜歡的產品。

所以推薦的方法大概有兩種,基於item的推薦,以及基於user的推薦。當user和item是很稠密的時候用user的,很稀疏的時候用item的。

計算相似度的兩種方法,歐氏距離或pearson相似度,是上述推薦的基礎,是衡量item或者user類似程度的手段。

集體智慧型程式設計學習筆記 第二章

前言什麼是集體智慧型?答 為了創造新的想法,而將一群人的行為 偏好或思想組合在一起。第二章 提供推薦 例子 影片推薦 一 名詞 協作型過濾演算法 collaborative filtering 對一大群人進行搜尋,從中找到與我們品味相近的一小群人。二 蒐集偏好 非常簡單的方法是使用乙個巢狀的字典 三...

第二章 演算法

本章內容了解即可。如果大家對資料結構完全不了解,我建議你先去看一下b站上郝斌老師的課程。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的優先序列,並且每條指令表示乙個或多個操作。只聽資料結構課程,當然可以,但是聽完後你可能沒有什麼感覺,因為你不知道他是幹嘛的。但是如果配合演算法來講解,你就...

第二章 演算法

一 演算法定義 二 演算法的時間複雜度與空間複雜度 1.定義 演算法是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。2.演算法的特性 演算法有五個基本特性 輸入 輸出 有窮性 確定性和可行性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸...