推荐系统-基于矩阵分解的LFM模型
這里我想給大家介紹另外一種推薦系統,這種算法叫做潛在因子(Latent Factor)算法。這種算法是在NetFlix(沒錯,就是用大數據捧火《紙牌屋》的那家公司)的推薦算法競賽中獲獎的算法,最早被應用于電影推薦中。這種算法在實際應用中比現在排名第一的?@邰原朗?所介紹的算法誤差(RMSE)會小不少,效率更高。我下面僅利用基礎的矩陣知識來介紹下這種算法。
這種算法的思想是這樣:每個用戶(user)都有自己的偏好,比如A喜歡帶有小清新的、吉他伴奏的、王菲等元素(latent factor),如果一首歌(item)帶有這些元素,那么就將這首歌推薦給該用戶,也就是用元素去連接用戶和音樂。每個人對不同的元素偏好不同,而每首歌包含的元素也不一樣。我們希望能找到這樣兩個矩陣:
一.用戶-潛在因子矩陣Q,
表示不同的用戶對于不用元素的偏好程度,1代表很喜歡,0代表不喜歡。比如下面這樣:
二.潛在因子-音樂矩陣P
表示每種音樂含有各種元素的成分,比如下表中,音樂A是一個偏小清新的音樂,含有小清新這個Latent Factor的成分是0.9,重口味的成分是0.1,優雅的成分是0.2……
利用這兩個矩陣,我們能得出張三對音樂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
每個用戶對每首歌都這樣計算可以得到不同用戶對不同歌曲的評分矩陣。(注,這里的破浪線表示的是估計的評分,接下來我們還會用到不帶波浪線的R表示實際的評分):
因此我們隊張三推薦四首歌中得分最高的B,對李四推薦得分最高的C,王五推薦B。
如果用矩陣表示即為:
下面問題來了,這個潛在因子(latent factor)是怎么得到的呢?
由于面對海量的讓用戶自己給音樂分類并告訴我們自己的偏好系數顯然是不現實的,事實上我們能獲得的數據只有用戶行為數據。我們沿用?@邰原朗的量化標準:單曲循環=5, 分享=4, 收藏=3, 主動播放=2 , 聽完=1, 跳過=-2 , 拉黑=-5,在分析時能獲得的實際評分矩陣R,也就是輸入矩陣大概是這個樣子:
事實上這是個非常非常稀疏的矩陣,因為大部分用戶只聽過全部音樂中很少一部分。如何利用這個矩陣去找潛在因子呢?這里主要應用到的是矩陣的UV分解。也就是將上面的評分矩陣分解為兩個低維度的矩陣,用Q和P兩個矩陣的乘積去估計實際的評分矩陣,而且我們希望估計的評分矩陣
這里涉及到最優化理論,在實際應用中,往往還要在后面加上2范數的罰項,然后利用梯度下降法就可以求得這P,Q兩個矩陣的估計值。這里我們就不展開說了。例如我們上面給出的那個例子可以分解成為這樣兩個矩陣:
這兩個矩陣相乘就可以得到估計的得分矩陣:
在這個例子里面用戶7和用戶8有強的相似性:
從推薦的結果來看,正好推薦的是對方評分較高的音樂:
###########################################################################################
具體公式:
下面我們就來看看LFM是如何解決上面的問題的?對于一個給定的用戶行為數據集(數據集包含的是所有的user, 所有的item,以及每個user有過行為的item列表),使用LFM對其建模后,我們可以得到如下圖所示的模型:(假設數據集中有3個user, 4個item, LFM建模的分類數為4)
R矩陣是user-item矩陣,矩陣值Rij表示的是user i 對item j的興趣度,這正是我們要求的值。對于一個user來說,當計算出他對所有item的興趣度后,就可以進行排序并作出推薦。LFM算法從數據集中抽取出若干主題,作為user和item之間連接的橋梁,將R矩陣表示為P矩陣和Q矩陣相乘。其中P矩陣是user-class矩陣,矩陣值Pij表示的是user i對class j的興趣度;Q矩陣式class-item矩陣,矩陣值Qij表示的是item j在class i中的權重,權重越高越能作為該類的代表。所以LFM根據如下公式來計算用戶U對物品I的興趣度
我們發現使用LFM后,?
那么,接下去的問題就是如何計算矩陣P和矩陣Q中參數值。一般做法就是最優化損失函數來求參數。在定義損失函數之前,我們需要準備一下數據集并對興趣度的取值做一說明。
數據集應該包含所有的user和他們有過行為的(也就是喜歡)的item。所有的這些item構成了一個item全集。對于每個user來說,我們把他有過行為的item稱為正樣本,規定興趣度RUI=1,此外我們還需要從item全集中隨機抽樣,選取與正樣本數量相當的樣本作為負樣本,規定興趣度為RUI=0。因此,興趣的取值范圍為[0,1]。
采樣之后原有的數據集得到擴充,得到一個新的user-item集K={(U,I)},其中如果(U,I)是正樣本,則RUI=1,否則RUI=0。損失函數如下所示:
上式中的是用來防止過擬合的正則化項,λ需要根據具體應用場景反復實驗得到。損失函數的優化使用隨機梯度下降算法:
其中,α是學習速率,α越大,迭代下降的越快。α和λ一樣,也需要根據實際的應用場景反復實驗得到。本書中,作者在MovieLens數據集上進行實驗,他取分類數F=100,α=0.02,λ=0.01。
? ? ? ? ? ?
綜上所述,執行LFM需要:
1.相關文檔
http://blog.csdn.net/sinat_33741547/article/details/52976391
http://www.cnblogs.com/tbiiann/p/6535189.html
http://www.cnblogs.com/hxsyl/p/4885372.html
總結
以上是生活随笔為你收集整理的推荐系统-基于矩阵分解的LFM模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 佛山t卡怎么申请
- 下一篇: 够快云库, 加速企业信息化建设