<center>SVD在推薦系統(tǒng)中的應(yīng)用</center>
摘要
隨著網(wǎng)絡(luò)信息爆炸性增長(zhǎng),用戶(hù)很難在海量的信息中找到自己需要的產(chǎn)品勾缭;商家也難以通過(guò)人工的方式向用戶(hù)推薦其喜愛(ài)的產(chǎn)品,錯(cuò)失商機(jī)。基于SVD的協(xié)同過(guò)濾算法能夠通過(guò)分析用戶(hù)——產(chǎn)品的評(píng)分矩陣将谊,來(lái)對(duì)空白評(píng)分進(jìn)行預(yù)測(cè),根據(jù)預(yù)測(cè)結(jié)果來(lái)對(duì)用戶(hù)進(jìn)行產(chǎn)品推薦渐白。但是傳統(tǒng)的SVD方法不支持對(duì)稀疏矩陣進(jìn)行分解,因此需要對(duì)稀疏評(píng)分矩陣進(jìn)行填充逞频。利用總體平均值進(jìn)行填充纯衍,效率太低,很難應(yīng)用于實(shí)際生產(chǎn)苗胀,通過(guò)Funk-SVD方法可以既能夠填充稀疏矩陣襟诸,也能夠兼顧效率。
??關(guān)鍵字:SVD ?Funk—SVD ?推薦系統(tǒng) ?協(xié)同過(guò)濾
??協(xié)同過(guò)濾(Collaborative Filtering基协,簡(jiǎn)稱(chēng)CF)是利用集體智慧的一個(gè)典型方法歌亲,算法的核心思想類(lèi)似于我們?cè)谶x擇看一本書(shū)時(shí),往往會(huì)參考與自己口味相近的朋友的意見(jiàn)澜驮∠菥荆基于CF算法的主要有兩種,一種是基于領(lǐng)域的方法杂穷,另一種是基于隱語(yǔ)義的方法悍缠。
??基于領(lǐng)域的方法主要是通過(guò)收集用戶(hù)行為,得到用戶(hù)和物品的特征向量耐量,進(jìn)一步計(jì)算相似度飞蚓,找到物品或用戶(hù)的相似鄰居±妊眩基于隱語(yǔ)義的方法不依賴(lài)與共同評(píng)分趴拧,其基本思想是將用戶(hù)和物品分別映射到兩個(gè)真實(shí)含義未知的特征向量上去溅漾。這兩個(gè)特征向量的含義并不能通過(guò)人為給定,只能通過(guò)SVD模型自己來(lái)確定著榴。模型讀取用戶(hù)和物品組成的評(píng)分矩陣添履,通過(guò)最小化損失來(lái)學(xué)習(xí)這兩個(gè)向量。
??SVD又稱(chēng)奇異值分解兄渺,是線(xiàn)性代數(shù)中一種矩陣分解的技術(shù)缝龄,它能夠?qū)⑷我庖粋€(gè)m*n的矩陣A分解成為U、S挂谍、V叔壤,U是m*m的正交矩陣,V是n*n的正交矩陣口叙,S是m*n的矩陣炼绘,且A=U*S*V。通過(guò)SVD方式將矩陣A分解后妄田,如果只保留前k個(gè)最大的奇異值俺亮,就實(shí)現(xiàn)了對(duì)矩陣降維的目的。我們之所以能夠通過(guò)保留前k個(gè)最大的奇異值來(lái)實(shí)現(xiàn)降維疟呐,是因?yàn)樵诤芏嗲闆r下脚曾,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上的比例。盡管我們能夠通過(guò)降維來(lái)減少運(yùn)算量启具,但是k值的選取是我們需要面對(duì)的重要問(wèn)題本讥。如果k值選的過(guò)大,那么降維的意義就不大鲁冯;如果k值選的過(guò)小拷沸,那么降維之后就有可能丟失重要信息。下面通過(guò)一個(gè)例子來(lái)具體說(shuō)明SVD算法在推薦系統(tǒng)中的應(yīng)用薯演。
??假設(shè)存在以下行為user和列為item的數(shù)據(jù)矩陣A撞芍,0表示沒(méi)有看過(guò)該電影:
??通過(guò)SVD分解之后產(chǎn)生U、S跨扮、V三個(gè)矩陣:
??此時(shí)序无,我們選取k=2來(lái)對(duì)U,S好港,V進(jìn)行降維愉镰,k=2即表示我們默認(rèn)該數(shù)據(jù)集含有兩個(gè)隱形因子:
??此時(shí)我們通過(guò)降維后的U、S钧汹、V相乘來(lái)得到A':
??通過(guò)矩陣A和A'的比較丈探,我們可以很直觀的看出這兩個(gè)矩陣十分相似,可以看做是一種數(shù)據(jù)有損的壓縮拔莱。此時(shí)我們可以開(kāi)始對(duì)一個(gè)新用戶(hù)進(jìn)行初步的推薦碗降。假設(shè)該用戶(hù)的評(píng)分向量p=[5,5,0,0,0,5]隘竭,首先我們通過(guò)公式p'=p*U'*S'l來(lái)得出用戶(hù)的二維向量,接著通過(guò)余弦相似度計(jì)算來(lái)找出與新用戶(hù)最相似的用戶(hù)評(píng)分向量q=[5,5,3,0,5,5]讼渊,這樣我們可以根據(jù)向量q來(lái)對(duì)向量p進(jìn)行填充动看,也就是預(yù)測(cè)。但是爪幻,這種預(yù)測(cè)存在非常大的誤差菱皆。因?yàn)槠娈惙纸庖缶仃囀浅砻艿模簿褪钦f(shuō)奇異分解不允許待分解矩陣中存在空白的部分挨稿,這與現(xiàn)實(shí)生活是沖突的仇轻。在現(xiàn)實(shí)生活中,評(píng)分矩陣一定是稀疏的奶甘,因?yàn)橛脩?hù)沒(méi)有評(píng)分的物品一定是占大多數(shù)篷店。為了解決這一問(wèn)題,我們可以預(yù)先對(duì)缺失值進(jìn)行填充臭家,例如使用全局平均值疲陕。但是這一方法也有一個(gè)缺點(diǎn)——時(shí)間復(fù)雜度非常高。顯示生活中钉赁,用戶(hù)和物品的數(shù)目成千上萬(wàn)蹄殃,計(jì)算總體平均值的效率非常低。
??為了解決矩陣稀疏性你踩,同時(shí)提高運(yùn)算效率窃爷,我們引入了Funk—SVD算法。該算法又稱(chēng)為隱語(yǔ)義模型姓蜂,主要思路是,將原始評(píng)分矩陣A(m*n)分解成兩個(gè)矩陣P(m*k)和Q(k*n)医吊,同時(shí)僅考察原始評(píng)分矩陣中有評(píng)分的項(xiàng)分解結(jié)果是否準(zhǔn)確钱慢,而判別標(biāo)準(zhǔn)則是均方差。即對(duì)于矩陣A(m*n)卿堂,我們想辦法將其分解為P(m*k)束莫、Q(k*n),此時(shí)對(duì)于原始矩陣中有評(píng)分的位置M'ui來(lái)說(shuō)草描,其在分解后矩陣中對(duì)應(yīng)的值就是:
那么對(duì)于整個(gè)評(píng)分矩陣而言览绿,總的損失就是:
SSE越小,說(shuō)明總體的損失越小穗慕,預(yù)測(cè)結(jié)果越精確饿敲。我們可以通過(guò)隨機(jī)梯度下降法來(lái)求SSE的最小值,隨機(jī)梯度下降法在此就不展開(kāi)敘述逛绵。得出最小SSE后怀各,我們通過(guò)公式(1)來(lái)對(duì)原評(píng)分矩陣進(jìn)行填充倔韭,也就是對(duì)用戶(hù)的空白評(píng)分進(jìn)行預(yù)測(cè)。
??將SVD用于推薦系統(tǒng)瓢对,推薦結(jié)果比較準(zhǔn)確寿酌,模型的拓展性也很強(qiáng),能夠應(yīng)用于各種場(chǎng)景硕蛹。但是SVD模型的可解釋性很差醇疼,其中的隱性因子無(wú)法對(duì)應(yīng)與現(xiàn)實(shí)生活中的具體概念,模型的訓(xùn)練速度仍然有待提高法焰⊙砭#總體來(lái)說(shuō),SVD在推薦系統(tǒng)的應(yīng)用方面擁有良好的前景壶栋。