SVD在推薦系統(tǒng)中的應(yīng)用

<center>SVD在推薦系統(tǒng)中的應(yīng)用</center>

摘要

隨著網(wǎng)絡(luò)信息爆炸性增長,用戶很難在海量的信息中找到自己需要的產(chǎn)品;商家也難以通過人工的方式向用戶推薦其喜愛的產(chǎn)品,錯失商機(jī)。基于SVD的協(xié)同過濾算法能夠通過分析用戶——產(chǎn)品的評分矩陣,來對空白評分進(jìn)行預(yù)測,根據(jù)預(yù)測結(jié)果來對用戶進(jìn)行產(chǎn)品推薦。但是傳統(tǒng)的SVD方法不支持對稀疏矩陣進(jìn)行分解,因此需要對稀疏評分矩陣進(jìn)行填充。利用總體平均值進(jìn)行填充,效率太低,很難應(yīng)用于實(shí)際生產(chǎn),通過Funk-SVD方法可以既能夠填充稀疏矩陣,也能夠兼顧效率。

??關(guān)鍵字:SVD ?Funk—SVD ?推薦系統(tǒng) ?協(xié)同過濾

??協(xié)同過濾(Collaborative Filtering,簡稱CF)是利用集體智慧的一個典型方法,算法的核心思想類似于我們在選擇看一本書時,往往會參考與自己口味相近的朋友的意見。基于CF算法的主要有兩種,一種是基于領(lǐng)域的方法,另一種是基于隱語義的方法。

??基于領(lǐng)域的方法主要是通過收集用戶行為,得到用戶和物品的特征向量,進(jìn)一步計算相似度,找到物品或用戶的相似鄰居。基于隱語義的方法不依賴與共同評分,其基本思想是將用戶和物品分別映射到兩個真實(shí)含義未知的特征向量上去。這兩個特征向量的含義并不能通過人為給定,只能通過SVD模型自己來確定。模型讀取用戶和物品組成的評分矩陣,通過最小化損失來學(xué)習(xí)這兩個向量。

??SVD又稱奇異值分解,是線性代數(shù)中一種矩陣分解的技術(shù),它能夠?qū)⑷我庖粋€m*n的矩陣A分解成為U、S、V,U是m*m的正交矩陣,V是n*n的正交矩陣,S是m*n的矩陣,且A=U*S*V。通過SVD方式將矩陣A分解后,如果只保留前k個最大的奇異值,就實(shí)現(xiàn)了對矩陣降維的目的。我們之所以能夠通過保留前k個最大的奇異值來實(shí)現(xiàn)降維,是因?yàn)樵诤芏嗲闆r下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。盡管我們能夠通過降維來減少運(yùn)算量,但是k值的選取是我們需要面對的重要問題。如果k值選的過大,那么降維的意義就不大;如果k值選的過小,那么降維之后就有可能丟失重要信息。下面通過一個例子來具體說明SVD算法在推薦系統(tǒng)中的應(yīng)用。

??假設(shè)存在以下行為user和列為item的數(shù)據(jù)矩陣A,0表示沒有看過該電影:
A= \left[ \begin{matrix} 5 & 5 & 0 & 5\\ 5 & 0 & 3 & 4\\ 3 & 4 & 0 & 3\\ 0 & 0 & 5 & 3\\ 5 & 4 & 4 & 5\\ 5 & 4 & 5 & 5 \end{matrix} \right]

??通過SVD分解之后產(chǎn)生U、S、V三個矩陣:

U= \left[ \begin{matrix} -0.4472 & -0.5373 & -0.0064 & -0.5037 & -0.3857 & -0.3298\\ -0.3586 & 0.2461 & 0.8622 & -0.1458 & 0.0780 & 0.2002\\ -0.2925 & -0.4033 & -0.2275 & -0.1038 & 0.4360 & 0.7065\\ -0.2078 & 0.6700 & -0.3951 & -0.5888 & 0.0260 & 0.0667\\ -0.5099 & 0.0597 & -0.1097 & 0.2869 & 0.5946 & -0.5371\\ -0.5316 & 0.1887 & -0.19145 & 0.5341 & -0.5485 & 0.2429 \end{matrix} \right]
S= \left[ \begin{matrix} 17.7139 & 0 & 0 & 0\\ 0 & 6.3917 & 0 & 0\\ 0 & 4 & 3.0980 & 0\\ 0 & 0 & 0 & 1.3290\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 \end{matrix} \right]
V= \left[ \begin{matrix} -0.5710 & -0.2228 & 0.6749 & 0.4109\\ -0.4275 & -0.5172 & -0.6929 & 0.2637\\ -0.3846 & 0.8246 & -0.2532 & 0.3286\\ -0.5859 & 0.0532 & 0.0140 & -0.8085 \end{matrix} \right]

??此時,我們選取k=2來對U,S,V進(jìn)行降維,k=2即表示我們默認(rèn)該數(shù)據(jù)集含有兩個隱形因子:

U'= \left[ \begin{matrix} -0.4472 & -0.53738\\ -0.3586 & 0.2461\\ -0.2925 & -0.4033\\ -0.2078 & 0.6700\\ -0.5099 & 0.0597\\ -0.5316 & 0.1887 \end{matrix} \right]
S'= \left[ \begin{matrix} 17.7139 & 0\\ 0 & 6.3917 \end{matrix} \right]
'= \left[ \begin{matrix} -0.5710 & -0.2228\\ -0.4275 & -0.5172\\ -0.3846 & 0.8246\\ -0.5859 & 0.0532 \end{matrix} \right]

??此時我們通過降維后的U、S、V相乘來得到A':

A'= \left[ \begin{matrix} 5.2885 & 5.1627 & 0.2149 & 4.4591\\ 3.2768 & 1.9021 & 3.7400 & 3.8058\\ 3.5324 & 3.5479 & -0.1332 & 2.8984\\ 1.1475 & -0.6417 & 4.9472 & 2.3846\\ 5.0727 & 3.6640 & 3.7887 & 5.3130\\ 5.1086 & 3.4019 & 4.6166 & 5.5822 \end{matrix} \right]

??通過矩陣A和A'的比較,我們可以很直觀的看出這兩個矩陣十分相似,可以看做是一種數(shù)據(jù)有損的壓縮。此時我們可以開始對一個新用戶進(jìn)行初步的推薦。假設(shè)該用戶的評分向量p=[5,5,0,0,0,5],首先我們通過公式p'=p*U'*S'l來得出用戶的二維向量,接著通過余弦相似度計算來找出與新用戶最相似的用戶評分向量q=[5,5,3,0,5,5],這樣我們可以根據(jù)向量q來對向量p進(jìn)行填充,也就是預(yù)測。但是,這種預(yù)測存在非常大的誤差。因?yàn)槠娈惙纸庖缶仃囀浅砻艿模簿褪钦f奇異分解不允許待分解矩陣中存在空白的部分,這與現(xiàn)實(shí)生活是沖突的。在現(xiàn)實(shí)生活中,評分矩陣一定是稀疏的,因?yàn)橛脩魶]有評分的物品一定是占大多數(shù)。為了解決這一問題,我們可以預(yù)先對缺失值進(jìn)行填充,例如使用全局平均值。但是這一方法也有一個缺點(diǎn)——時間復(fù)雜度非常高。顯示生活中,用戶和物品的數(shù)目成千上萬,計算總體平均值的效率非常低。

??為了解決矩陣稀疏性,同時提高運(yùn)算效率,我們引入了Funk—SVD算法。該算法又稱為隱語義模型,主要思路是,將原始評分矩陣A(m*n)分解成兩個矩陣P(m*k)和Q(k*n),同時僅考察原始評分矩陣中有評分的項分解結(jié)果是否準(zhǔn)確,而判別標(biāo)準(zhǔn)則是均方差。即對于矩陣A(m*n),我們想辦法將其分解為P(m*k)、Q(k*n),此時對于原始矩陣中有評分的位置M'ui來說,其在分解后矩陣中對應(yīng)的值就是:


p1.png

那么對于整個評分矩陣而言,總的損失就是:


p2.png

SSE越小,說明總體的損失越小,預(yù)測結(jié)果越精確。我們可以通過隨機(jī)梯度下降法來求SSE的最小值,隨機(jī)梯度下降法在此就不展開敘述。得出最小SSE后,我們通過公式(1)來對原評分矩陣進(jìn)行填充,也就是對用戶的空白評分進(jìn)行預(yù)測。

??將SVD用于推薦系統(tǒng),推薦結(jié)果比較準(zhǔn)確,模型的拓展性也很強(qiáng),能夠應(yīng)用于各種場景。但是SVD模型的可解釋性很差,其中的隱性因子無法對應(yīng)與現(xiàn)實(shí)生活中的具體概念,模型的訓(xùn)練速度仍然有待提高。總體來說,SVD在推薦系統(tǒng)的應(yīng)用方面擁有良好的前景。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容