本质矩阵svd分解_SVD推荐系统
整理一下近期學習推薦系統(tǒng)算法的思路,定位一下SVD在整個推薦系統(tǒng)框架中的位置:
首先,我們知道,任何推薦系統(tǒng)的整體大框架都是兩部分:對某個用戶user而言:首先是從數(shù)百萬種Item中粗略的選出千級別的Item(實現(xiàn)這種功能的方法叫做召回算法),然后從幾百上千的Item中精細的預(yù)測算出用戶對每個Item的具體評價分數(shù),然后選出前十個評價分數(shù)最高的Item推薦給用戶(實現(xiàn)該方法的過程稱為排序算法)
基于召回的算法,我們常常使用的有兩種:基于用戶行為的以及基于內(nèi)容的。基于用戶行為的推薦算法我們也稱為協(xié)同過濾算法,基于內(nèi)容的推薦算法后期詳細討論。而協(xié)同過濾算法又分為兩大類,一類是基于鄰域的協(xié)同過濾算法,一類是基于LFM(隱因子模型),而我們今天重點討論的SVD算法就是召回算法里的LFM算法。
基于排序的算法,有LR,FM,GBDT+LR,GBDT+FM,深度學習的一些算法等等,后期會重點更新。
接下來,我們進入重點,SVD算法是如何實現(xiàn)的,其作用機理是什么?我們從以下三點討論:
第一,SVD是什么。
SVD中文名字奇異值分解,顧名思義,是一種矩陣分解的方法,任何矩陣,都可以通過SVD的方法分解成幾個矩陣相乘的形式。
數(shù)學表達式:
A=U*S* V,其中A就是被分解的矩陣,A矩陣是m* n維的,U是一個正交矩陣m * m維的,S是一個特征值矩陣(即對角元素均為A的特征值)m* n維,V也是一個正交矩陣n* n維的。
至于如何分解,請自行查閱數(shù)學書。好的,說白了,SVD就是一種矩陣分解的方法,將一個矩陣A分解成三個矩陣相乘,這只是一個數(shù)學上的一種“變化”,那他有啥具體的意義呢?
首先,SVD可用于矩陣降維,在ML中,如果我們處理的矩陣是一個非常高緯度的矩陣,即A的n是一個很龐大的數(shù)字(可能有上億列),那我們該怎么辦?此時就可以使用SVD進行矩陣降維。降維不是簡單的維度變小,而是維度變小后,矩陣的原始信息沒有發(fā)生很大改變(可以參考我前面的一篇關(guān)于PCA的最大方差理論來解釋)。研究表明,一個矩陣的前10%的大的特征值可以代表90%的矩陣信息,所以可以借助該思想進行矩陣降維。上面提到,SVD的中間矩陣是一個特征值矩陣,如果我們只取前k個大的特征值,即可實現(xiàn)降維。具體來說:將原來的S矩陣變成m* k維,V變成k* k維,則最后A就變成m* k維的,實現(xiàn)了降維。(如何將原來的S矩陣變成m* k維,V變成k* k維?將分解后的特征值由大到小排序后,直接取S的前m行k列,V的k行k列即可。)
至此,我們使用到了SVD的第一個用途:降維,這在機器學習中有很大的實際意義。
接下來,我們解釋SVD為什么可以使用到推薦系統(tǒng)中?
在這里,我們使用的思想和降維的出發(fā)點不一樣,我們使用的是SVD可以進行“矩陣分解”這一特點。
我們在召回階段的目的是由一個稀疏的評分矩陣推算出其中的空缺分數(shù)。(補充:評分矩陣是指每個用戶對各個電影的評價分數(shù),m行代表m個用戶,n行代表n個電影)
我們的目的是得到用戶對未評價電影的分數(shù),而這種user-Item的評分矩陣中,用戶對Item的分數(shù)是沒有直接關(guān)系的,我們需要尋找一種隱空間,使得將用戶和Item聯(lián)系起來。比如我們無法得知user1對《利刃出鞘》這部電影的分數(shù),但是我們可以通過用戶的歷史信息(即用戶對別的電影的分數(shù))得到用戶對“懸疑”類電影的愛好程度,我們也可以得到某個電影的“懸疑類”的程度有多大,這樣,我們就可以將這倆個關(guān)系聯(lián)系到一起了,比如我們想用戶A對《南方車站的故事》進行預(yù)測,我們無法直接得到他的分數(shù),但是我們知道他對“懸疑”類的電影有多喜愛,而《南方車站的故事》的“懸疑”程度有多大,兩個值相乘即可得到A對《南方車站的故事》的預(yù)測分數(shù),這里我們只是使用到了一個維度:“懸疑”類,我們可以將矩陣A分解成m* k列的一共k個維度的矩陣,將電影分解成k * n列一共k個維度的矩陣,然后這兩個矩陣相乘即可得到矩陣中空的A[i][j]的值。
說白了,我們這里使用到得SVD的思想只是說任何一個矩陣均可以分解成兩個矩陣相乘的形式(SVD是三個,但也可以合并倆個得到兩個矩陣),這倆個子矩陣分別代表了用戶的偏好程度和電影的成分程度,將這兩個矩陣相乘即可得到用戶對電影的評分矩陣。
3.推薦系統(tǒng)的SVD如何具體實現(xiàn)。
至此,我們使用SVD的思想將矩陣A分解成兩個矩陣相乘的形式(B*C),但事情沒有那么簡單,我們的推薦系統(tǒng)的矩陣A是一個稀疏矩陣,基本上是不能分解的,無法直接SVD,但分解的思想我們依舊要使用,所以我們使用機器學習的方法,使用最小均方誤差學習到每個矩陣的各個元素,具體來講就是,矩陣B的i行乘矩陣C的j列得到A的ij元素,有真實值的A[i][j]元素作為標簽,不斷地使用RMSE減小A中所有的標簽,然后得到矩陣B和C,然后使用B和C取預(yù)測A中的空白缺失值。
那為什么SVD又稱為隱語義模型(LFM)?因為這里我們的分解矩陣BC的維度k是不確定的,我們也不知道分解成幾個成分,我們只是使用“懸疑”這一個成分特征來說明,可能機器學習不僅僅提取的是“懸疑”這個成分,還有很多成分,這些成分我們都不知道,所以又叫做隱語義,這里的分解其實是提取k個特征,具體工程中自己決定k值。
總結(jié)
以上是生活随笔為你收集整理的本质矩阵svd分解_SVD推荐系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyui表单网格列错位_《HTML5
- 下一篇: github 删除分支_Github新手