ALS演算法實現使用者音樂打分預測

大濤學長發表於2019-09-06
很多人在決定是否看一部電影之前都會去豆瓣看下評分作為參考,看完電影也會給一個自己的分數。每個人對每個商品或者電影或是音樂都有一個心理的分數,這個分數標明使用者是否對這個內容滿意。作為內容的提供方,如果可以預測出每個使用者對於內容的心理分數,就能更好的理解使用者,並給使用者提供好的內容推薦。今天就介紹下如何透過ALS矩陣分解演算法實現使用者對於音樂或者電影的評分預測。

ALS演算法介紹

ALS演算法是基於模型的推薦演算法,基本思想是對稀疏矩陣進行模型分解,評估出缺失項的值,以此來得到一個基本的訓練模型。然後依照此模型可以針對新的使用者和物品資料進行評估。ALS是採用交替的最小二乘法來算出缺失項的,交替的最小二乘法是在最小二乘法的基礎上發展而來的。

從協同過濾的分類來說,ALS演算法屬於User-Item CF,也叫做混合CF,它同時考慮了User和Item兩個方面。

我們透過音樂打分這個案例介紹下交替最小二乘法的原理,首先拿到的原始資料是每個聽眾對每首歌的評分矩陣A,這個評分可能是非常稀疏的,因為不是每個使用者都聽過所有的歌,也不是每個使用者都會對每首歌評分。

ALS矩陣分解會把矩陣A分解成兩個矩陣的相乘,分別是X矩陣和Y矩陣,

矩陣A=矩陣X和矩陣Y的轉秩的乘積

x的列表示和Y的橫表示可以稱之為ALS中的因子,這個因子是有隱含定義的,這裡假設有3個因子,分別是性格、教育程度、愛好。A矩陣經過ALS分解出的X、Y矩陣可以分別表示成:

(上圖為x矩陣)

(上圖為Y矩陣)

資料經過這樣的拆解就很容易做使用者對音樂的評分預測。比如有聽眾6,他從沒聽過“紅豆“這首歌,但是我們可以拿到聽眾6在矩陣分解中X矩陣的向量M,這時候只有把向量M和”紅豆“在Y矩陣中的對應向量N相乘,就能預測出聽眾6對於”紅豆“這首歌的評分。

ALS在PAI實驗

現在在PAI上面對ALS演算法案例進行實驗。整體流程只需要包含輸入資料來源和ALS矩陣分解元件即可。本案例已經整合於PAI-STUDIO首頁模板:

建立後如圖:

1.資料來源

輸入資料來源包含4個欄位

  • User:使用者ID
  • Item:音樂ID
  • score:user對item的評分

2.ALS矩陣分解

需要設定3個對應欄位,

引數名稱 引數描述 取值範圍 是否必選,預設值
userColName user列名 列的型別必須是bigint,可以不連續編號 必選
itemColName item列名 列的型別必須是bigint,可以不連續編號 必選
rateColName 打分列名 列的型別必須是數值型別 必選
numFactors 因子數 正整數 可選,預設值100
numIter 迭代數 正整數 可選,預設值10
lambda 正則化係數 浮點數 可選,預設值0.1
implicitPref 是否採用隱式偏好模型 布林型 可選,預設值false
alpha 隱式偏好係數 浮點數,大於0 可選,預設值40

3.結果分析

本案例中會輸出2張表,對應ALS演算法介紹中說的X矩陣和Y矩陣。

X矩陣表如圖:

Y矩陣表如圖:

比如要預測user1對音樂item994556636的評分,只要將下方兩個向量相乘即可

  • User1:[-0.14220297,0.8327106,0.5352268,0.6336995,1.2326205,0.7112976,0.9794858,0.8489773,0.330319,0.7426911]
  • item994556636:[0.71699333,0.5847747,0.96564907,0.36637592,0.77271074,0.52454436,0.69028413,0.2341857,0.73444265,0.8352135]


本文作者:傲海

原文連結

本文為雲棲社群原創內容,未經允許不得轉載。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947441/viewspace-2656255/,如需轉載,請註明出處,否則將追究法律責任。

相關文章