推薦系統構建中的PCA和SVD演算法
推薦本質上是求相似度,重點是如何度量相似性。推薦的常用演算法是協同過濾演算法,該演算法基於使用者行為的資料而設計的推薦演算法。M個人對N個商品產生行為,從而構成聯絡,對M個人進行聚類是基於使用者(M1和M2相似,則已知M1購買P1,可將P1商品推薦給M2),對N個商品進行聚類是基於商品(P1和P2商品相似,則已知M1購買P1,可將P2商品推薦給M1)。
相似度/距離計算方法有以下幾種:
(1)閔可夫斯基距離
(2) 歐式距離
(3)傑卡德相似係數(Jaccard)
(4)餘弦相似度
(5)Pearson相似係數
(6)相對熵(K-L距離)
Jaccard相似度的由來
R(u)是給使用者u作出的推薦列表,而T(u)是使用者在測試集上真正的行為列表
準確率/召回率
Jaccard係數
評價推薦系統的首要離線指標
通過將單個使用者的準確率(或召回率)做累加,即得到整個推薦系統的準確率(或召回率),該離線指標常常用於比較各個推薦系統之間的優劣。
評價推薦系統的其他指標
覆蓋率:
考慮不同商品出現的次數(概率),則可用資訊熵或基尼係數。
多樣性:
s(i,j)表示相同個數。
驚喜度:滿意度/相似度
使用者驚喜度來自於和使用者喜歡的物品不相似,但使用者卻覺得滿意的推薦。
降維問題的提出(PCA)
實際問題往往需要研究多個特徵,而這些特徵存在一定的相關性,資料量增加了問題的複雜性。將多個特徵綜合為少數幾個代表性特徵。既能夠代表原始特徵的絕大多數資訊,組合後的特徵又互不相關,降低相關性,主成分,即主成分分析。
考察降維後的樣本方差
對於n個特徵的m個樣本,將每個樣本寫成行向量,得到矩陣A
思路:尋找樣本的主方向u; 將m個樣本值投影到某直線L上,得到m個位於直線L上的點,計算m個投影點的方差。認為方差最大的直線方向是主方向。這裡假定樣本是去均值化的,若沒有去均值化,則計算m個樣本的均值,將樣本真實值減去均值。
計算投影樣本點的方差
1.取投影直線L的延伸方向u,計算A·u的值
2.求向量A·u的方差
則得到目標函式
3.由於u數乘得到的方向和u相同,因此,增加u是單位向量的約束,即||u||=1,則
4.建立Lagrange方程
若A中的樣本都是去均值化的,則與A的協方差矩陣僅相差係數n-1
根據上公式,u是的一個特徵向量,λ的值大小為原始觀測資料的特徵在向量u的方向上投影值的方差。
PCA的重要應用
特徵提取:比如變數組合 2X1+X2
資料壓縮:降維(把不重要的特徵給除去),對原始觀測資料A在λ值前k大的特徵向量u上投影后,獲得一個的序列,再加上特徵向量矩陣Q,即將A原來的m*n個數據壓縮到m*k+k*n個數據。
PCA總結
實對稱矩陣的特徵值一定是實數,不同特徵值對應的特徵向量一定正交,重數為r的特徵值一定有r個線性無關的特徵向量;
樣本矩陣的協方差矩陣必然一定是對稱矩陣,協方差矩陣的元素即各個特徵間相關性的度量;
將協方差矩陣C的特徵向量組成矩陣P,可以將C合同為對角矩陣D,對角矩陣D的對角元素即為A的特徵值。
;
協方差矩陣的特徵向量,往往單位化,即特徵向量的模為1,從而,P是標準正交矩陣:
將特徵空間線性加權,使得加權後的特徵組合間是不相關的,選擇若干最大的特徵值對應的特徵向量(即新的特徵組合),即完成了PCA的過程。
關於PCA的進一步思考(SVD)
若A是m*n階矩陣,不妨認為m>n,則是n*n階方陣。根據下式計算:
從而,將矩陣A可以寫成U,V兩個方陣和對角矩陣D的乘積,這一過程,稱作奇異值分解SVD.
SVD是一種重要的矩陣分解方法,可以看做對稱方陣在任意矩陣上的推廣。假設A是一個m*n階的實矩陣,則存在一個分解使得:,通常將奇異值由大到小排列,這樣,便能由A唯一確定了。
SVD的四個矩陣,在實際中, 往往只保留前k個較大的數。
因為面積(n-k)*m>k*k+k*n,說明PCA具有資料壓縮的作用
SVD方法(奇異值分解)還可以被用來計算矩陣的偽逆。若矩陣A的奇異值分解為,那麼A的偽逆為其中是的偽逆,是將主對角線上每個非零元素都求倒數之後再轉置得到的。求偽逆通常可以用來求解最小二乘法問題。
廣義逆矩陣(偽逆)
若A為非奇異矩陣,則線性方程組Ax=b的解為
若A為可逆矩陣,即為
當A為矩陣(非方陣)時,稱為A的廣義逆(偽逆)
新使用者的個性化推薦
對於新使用者(Bob),如何對其做個性化推薦呢? 將A擴充套件後重新計算SVD,然後聚類使用者(不需要這樣做) 事實上,然後,計算新加使用者(Bob)和現在使用者的距離:餘弦距離(一定意義下即為相關係數),求出其與最近的使用者
注:推薦系統涉及到隱變數,比如電影推薦,拿到的資料僅是使用者對電影的評分資料,但是通過SVD分解,往往能找到中間的主題變數/隱變數(比如,愛情、武俠等),這一主題變數是銜接使用者和電影的橋樑,通過這一主題變數,可以分別在使用者間、電影間進行求相似度,從而形成要推薦的內容。這和主題模型是一致的思路,PCA和SVD總結
矩陣對向量的乘法,對應於對該向量的旋轉、伸縮。如果對某向量只發生了伸縮而無旋轉變化,則該向量是該矩陣的特徵向量,伸縮比即為特徵值。
PCA是用來提取一個場的主要資訊(即主成分分量),而SVD一般用來分析兩個場的相關關係。兩者在具體的實現方法上也有不同,SVD是通過矩陣奇異值分解的方法分解兩個場的協方差矩陣的,而PCA是通過分解一個場的協方差矩陣。
PCA可用於特徵的壓縮、降維;當然也能去噪等;如果將矩陣轉置後再用PCA,相當於去除相關度過大的樣本資料——但不常見,SVD能夠對一般矩陣分解,發現隱變數,並可用於個性化推薦等內容。(n*n)降維物件為特徵,(m*m)降維物件為樣本。
關於電影權值問題:如果電影M1非常流行,相當數目的人都看過;電影M2流行度偏低,則如果兩人都看過M2,則他們的相似度應該更高,適當提高非流行商品的權值。