推薦系統 04 矩陣分解演算法

2021-09-13 23:51:27 字數 2449 閱讀 5906

netflix放出的比賽資料是評分資料,它是推薦系統中評分**模式。

本次比賽中,矩陣分解模型大放異彩,最著名的是svd以及其各種變體。

2.1 為什麼要矩陣分解

矩陣分解演算法,能很好的解決推薦系統中的評分**問題。

其中,通常k比m和n小很多。k怎麼取?用k-fold確定。

2.2. 基礎的svd演算法

svd全稱是奇異值分解,屬於線性代數範圍。它是矩陣分解演算法中的一種。推薦演算法中實際使用的是偽奇異值分解。

假設以下使用者對電影評分的矩陣:記作

這是個稀疏矩陣,矩陣中內容表示使用者對物品的評分,其中"?"表示未知的,也就是要**的。

矩陣分解就是把使用者和物品(本例中是電影)都對映到乙個k維空間中,分別記作

所以,矩陣分解是要把物品評分矩陣分解成兩個小矩陣:乙個是由代表使用者偏好的使用者隱因子向量組成,另乙個是由代表物品語義主題的隱因子向量組成。

舉例,使用者u的向量記為

如何計算每個使用者,每個物品的k維向量呢?這是機器學習問題,機器學習框架,一般考慮兩個核心要素:

定義損失函式如下:

svd學習過程如下:

(1)準備好使用者物品的評分矩陣,每一條評分資料看做一條訓練樣本

(2)對分解後的u、v矩陣做隨機初始化值

(3)用u和v計算**分數,然後計算與實際分數誤差

(4)梯度下降更新u和v

(5)重複(3)(4),直到達到停止條件

得到u和v後,實際上就是得到了每個使用者和每個物品的隱因子向量,只用做點積就可以得到使用者和物品的推薦分了。

2.3 考慮偏置資訊

損失函式為:

2.4 考慮歷史行為

顯式反饋比隱式反饋少得多。在svd中結合使用者的隱式反饋行為和屬性(比如性別),這套模型稱作svd++

加入隱式反饋:使用者有過行為的物品集合也配置乙個隱因子向量,維度是一樣的。把使用者操作過的物品隱因子向量加起來,用來表達使用者的興趣偏好。

加入使用者屬性:全部轉換成0-1型,配置隱因子向量同上。

svd++的損失函式為:

其中,x是隱式反饋向量,y是使用者屬性向量。

2.5 考慮時間因素

人是善變的。過去喜歡的物品,現在可能不喜歡了。

考慮時間因素,有以下幾種做法:

最小化矩陣分解的損失函式,常用方法有兩個:

在實際應用中,交替最小二乘更常用一些。它也是facebook在他們的推薦系統中用的主要矩陣分解方法。

als演算法是2023年以來,用的比較多的協同過濾演算法。它已經整合到spark的mllib庫中,使用起來比較方便。從協同過濾的分類來說,als演算法屬於user-item cf,也叫做混合cf。它同時考慮了user和item兩個方面。

3.1 演算法原理

機器就是這麼單純簡單,先用乙個假的結果讓演算法先跑起來,然後不斷迭代得到最終結果。

3.2 隱式反饋

矩陣分解演算法,是為解決評分**問題而生的。**使用者會給物品打多少分,然後把高分物品推薦給使用者。想想看,相比「**使用者會打多少分」,「**使用者會不會對物品產生行為」更有意義。如果把**使用者行為看成乙個二分類問題,那麼通常明確的只有一類:使用者幹了某件事,而使用者明確「不幹」某件事的資料往往沒有明確表達。這叫one-class問題。

考慮隱式反饋的矩陣分解,叫做加權交替最小二乘演算法:weighted-als。

此時的損失函式如下:

其中,3.3 推薦計算

第一種:利用一些專門的資料結構儲存所有物品的隱因子向量,從而實現通過乙個使用者向量返回最相似的k個物品。facebook有開源實現faiss,類似其它的開源實現有annoy,kgraph,nmslib。如果要動態增加新的物品向量,推薦用faiss。

參考:1. 交替最小二乘演算法(als)

推薦演算法 矩陣分解

相關位址 矩陣分解是乙個非常優雅的推薦演算法,因為當設計到矩陣分解時,我們通常不會太多地區思考哪些專案將停留在所得到矩陣的列和行中。但是其使用這個推薦引擎,我們清楚地看到,u是第i個使用者的興趣向量,v是第j個電影的引數向量。所以我們可以通過u和v的點積來估算x 第i個使用者對第j個電影的評分 我們...

eq值 推薦演算法 5 矩陣分解 推薦系統

ri j ui k pj n 將推薦值矩陣r分解為矩陣 u 和p 使得u 和 p 的乘積得到的矩陣r 中的元素值與r的中 巳知元素的值非常接近 那麼r 中對應於r中的未知的元素值就是 值 u的每 行代 表 個使用者畫像向量,p 的每 行代表 個物品的畫像向量 假設使用者對物品的喜好的值是取決於幾 個...

推薦系統ALS矩陣分解

思想類似線性回歸做 大致如下 定義乙個 模型 數學公式 然後確定乙個損失函式,將已有資料作為訓練集,不斷迭代來最小化損失函式的值,最終確定引數,把引數套到 模型中做 矩陣分解的 模型是 損失函式是 我們就是要最小化損失函式,從而求得引數q和p。矩陣分解模型的物理意義 我們希望學習到乙個p代表user...