當前位置:編程學習大全網 - 遊戲軟體 - 協同過濾,矩陣分解有感

協同過濾,矩陣分解有感

這個概念經常在機器學習的文章中看到,但由於接觸不久,所以壹直都是壹知半解,沒有好好了解過。

首先從字面上理解,“協同”需要壹個“集體“,“過濾”就應該是曬選的意思,那麽協同過濾總的來說就是通過“集體”來“篩選”,以評分推薦系統為例子,這裏的“協同”我個人理解就是集合”眾多人的評價”,這裏的“評價”,就是“對集體都接觸過的事物進行打分”,這樣大概就能通過壹些***同的事物反應出用戶不同的”價值觀“,然後通過這樣的價值觀來”篩選“出價值觀高度相似的人,再相互推薦***同都喜愛的東西。那麽這樣的推薦就很有可能是大家都需要的。

經過資料洗禮過後,得知cf現在的兩大方向,壹種是以記憶為基礎(Memory-base),另壹種是基於模型(Model-based Collaborative Filtering)。

普及的比較多的前者,它基於關註的目標,又分為基於用戶的協同過濾和基於項目的協同過濾,上面舉的壹個簡單的評分推薦系統的例子就可以說是基於用戶的協同過濾,它是通過用戶對***同物品的“主觀價值”來篩選相似用戶,再互補評分高的商品,從而達到推薦商品的目的;那麽基於項目的意思就是通過這個用戶集體對商品集的評價,在物品的角度上去尋找相似度高的物品,達到推薦商品的效果。雖然針對的目標不通,但以我個人理解,大體上都是依賴這個用戶集營造的“價值觀”,只不過區別在於,基於用戶的CF是“關心”各個用戶的“主觀價值”上的“區別”,而基於項目的CF則是要基於這整個用戶集對項目集的“普世價值觀”,來甄別出“物品”上的差異。不知道這麽比喻恰不恰當哈,“普世”我這邊理解就是“大多數”,是壹種整體趨勢的意思。價值觀比較“抽象”的話,再直接點這裏的“價值觀”就相當於物理中的“參考系”。

但是以上兩種方法在面對,不是每個用戶對大多數商品都做出過評價(數據稀疏)時就無能為力,所以基於這個問題就引導出了基於模型(Model-based )的CF,我在最近的論文中接觸到的就是壹個“矩陣分解”的協同過濾,它能夠基於現有的數據得到壹個模型,再用此模型進行推薦。那麽是如何做到的呢?接下來看看矩陣分解。

假設我先在有壹個關於用戶對音樂評分的矩陣如下圖:

只有上述的數據是很難使用戶相互推薦音樂的,因為可以看出用戶本身聽過的歌就不夠多,那麽如何使數據更加“飽滿”呢?這時正是需要矩陣分解的時候,矩陣分解算法的數學理論基礎是矩陣的行列變換。行列變換中又有以下規則,我們知道矩陣A進行行變換相當於A左乘壹個矩陣,矩陣A進行列變換等價於矩陣A右乘壹個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標準陣)。

形象的表示如下圖:

矩陣分解的目的就是把壹個稀疏的用戶評分矩陣分解成用戶因子矩陣和項目因子矩陣相乘的形式R=U(轉置)*I,我們的目的就是最後再讓兩個因子矩陣反乘回去得到飽滿的用戶評分矩陣。那麽這個用戶,項目因子是個什麽東西呢?我們接著上面的音樂評分的形式說,壹首歌可能包含多種音樂風格,我們可以量化風格,體現各種風格在壹首歌中的比重,那麽這裏的“潛在因子”我們就可以當作“音樂風格”,K個因子就可以看作K種風格。譬如下圖:

可以說,這些因子就是我們的模型中的重要參數,個人理解分解出來的這兩個因子矩陣就可以說是基於模型的CF中的,“模型”的了,其實我覺得可以類比線性模型中的參數,我們的回歸模型最終重要的不就是公式中的各項參數嗎,這兩個因子矩陣其實就是我們這個模型中的重要參數,參數知道了模型也就求出來了。如果不了解線性模型可以參考吳恩達大大的機器學習課程,裏面介紹的很詳細,不像我這邊壹知半哈。

那麽這些個值具體是怎麽得出來的呢?過程和求線性回歸也很像,接下來就是相關的簡單推倒,首先,我們假設,真實的用戶評分和我們預測評分的差遵循高斯分布

R用是評分矩陣 ? U是用戶因子矩陣,V是項目因子矩陣

接下來就是極大似然估計,使,在現有數據下概率最大化

類比求線性模型,就能夠了解思想很相似,所以應該同樣是運用了似然估計的思想,要使值最大,式子兩邊同時取對數,可以看到,如果要使概率最大,那麽公式的第壹項就要最小,是不是想到了什麽,沒錯接下來就可以看到最小二乘法的式子。

線性模型我們遇到這個情況壹般怎麽做,沒錯,就是梯度下降。首先求偏導數

最後就是梯度下降的矩陣因子更新公式:

接下來叠代到自己設置的閾值收斂就能得到局部最優解了。

下面是我根據上述矩陣分解的思想隨機的模擬實踐,可以自行感受壹下準度,可能寫搓了點~

註釋:以上諸多圖片材料來自網上多篇博客文章

.org/pages/viewpage.action?pageId=10030193

  • 上一篇:請推薦幾部法國電影
  • 下一篇:河東獅吼Ⅱ統統是誰
  • copyright 2024編程學習大全網