Matrix Factorization 矩陣分解
今日的課程來自於: https://youtu.be/iwh5o_M4BNU?t=4670
本文來介紹矩陣分解的方法。通常我們在尋找兩個變項的關係,而他們之間可能受到某種潛在因素(latent factor)的控制,但是我們通常無法直接知道latent factor是甚麼。
比方,我們可以描述購買者和公仔的屬性,如果這個人與某公仔是match的,他們的vector很像(內積值很大),這個人就很容易買這個公仔
但是! 現實是,我們沒辦法知道購買著與公仔的屬性為何? 所以沒有辦法直接使用latent factor
所以我們可以把每個人的屬性用vector r^A ~ r^E表示,而公仔的屬性是r¹、r²、r³、r⁴ 表示,購買的數量可以用 matrix X表示,X裡面每個元素,都是每個人購買的公仔數量
比方: r^A.r¹ ≈5,表示r^A和r¹的屬性比較貼近
從上圖可以看到 Matrix X ≈ 購買者矩陣(M*K) . 公仔矩陣(K*M)
但是我們不知道K的數量,K= latent factor的數量;這部分需要我們調整
所以我們的目標是使用SVD的訪法,找出兩個矩陣的解(購買者矩陣、公仔矩陣),使兩個矩陣相乘的結果與Matirx X越接近越好
Matrix X 的未知數
有時候,Matrix X可能有missing 的,這時候就難以用SVD精準描述,但是我們可以用gradient descent 來求解,首先寫出loss function
其中 r^i 值的是購買者背後的latent factor, r^j 指的是公仔背後的latent factor,我們要讓這兩個vector的內積與實際購買該公仔的數量n_ij越接近越好,這個方法的關鍵之處在於,計算上式時,可以跳過missing的數據,最終通過gradient descent求得和的值
假設latent factor的數目等於2,則購買者的屬性和公仔的屬性都是2維的vector,這裡實際進行計算後,把屬性中較大值標註出來,可以發現:
- 購買者:A、B屬於同一組屬性,C、D、E屬於同一組屬性
- 動漫角色:1、2屬於同一組屬性,3、4屬於同一組屬性
- 結合動漫角色,可以分析出動漫角色的第一個維度是天然呆屬性,第二個維度是傲嬌屬性
- 接下來就可以預測未知的值,只需要將人和動漫角色的vector做內積即可
這也是推薦系統的常用方法
這也是推薦系統常用的方法
more about matrix factorization
除了購買者與公仔之間的關係之外,也有可能存在其他的因素控制購買數量的數值,我們可以將公式更精確的改成:
其中,b_A表示A這個人本身有多喜歡買公仔,b_1是這個公仔有多讓人想購買,這些內容跟屬性vector無關的,此時loss function被寫成:
當然我們也可以加上regulatization去對結果作約束,上面的loss function可使用gradient descent 解