<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表示沒有看過該電影:
??通過SVD分解之后產(chǎn)生U、S、V三個矩陣:
??此時,我們選取k=2來對U,S,V進(jìn)行降維,k=2即表示我們默認(rèn)該數(shù)據(jù)集含有兩個隱形因子:
??此時我們通過降維后的U、S、V相乘來得到A':
??通過矩陣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)的值就是:
那么對于整個評分矩陣而言,總的損失就是:
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)用方面擁有良好的前景。