薦演算法入門

2021-08-04 12:02:07 字數 2469 閱讀 4867

推薦演算法大致可以分為以下幾類

可以按照乙個專案的流行度進行排序,將最流行的專案推薦給使用者。比如在微博推薦中,將最為流行的大v使用者推薦給普通使用者。微博每日都有最熱門話題榜等等。 

演算法十分簡單,通過簡單熱度排序即可。

協同過濾演算法(collaborative filtering, cf)是很常用的一種演算法,在很多電商**上都有用到。cf演算法包括基於使用者的cf(user-based cf)和基於物品的cf(item-based cf)。

2.1 基於使用者的cf

1、分析各個使用者對item的評價(通過瀏覽記錄、購買記錄等); 

2、依據使用者對item的評價計算得出所有使用者之間的相似度; 

3、選出與當前使用者最相似的n個使用者; 

4、將這n個使用者評價最高並且當前使用者又沒有瀏覽過的item推薦給當前使用者。 

首先我們根據**的記錄計算出乙個使用者與item的關聯矩陣,如下,以微博資料為例 

圖中,行是不同的使用者,列是所有物品,(x, y)的值則是x使用者對y物品的評分(喜好程度)。我們可以把每一行視為乙個使用者對物品偏好的向量,然後計算每兩個使用者之間的向量距離,這裡我們用余弦相似度來算: 

然後得出使用者向量之間相似度如下,其中值越接近1表示這兩個使用者越相似: 

最後,我們要為使用者1推薦物品,則找出與使用者1相似度最高的n名使用者(設n=2)評價的物品,去掉使用者1評價過的物品,則是推薦結果。 

基於物品的cf原理大同小異,只是主體在於物品:

1、分析各個使用者對item的瀏覽記錄。 

2、依據瀏覽記錄分析得出所有item之間的相似度; 

3、對於當前使用者評價高的item,找出與之相似度最高的n個item; 

4、將這n個item推薦給使用者。 

2、基於物品的cf

計算方式大致相同,只是關聯矩陣變為了item和item之間的關係,若使用者同時瀏覽過item1和item2,則(1,1)的值為1,最後計算出所有item之間的關聯關係如下: 

對於微博資料集,item可以指的是被關注者(followee),而item之間的相似度可以通過使用者對於item的行為來統計。如果使用者對於item有過行為,則可以令偏好值為1。針對使用者關注行為列表,可以通過統計item在使用者關注列表中的共現次數來計算。 

優點:演算法簡單,一定程度上準確率高 

缺點:1、依賴於準確的使用者評分; 

2、在計算的過程中,那些大熱的物品會有更大的機率被推薦給使用者; 

3、冷啟動問題。當有一名新使用者或者新物品進入系統時,推薦將無從依據; 

4、在一些item生存周期短(如新聞、廣告)的系統中,由於更新速度快,大量item不會有使用者評分,造成評分矩陣稀疏,不利於這些內容的推薦。

基於模型的方法有很多,用到的諸如機器學習的方法也可以很深,這裡只簡單介紹下比較簡單的方法——logistics回歸**。我們通過分析系統中使用者的行為和購買記錄等資料,得到如下表: 

中的行是一種物品,x1~xn是影響使用者行為的各種特徵屬性,如使用者年齡段、性別、地域、物品的**、類別等等,y則是使用者對於該物品的喜好程度,可以是購買記錄、瀏覽、收藏等等。通過大量這類的資料,我們可以回歸擬合出乙個函式,計算出x1~xn對應的係數,這即是各特徵屬性對應的權重,權重值越大則表明該屬性對於使用者選擇商品越重要。

在擬合函式的時候我們會想到,單一的某種屬性和另一種屬性可能並不存在強關聯。比如,年齡與購買護膚品這個行為並不呈強關聯,性別與購買護膚品也不強關聯,但當我們把年齡與性別綜合在一起考慮時,它們便和購買行為產生了強關聯。比如(我只是比如),20~30歲的女性使用者更傾向於購買護膚品,這就叫交叉屬性。通過反覆測試和經驗,我們可以調整特徵屬性的組合,擬合出最準確的回歸函式。最後得出的屬性權重如下: 

基於模型的演算法由於快速、準確,適用於實時性比較高的業務如新聞、廣告等,而若是需要這種演算法達到更好的效果,則需要人工干預反覆的進行屬性的組合和篩選,也就是常說的feature engineering。而由於新聞的時效性,系統也需要反覆更新線上的數學模型,以適應變化。

現實應用中,其實很少有直接用某種演算法來做推薦的系統。在一些大的**如netflix,就是融合了數十種演算法的推薦系統。我們可以通過給不同演算法的結果加權重來綜合結果,或者是在不同的計算環節中運用不同的演算法來混合,達到更貼合自己業務的目的。

稀缺薦讀 認知天性 薦讀

目錄 稀缺薦讀 認知天性 薦讀 記住不要讓自己時常處於緊張的狀態,這樣效率不高,還很容易犯錯 定目標,重過程,輕結果才是最好的狀態 稀缺 這本書講了了乙個醫院的例子,一家綜合性大醫院有32間手術室,可是這家醫院每天都有大量的手術要做,因為突發狀況的發生醫院做的手術計畫總會被打亂,為了完成計畫醫生總要...

薦 記憶體位元組對齊

一 原理 原則1 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 原則2 結構體大小必須是所有成員大小的整數倍。結構體總大小等於最後乙個成員的偏移量加上其大小 二 例項 例1 計算結構體的大小 struct a int a char b char c 解析 利用sizeof...

薦 Angular常見誤區

前言 翻譯了半年之後,感覺差不多可以 金盆洗手 了。具體原因感興趣的朋友可以閱讀 about technical translation 這篇文章。但是自從不翻譯了之後,逼自己看英文技術文章就少了很多,所以就給自己想出了新的點子 推薦閱讀系列。還有另外乙個系列,stay tuned。看我月底能憋出什...