矩陣分解演算法

2021-10-25 05:48:23 字數 2966 閱讀 6742

核心思想:通過隱含特 徵(latent factor)聯絡使用者興趣和物品(item), 基於使用者的行為找出潛在的主題和分類, 然後對item進行自動聚類,劃分到不同類別/主題(使用者的興趣)。

對比:是把協同過濾演算法進行了一種延伸, 把使用者的相似性和物品的相似性通過了乙個叫做隱向量的方式進行表達

如果我們知道了使用者a和使用者b兩個使用者在豆瓣的讀書列表, 從他們的閱讀列表可以看出,使用者a的興趣涉及偵探**、科普圖書以及一些計算機技術書, 而使用者b的興趣比較集中在數學和機器學習方面。 那麼如何給a和b推薦圖書呢?

先說說協同過濾演算法, 這樣好對比不同:

這裡就看到了隱語義模型和協同過濾的不同, 這裡說的角度其實就是這個隱含特徵, 比如書籍的話它的內容, 作者, 年份, 主題等都可以算隱含特徵,如果這個例子還不是很清晰的話, 那麼下面再舉個更為具體的例子, 看看是如何通過隱含特徵來劃分開使用者興趣和物品的。通過上面這個例子, 我們已經感受到了協同過濾和隱語義模型的區別, 下面的原理圖作為對比, 區別簡直一目了然:

我們下面拿乙個**評分的例子來具體看一下隱特徵矩陣的含義。

潛在因子—— 使用者矩陣q

這個矩陣表示不同使用者對於不同元素的偏好程度, 1代表很喜歡, 0代表不喜歡, 比如下面這樣:

潛在因子——**矩陣p

表示每種**含有各種元素的成分, 比如下表中, **a是乙個偏小清新的**, 含有小清新的latent factor的成分是0.9, 重口味的成分是0.1, 優雅成分0.2…

在這裡插入描述

利用上面的這兩個矩陣, 我們就能得出張三對**a的喜歡程度:

張三對小清新的偏好 * **a含有小清新的成分 + 張三對重口味的偏好 * **a含有重口味的成分 + 張三對優雅的偏好 * **a含有優雅的成分…,
下面是對應的兩個隱向量:

根據隱向量其實就可以得到張三對**a的打分,即: 0.6∗0.9+0.8∗0.1+0.1∗0.2+0.1∗0.4+0.7∗0=0.69

按照這個計算方式, 每個使用者對每首歌其實都可以得到這樣的分數, 最後就得到了我們的評分矩陣:

這裡的紅色表示使用者沒有打分,我們通過隱向量計算得到的。

上面例子中的小清晰, 重口味, 優雅這些就可以看做是隱含特徵, 而通過這個隱含特徵就可以把使用者的興趣和**的進行乙個分類, 其實就是找到了每個使用者每個**的乙個隱向量表達形式(embedding的原理其實也是這樣, 那裡是找到每個詞的隱向量表達), 這個隱向量就可以反映出使用者的興趣和物品的風格,並能將相似的物品推薦給相似的使用者等。 有沒有感覺到是把協同過濾演算法進行了一種延伸, 把使用者的相似性和物品的相似性通過了乙個叫做隱向量的方式進行表達

但是, 真實的情況下我們其實是沒有上面那兩個矩陣的, **那麼多, 使用者那麼多, 我們沒有辦法去找一些隱特徵去表示出這些東西, 另外乙個問題就是即使能表示也不一定準, 對於每個使用者或者每個物品的風格,我們每個人都有不同的看法。 所以事實上, 我們有的只有使用者的評分矩陣, 也就是最後的結果, 並且一般這種矩陣長這樣:

這種矩陣非常的稀疏,如果直接基於使用者相似性或者物品相似性去填充這個矩陣是不太容易的, 並且很容易出現長尾問題, 所以矩陣分解就可以比較容易的解決這個問題。

矩陣分解模型其實就是在想辦法基於這個評分矩陣去找到上面例子中的那兩個矩陣, 也就是使用者興趣和物品的隱向量表達, 然後就把這個評分矩陣分解成q和p兩個矩陣乘積的形式, 這時候就可以基於這兩個矩陣去**某個使用者對某個物品的評分了。 然後基於這個評分去進行推薦。這就是矩陣分解演算法的原理。

在矩陣分解的演算法框架下, 我們就可以通過分解協同過濾的共現矩陣來得到使用者和物品的隱向量, 就是上面的使用者矩陣q和物品矩陣p, 這也是「矩陣分解」名字的由來。

矩陣分解演算法將 m×n 維的共享矩陣 r 分解成 m×k 維的使用者矩陣 u 和 k×n 維的物品矩陣 v 相乘的形式。 其中 m 是使用者數量, n 是物品數量, k 是隱向量維度, 也就是隱含特徵個數, 只不過這裡的隱含特徵變得不可解釋了, 即我們不知道具體含義了, 要模型自己去學。 k 的大小決定了隱向量表達能力的強弱, k 越大, 表達資訊就越強, 理解起來就是把使用者的興趣和物品的分類劃分的越具體。

那麼如果有了使用者矩陣和物品矩陣的話, 我們就知道了如果想計算使用者 u 對物品 i 的評分, 只需要

這裡的 pu 就是使用者 u 的隱向量, 就類似與上面的張三向量, 注意這是列向量, qi 是物品 i 的隱向量, 就類似於上面的**a向量, 這個也是列向量, 所以才用了 ptuqi 得到了乙個數, 也就是使用者的最終評分, 計算過程其實和上面例子中一樣。 這裡的 pu,k 和 qi,k 是模型的引數, 也正是我們想辦法要計算的, pu,k 度量的是使用者 u 的興趣和第 k 個隱類的關係, 而 qi,k 度量了第 k 個隱類和物品 i 之間的關係。

首先是evd, 它要求分解的矩陣是方陣, 顯然使用者-物品矩陣不滿足這個要求, 而傳統的svd分解, 會要求原始矩陣是稠密的, 而我們這裡的這種矩陣一般情況下是非常稀疏的, 如果想用奇異值分解, 就必須對缺失的元素進行填充, 而一旦補全, 空間複雜度就會非常高, 且補的不一定對。 然後就是svd分解計算複雜度非常高, 而我們的使用者-物品矩陣非常大, 所以基本上無法使用。

推薦演算法 矩陣分解

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

矩陣分解推薦演算法(LMF)

首先我們現在有乙個矩陣 r 其中 r 代表第 i 個使用者對第 j 個商品的喜愛程度。lmf 演算法認為每個商品上面都有一些隱因子,而顧客的喜愛程度是由這些隱因子來決定的。因此便可以將 r 分解成 p times q 的形式。矩陣 p 代表了這 m 個使用者對 f 個隱因子的喜愛程度,q 代表這 f...

矩陣分解 Cholesky分解

矩陣分解是將矩陣拆解為數個矩陣的乘積,可分為三角分解 滿秩分解 qr分解 jordan分解和svd 奇異值 分解等。cholesky分解法是求解對稱正定線性方程組最常用的方法之一。可採用如下命令 r chol a 產生乙個上三角陣r,使r r a。若a為非對稱正定,則輸出乙個出錯資訊。r,p cho...