這裡我想給大家介紹另外一種推薦系統,這種演算法叫做潛在因子(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)是怎麼得到的呢?
事實上這是個非常非常稀疏的矩陣,因為大部分使用者只聽過全部**中很少一部分。如何利用這個矩陣去找潛在因子呢?這裡主要應用到的是矩陣的uv分解。也就是將上面的評分矩陣分解為兩個低維度的矩陣,用q和p兩個矩陣的乘積去估計實際的評分矩陣,而且我們希望估計的評分矩陣
和實際的評分矩陣不要相差太多,也就是求解下面的目標函式:
這裡涉及到最優化理論,在實際應用中,往往還要在後面加上2範數的罰項,然後利用梯度下降法就可以求得這p,q兩個矩陣的估計值。這裡我們就不展開說了。例如我們上面給出的那個例子可以分解成為這樣兩個矩陣:
這兩個矩陣相乘就可以得到估計的得分矩陣:
將使用者已經聽過的**剔除後,選擇分數最高**的推薦給使用者即可(紅體字)。
在這個例子裡面使用者7和使用者8有強的相似性:
從推薦的結果來看,正好推薦的是對方評分較高的**:
推薦系統之LFM
這裡我想給大家介紹另外一種推薦系統,這種演算法叫做潛在因子 latent factor 演算法。這種演算法是在netflix 沒錯,就是用大資料捧火 紙牌屋 的那家公司 的推薦演算法競賽中獲獎的演算法,最早被應用於電影推薦中。這種演算法在實際應用中比現在排名第一的 邰原朗 所介紹的演算法誤差 rms...
推薦系統之LFM(二)
顯然我們不能靠由單個人 編輯 或team的主觀想法建立起來的分類標準對整個平台使用者喜好進行標準化。此外我們還需要注意的兩個問題 我們在可見的使用者書單中歸結出3個類別,不等於該使用者就只喜歡這3類,對其他類別的書就一點興趣也沒有。也就是說,我們需要了解使用者對於所有類別的興趣度。對於乙個給定的類來...
推薦系統 02 隱語義模型LFM
隱語義模型 lfm 圖形解釋 lfm的前生今世 隱語義模型的適用性 關於訓練集 基本概念 那麼如何產生負樣本呢?負樣本的選擇 小結 如何計算權重 負樣本取樣過程 如何求解c的極小值 演算法原理 原函式 deffun x,y return x y 2 x x 2 x y y y 偏x導 defpxfu...