讀書筆記 推薦系統實踐 常見推薦演算法及應用

2021-09-12 20:26:04 字數 3740 閱讀 6378

**:

《推薦系統實踐》系統性地介紹了推薦系統這一領域,思路清晰,詳細介紹了各個領域不同情景的推薦演算法的應用,是一本很好的推薦系統入門書,尤其第二第三章的講解比較細緻。(ps:書中插入的python**有點生硬,讀者可以直接忽略)

衡量推薦演算法的指標

使用者滿意度

**準確度

對於topn推薦(這裡主要討論topn推薦),對於準確度的衡量有兩個指標。r(u)是針對測試集,根據使用者在訓練集上的行為給使用者作出的推薦列表,而t(u)是使用者在測試集上的行為列表。

召回率:表示使用者喜歡的物品列表裡被推薦系統推薦到的比例

recall=∑u∈ur(u)⋂t(u)∑u∈u|t(u)|

recall=∑u∈ur(u)⋂t(u)∑u∈u|t(u)|

準確率:表示推薦系統推薦給使用者的列表裡使用者喜歡該推薦的比例

precision=∑u∈ur(u)⋂t(u)∑u∈u|r(u)|

precision=∑u∈ur(u)⋂t(u)∑u∈u|r(u)|

覆蓋率:述乙個推薦系統對物品長尾的發掘能力。覆蓋率 最簡單的定義為推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的使用者集合為u ,推薦系統給每個使用者推薦乙個長度為n的物品列表r(u) 。

使用代價比較高的使用者行為賦予更高的權重,代價比較的高的行為造假率低。

使用資料前,進行攻擊檢測

推薦演算法簡介

當前業界用的最多的演算法就是基於領域的推薦演算法,包括基於使用者的協同過濾和基於內容的系統過濾,當然還有一些其他演算法,包括了基於圖的推薦演算法、基於內容的推薦演算法、隱語義模型、利用標籤推薦等等。

1. 基於使用者的協同過濾

a.推薦思想

當乙個使用者a需要個性化推薦 時,可以先找到和他有相似興趣的其他使用者(這裡的興趣相似指兩人感興趣的物品重合度高),然後把那些使用者喜歡的、而使用者a沒有聽說過的物品推薦給a。這種方法稱為基於使用者的協同過濾演算法。

主要步驟包括:

wuv=|n(u)⋂n(v)||n(u)||n(v)|−−−−−−−−−−√

wuv=|n(u)⋂n(v)||n(u)||n(v)|

比如使用者a對物品a,b,d產生過正反饋,使用者b對物品a,c產生過正反饋

使用者    物品

a    a,b,d

b    a,c

那麼使用者a與使用者b的相似度計算為:

wab=|a,b,d⋂a,c||a,b,d||a,c|−−−−−−−−−√=16–√

wab=|a,b,d⋂a,c||a,b,d||a,c|=16

假設使用者數為n,利用乙個n*n使用者矩陣c儲存使用者兩兩之間相似度。但是這樣兩兩計算使用者相似度,使用者數量多了之後,複雜度顯然不可取。所以通常的計算方法是利用倒排表(物品到使用者的倒排表)。對於每個物品都儲存對該物品產生過行為的使用者列表,設使用者u和使用者v同時屬於倒排表中a物品對應的使用者列表,那麼矩陣對應的[u, v]位置加一。可以掃瞄倒排表中每個物品對應的使用者列表,最終就可以得到所有使用者之間相似度矩陣c。

注意得到了相似矩陣對於每個位置還需要除以|n(u)||n(v)|−−−−−−−−−−√|n(u)||n(v)|,才能得到相似度。

看下圖,就會更清晰。

完成了使用者之間相似度的計算,下面要根據相似度找到推薦的物品列表。

如下的公式度量了usercf演算法中使用者u對物品i的感興趣程度。這裡s(u, k)包含和使用者u興趣最接近的k個使用者,n(i)是對物品i有過行為的使用者集合,wuv 是使用者u和使用者v的興趣相似度,rvi代表使用者v對物品i的興趣(這裡可以設為1):

pu,i=∑v∈s(u,k)⋂n(i)wuvrvi

pu,i=∑v∈s(u,k)⋂n(i)wuvrvi

最後依據pu,ipu,i,找到最感興趣的n的物品推薦給使用者。

c.演算法改進

在計算使用者相似度的時候,簡單的使用了余弦相似度公式,但這個公式過於粗糙。以電商為例子,如果兩人都夠了熱門商品,並不能說明他們的相似度,因為很多人都會購買熱門物品,所以改進的相似計算如下,懲罰了熱門物品對相似度的影響。

主要步驟包括:

wij=|n(i)⋂n(j)||n(i)||n(j)|−−−−−−−−−−√

wij=|n(i)⋂n(j)||n(i)||n(j)|

假設物品數為m,利用乙個m*m物品矩陣c儲存兩兩物品之間相似度。思路同usercf,常的計算方法是利用倒排表(使用者到物品的倒排表)。對於每個使用者都儲存乙個他喜歡的物品列表,然後對於每個使用者,將他物品列表中的物品兩兩在共現矩陣c中加1。然後除以|n(i)||n(j)|−−−−−−−−−−√|n(i)||n(j)|得到相似度。

看下圖,就會更清晰。

完成了物品之間相似度的計算,下面要根據相似度找到推薦的物品列表。

itemcf通過如下公式計算使用者u對乙個物品j的興趣 。這裡n(u)是使用者喜歡的物品的集合,s(j,k)是和物品j最相似的k個物品的集合,wji是物品j和i 的相似度,rui是使用者u對物品i的興趣。

pu,i=∑i∈s(j,k)⋂n(u)wjirui

pu,i=∑i∈s(j,k)⋂n(u)wjirui

最後依據pu,ipu,i,找到最感興趣的n個物品推薦給使用者。

3. usercf和itemcf的比較

指標    usercf    itemcf

效能    適用於使用者較少的場合,如果使用者很多,計算使用者 相似度矩陣代價很大    適用於物品數明顯小於使用者數的場合,如果物品很多計算物品相似度矩陣代價很大

領域    時效性較強,使用者個性化興趣不太明顯的領域    長尾物品豐富,使用者個性化需求強烈的領域

實時性    使用者有新行為,不一定造成推薦結果的立即變化    使用者有新行為,一定會導致推薦結果的實時變化

冷啟動    在新使用者對很少的物品產生行為後,不能立即對他進行個性化推薦,因為使用者相似度錶是每隔一段時間離線計算的。 新物品上線後一段時間,一旦有使用者對物品產生行 為,就可以將新物品推薦給和對它產生行為的使用者 興趣相似的其他使用者    新使用者只要對乙個物品產生行為,就可以給他推薦和該物品相關的其他物品 。 沒有辦法在不離線更新物品相似度錶的情況下將新物品推薦給使用者

推薦理由    很難提供令使用者信服的推薦解釋    利用使用者的歷史行為給使用者做推薦解釋,可以令 使用者比較信服

4. 基於圖的推薦演算法

多用於社交關係推薦。將使用者行為資料表示成圖的形式。資料是由一系列二元組組成的,其中每個二元組(u, i)表示使用者u對物品i產生過行為。很容易用乙個二分圖表示。

將使用者行為表示為二分圖模型後,下面的任務就是在二分圖上給使用者進行個性化推薦。如果將個性化推薦演算法放到二分圖模型上,那麼給使用者u推薦物品的任務就可以轉化為度量使用者頂點 vu和與vu沒有邊直接相連的物品節點在圖上的相關性,相關性越高的物品在推薦列表中的權重就越高。

具體演算法可以使用隨機遊走的personalrank演算法。

假設要給使用者u進行個性化推薦,可以從使用者u對應的節點開始在使用者物品二分圖上進行隨機遊走。遊走到任何乙個節點時,首先按照概率α決定是繼續遊走,還是停止這次遊走並從初識節點開始重新遊走。如果決定繼續遊走,那麼就從當前節點指向的節點中按照均勻分布隨機選擇一 個節點作為遊走下次經過的節點。這樣,經過很多次隨機遊走後,每個物品節點被訪問到的概率 會收斂到乙個數。最終的推薦列表中物品的權重就是物品節點的訪問概率

5. 基於內容的推薦演算法

該推薦方法簡單的利用物品之間的相似度進行推薦,給使用者推薦與自己喜歡過物品相似的物品,而這裡的相似度僅簡單由物品本身計算而來(具體計算方法可根據不同物品的特性來定),無須使用者參與。因為改方案常用於推薦系統冷啟動。

利用使用者註冊時提供的年齡、性別等資料做粗粒度的個性化

要求使用者在登入時對一些物品進行反饋,收集使用者對這些物品的興趣資訊,然後給使用者推薦那些和這些物品相似的物品。

對於新加入的物品,可以利用內容資訊,將它們推薦給喜歡過和它們相似的物品的使用者

推薦系統實踐讀書筆記

最近大概複習了一下這本書,了解了較早的推薦系統的一些方法,記錄如下,以便大家對本書內容有個快速地了解。略去了第一張,詳細的 和細節可以參考其他部落格。需要關注的地方直接標出了頁碼。書裡面的 不是很完整,用來學習還可以。第八章介紹了一些svd等機器學習的演算法,在2020年的今天可以回顧一下。推薦系統...

《推薦系統實踐》讀書筆記4

為什麼要研究系統的時間特性?不同系統有不同的時效性,有的系統物品的時效性很短,熱起來,很快會冷下去 而有的系統物品的時效性長,具有比較長的生命週期。研究系統的時間特性,能增強系統的有效性推薦。比如推薦新聞,會主要選擇最近時間段發生的新聞事件進行推薦 而推薦旅遊景點,時效性較長 有些也有季節性變化 則...

《推薦系統實踐》讀書筆記 推薦系統十戒

1 確定你真的需要推薦系統。推薦系統只有在使用者遇到資訊過載時才有必要。若你的 物品不多,或使用者興趣單一,那麼也許並不需要推薦系統。所以不要糾結於推薦系統這個詞,不要為了推薦系統而做推薦系統,而要從使用者的角度出發,設計出能夠真正幫助使用者發現內容的系統。2 確定商業目標和使用者滿意度之間的關係。...