1. 程式人生 > >機器學習實戰(Machine Learning in Action)學習筆記————10.奇異值分解(SVD)原理、基於協同過濾的推薦引擎、資料降維

機器學習實戰(Machine Learning in Action)學習筆記————10.奇異值分解(SVD)原理、基於協同過濾的推薦引擎、資料降維

關鍵字:SVD、奇異值分解、降維、基於協同過濾的推薦引擎
作者:米倉山下
時間:2018-11-3
機器學習實戰(Machine Learning in Action,@author: Peter Harrington)
原始碼下載地址:https://www.manning.com/books/machine-learning-in-action
https://github.com/pbharrin/machinelearninginaction


********************************************************************************

奇異值分解(Singular Value Decomposition,簡稱SVD)是在機器學習領域廣泛應用的演算法,它不光可以用於降維演算法中的特徵分解,還可以用於推薦系統,以及自然語言處理等領域,是很多機器學習演算法的基石。

SVD應用:SVD在資料壓縮(如PCA)、於降維演算法中的特徵分解、推薦演算法、潛在語義索引(LSI)等領域都有著廣泛的應用

--------------------------------------------------------------------------------------------
一、奇異值分解(SVD)原理

SVD分解與PCA有都可以實現降維,在pca中Ax=λx,如果我們求出了矩陣A的n個特徵值λ1≤λ2≤...≤λn,以及這n個特徵值所對應的特徵向量{w1,w2,...wn},,如果這n個特徵向量線性無關,那麼矩陣A就可以用下式的特徵分解表示:A=WΣW−1。進行特徵分解,矩陣A必須為方陣;如果A不是方陣,即行和列不相同時,可以使用SVD。SVD也是對矩陣進行分解,但是和特徵分解不同,SVD並不要求要分解的矩陣為方陣。假設我們的矩陣A是一個m×n的矩陣,那麼我們定義矩陣A的SVD為:A=UΣVT,其中U是一個m×m,的矩陣,Σ是一個m×n的矩陣,除了主對角線上的元素以外全為0,主對角線上的每個元素都稱為奇異值,V是一個n×n的矩陣。U和V都是酉矩陣,即滿足UTU=I,VTV=I。

<1>主成分分析通過對原始資料線性變化,最大化協方差矩陣,使在新的空間內資料的方差最大化(能量集中),特徵值分解,對是針對資料列的降維。
<2>SVD分解是非方正條件下對資料進行奇異值分解。左奇異矩陣可以用於行數的壓縮,右奇異矩陣可以用於列數即特徵維度的壓縮。

與PCA相比,SVD也可以得到協方差矩陣XTX最大的d個特徵向量張成的矩陣,但是SVD有個好處,有一些SVD的實現演算法可以不求先求出協方差矩陣XTX,也能求出我們的右奇異矩陣V。也就是說,我們的PCA演算法可以不用做特徵分解,而是做SVD來完成。這個方法在樣本量很大的時候很有效。實際上,scikit-learn的PCA演算法的背後真正的實現就是用的SVD,而不是我們我們認為的暴力特徵分解。在現在的大資料時代,由於SVD可以實現並行化,因此更是大展身手。

PCA的原理及數學推倒可以看

【PCA】,SVD的原理和理解看【SVD】
(微信公眾號的有些基礎文章質量真的是比論壇部落格的質量高)

書中對隱形語義的講解感覺很突兀,我的理解是:其實可以理解為將將一個語義空間去進行分析處理。如在文中餐館的例子,進行奇異值分解就是:VT矩陣會將使用者對映到BBQ/日式食品空間去。U矩陣會將餐館的菜對映到BBQ/日式食品空間去。自然語言中的奇異值分解形成“概念”後面再慢慢學習

--------------------------------------------------------------------------------------------
二、基於協同過濾的推薦引擎

首先需要說明,推薦引擎有很多方法,協同過濾只是眾多場景下的一種,如有基於內容推薦、協同過濾、關聯規則(Apriori演算法、FPgrowth演算法)、混合推薦等。

基於協同過濾的推薦引擎原理:協同過濾(collaborative filtering)是通過將使用者和其他使用者的資料進行對比來實現推薦的。利用相似物品,基於相似度加權平均求得未評價物品的預測評分,求得未評價物品預測評分的前N高,以此作為推薦項。

SVD(奇異值分解)在協同過濾推薦引擎中的作用是利用U對行資料降維,以解決矩陣稀疏問題,去除了噪聲和冗餘資訊。SVD的作用是:實現了降維,將資料對映/壓縮到某個隱形空間,SVD來減少特徵空間並提高推薦的效果。可以將奇異值想象成一個新空間。這二維分別是什麼呢?能告訴我們資料的什麼資訊?這二維分別對應圖中給出的兩個組,右圖中已經標示出了其中的一個組。可基於每個組的共同特徵來命名這二維,比如得到的美式BBQ和日式食品這二維。

書中首先講了計算相似度的三種方法,包括歐氏距離、皮爾遜相關係數、餘弦相似度。書中計算的是各種餐館之間的相似度。

接著,就可以利用相似度便可以基於協同過濾進行推薦了,在使用者沒有評級的所有物品中,對每個物品預計一個可能的評級分數。這就是說,我們認為使用者可能對物品的打分(這就是相似度計算的初衷),對這些物品的評分從高到底進行排序,返回前N個物品。

最後,利用SVD提高推薦的效果,解決資料矩陣稀疏問題,並且可以去燥。將使用者對映到BBQ/日式食品空間,然後再計算餐館之間的相似度,加權求為評價商品的得分。

--------------------------------------------------------------------------------------------
三、基於SVD的影象壓縮
奇異值分解能夠有效的降低資料的維數,圖片為例,從450維降到149維後,還保留了90%的資訊

原理:
使用SVD來對資料降維,從而實現影象的壓縮。在協同過濾推薦引擎中僅使用SVD的左奇異矩陣U,在影象壓縮中不僅用到了U還用到了V。一張二維n*m的灰度圖片可以看做是n*m的矩陣,利用SVD可以實現對二維影象的壓縮。

書中採用了二值化o-1矩陣,對資料進行了SVD壓縮,僅保留前兩個奇異值的資訊,然後採用一個閾值還是把矩陣還原為一個0-1矩陣。(灰度圖片和RGB圖片的SVD分解下一節介紹)



注意:雖然奇異值分解很有效,但是不能濫用,一般情況下要求降維後資訊的損失度不能超過5%,甚至是1%

書中原始碼
--------------------------------------------------------------------------------------------
參考文獻:

劉建平-奇異值分解(SVD)原理與在降維中的應用:https://mp.weixin.qq.com/s/Z0ZkQlZDKUSJEWVq7Vi6Cg  & https://www.cnblogs.com/pinard/p/6251584.html

讀書筆記(3) | SVD演算法及應用 :https://mp.weixin.qq.com/s/EOmViXqvcIiN2cx5RtHSBg

機器學習實戰 第十四章 利用SVD簡化資料:https://blog.csdn.net/namelessml/article/details/52987113