本發(fā)明涉及推薦技術(shù)領(lǐng)域,具體涉及一種基于混合協(xié)同過濾的推薦方法。
背景技術(shù):
在瞬息萬變的互聯(lián)網(wǎng)時代,網(wǎng)絡(luò)技術(shù)高速發(fā)展,與此同時,信息呈幾何級數(shù)不斷增長,每個用戶在互聯(lián)網(wǎng)中可獲得的信息越來越多,信息量已經(jīng)遠(yuǎn)遠(yuǎn)超出了人力的篩選范圍。這意味著雖然信息量增大了,用戶獲取可用信息的效率卻降低了。因此,如何在海量信息中為用戶挑選其可能感興趣的或者可能對用戶有用的信息就成了一個重要的研究課題。為解決這個問題,推薦系統(tǒng)應(yīng)運(yùn)而生。
推薦系統(tǒng)被用于向用戶推薦產(chǎn)品,這些產(chǎn)品可以是最熱門的產(chǎn)品,也可以是基于用戶的人口統(tǒng)計(jì)學(xué)計(jì)算得出的結(jié)果,當(dāng)然,最常用的方式還是基于用戶的歷史行為對用戶的喜好進(jìn)行預(yù)測。所以,推薦系統(tǒng)的工作可以看成是一個電商個性化的過程,因?yàn)樗沟秒娚叹W(wǎng)站可以適應(yīng)每一個用戶的需求,為其提供特定的商品。過去,推薦系統(tǒng)僅僅被部分電商網(wǎng)站當(dāng)做一個新奇的、小眾的應(yīng)用,如今,推薦系統(tǒng)已經(jīng)變成了一個非常重要的商業(yè)工具,并在慢慢的改變互聯(lián)網(wǎng)商業(yè)的格局。
在工業(yè)界中,目前最常用的協(xié)同過濾推薦方式就是基于knn的協(xié)同過濾推薦,然而,基于knn的協(xié)同過濾調(diào)推薦最大的問題就是矩陣的稀疏性會導(dǎo)致預(yù)測結(jié)果精度的下降,而在實(shí)際的應(yīng)用中,用戶-項(xiàng)目的評分矩陣通常都是比較稀疏的,因此,很多推薦結(jié)果并不理想。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種基于混合協(xié)同過濾的推薦方法,能夠在用戶-項(xiàng)目評分矩陣稀疏的情況下彌補(bǔ)矩陣稀疏性并產(chǎn)生較高質(zhì)量的推薦結(jié)果。
為了達(dá)到上述目的,本發(fā)明的技術(shù)方案包括如下步驟:
步驟1、建立一個用戶-項(xiàng)目評分矩陣,使用優(yōu)化奇異值分解的方法將用戶-項(xiàng)目矩陣分解成關(guān)于用戶和關(guān)于項(xiàng)目的兩個隱性因子矩陣。
步驟2、采用梯度下降法針對兩個隱性因子矩陣不斷迭代逼近最優(yōu)目標(biāo)參數(shù);
步驟3、將兩個隱性因子矩陣相乘,得到一個滿秩的用戶-項(xiàng)目矩陣。
步驟4、在滿秩的用戶-項(xiàng)目矩陣上,引入用戶評分偏差和項(xiàng)目評分偏差,然后采用兩種基于knn的協(xié)同過濾算法相結(jié)合,分別獲得基于項(xiàng)目的協(xié)同過濾預(yù)測評分和基于用戶的協(xié)同過濾預(yù)測評分,將兩種協(xié)同過濾預(yù)測評分加權(quán)求和得到用戶對項(xiàng)目的預(yù)測評分,最終將預(yù)測評分最高的多個項(xiàng)目生成推薦列表給用戶。
進(jìn)一步地,步驟1中用戶-項(xiàng)目評分矩陣中包括m個用戶和n個項(xiàng)目,將該用戶-項(xiàng)目評分矩陣進(jìn)行奇異值分解,獲得關(guān)于用戶的隱性因子矩陣u和關(guān)于項(xiàng)目的隱性因子矩陣m;其中u為一個f×m階矩陣,m為一個f×n階矩陣,f為奇異值個數(shù),即為隱性因子的個數(shù)。
進(jìn)一步地,最優(yōu)目標(biāo)參數(shù)為:
ui=[ui1,ui2,…,uif,…,uif],mj=[mj1,mj2,…,mjf,…,mjf];rij為實(shí)際評分;λ為預(yù)設(shè)的正則化約束平衡系數(shù),di為設(shè)定的用戶i的評分偏差,dj為設(shè)定的項(xiàng)目j的評分偏差;f∈[1,f],uif為矩陣u的第i行第f列的值,mif為矩陣m的第j行第f列的值。
進(jìn)一步地,用戶對項(xiàng)目的預(yù)測評分為
進(jìn)一步地,基于項(xiàng)目的協(xié)同過濾預(yù)測評分為:通過用戶u對與目標(biāo)項(xiàng)目i相似的項(xiàng)目集合的實(shí)際評分來預(yù)測用戶u對項(xiàng)目i的評分;
基于用戶的協(xié)同過濾預(yù)測評分為:通過相似用戶對目標(biāo)項(xiàng)目i的評分來預(yù)測用戶u對項(xiàng)目i的評分。
進(jìn)一步地,采用mapreduce+hadoop的方式完成knn算法的并行化。
有益效果:
本發(fā)明提供一種基于混合協(xié)同過濾的推薦方法svd&knnhybridcollaborativefiltering(skhcf),包含:基于優(yōu)化奇異值分解(singularvaluedecomposition,svd)的矩陣填充技術(shù)和混合的基于knn的協(xié)同過濾算法(hybridknn-basedcollaborativefiltering,h-knn),首先使用優(yōu)化奇異值分解的方法將用戶-項(xiàng)目矩陣分解成用戶和項(xiàng)目兩個隱性因子矩陣,采用梯度下降法不斷迭代逼近最優(yōu)目標(biāo)參數(shù),再將兩個矩陣相乘,得到一個滿秩的用戶-項(xiàng)目矩陣,隨后在滿秩矩陣上采用h-knn算法,預(yù)測用戶對項(xiàng)目的評分,最終產(chǎn)生給目標(biāo)用戶的推薦列表。
本發(fā)明一方面,利用基于混合協(xié)同過濾的推薦方法,解決了傳統(tǒng)協(xié)同過濾中由于用戶-項(xiàng)目評分矩陣相對稀疏而造成的推薦結(jié)果不準(zhǔn)確、推薦精度不高的問題;另一方面,形成了一套切實(shí)可行的系統(tǒng)方案,對于符合條件的輸入,均可以產(chǎn)生相對較優(yōu)的推薦結(jié)果。
具體實(shí)施方式
下面結(jié)合實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述。
實(shí)施例1、本實(shí)施例提供了一種基于混合協(xié)同過濾的推薦方法,包括如下步驟:
步驟1、建立一個用戶-項(xiàng)目評分矩陣,使用優(yōu)化奇異值分解的方法將用戶-項(xiàng)目矩陣分解成關(guān)于用戶和關(guān)于項(xiàng)目的兩個隱性因子矩陣;本實(shí)施例中,用戶-項(xiàng)目評分矩陣中包括m個用戶和n個項(xiàng)目,將該用戶-項(xiàng)目評分矩陣進(jìn)行奇異值分解,獲得關(guān)于用戶的隱性因子矩陣u和關(guān)于項(xiàng)目的隱性因子矩陣m;其中u為一個f×m階矩陣,m為一個f×n階矩陣,f為奇異值個數(shù),即為隱性因子的個數(shù)。
步驟2、采用梯度下降法針對兩個隱性因子矩陣不斷迭代逼近最優(yōu)目標(biāo)參數(shù);本實(shí)施例中,最優(yōu)目標(biāo)參數(shù)為:
ui=[ui1,ui2,…,uif,…,uif],mj=[mj1,mj2,…,mjf,…,mjf];rii為實(shí)際評分;λ為預(yù)設(shè)的正則化約束平衡系數(shù),di為設(shè)定的用戶i的評分偏差,dj為設(shè)定的項(xiàng)目j的評分偏差;f∈[1,f],uif為矩陣u的第i行第f列的值,mjf為矩陣m的第j行第f列的值。
步驟3、將兩個隱性因子矩陣相乘,得到一個滿秩的用戶-項(xiàng)目矩陣;
步驟4、在滿秩的用戶-項(xiàng)目矩陣上,引入用戶評分偏差和項(xiàng)目評分偏差,然后采用兩種基于knn的協(xié)同過濾算法相結(jié)合,分別獲得基于項(xiàng)目的協(xié)同過濾預(yù)測評分和基于用戶的協(xié)同過濾預(yù)測評分,將兩種協(xié)同過濾預(yù)測評分加權(quán)求和得到用戶對項(xiàng)目的預(yù)測評分,最終將預(yù)測評分最高的多個項(xiàng)目生成推薦列表給用戶。
采用奇異值分解的方式完成矩陣填充后,接下來就要利用h-knn算法產(chǎn)生推薦結(jié)果。h-knn算法的主要工作有兩個,分別是查詢相似的鄰居和預(yù)測項(xiàng)目評分。其中最重要的步驟就是查詢相似鄰居,在查詢相似鄰居前需要構(gòu)建一個用戶-項(xiàng)目的二維矩陣。
h-knn算法實(shí)質(zhì)上是兩種基于knn的協(xié)同過濾算法的結(jié)合,即基于項(xiàng)目的協(xié)同過濾和基于用戶的協(xié)同過濾。其中,基于項(xiàng)目的協(xié)同過濾通過用戶u對與目標(biāo)項(xiàng)目i相似的項(xiàng)目集合的實(shí)際評分來預(yù)測用戶u對項(xiàng)目i的評分;而基于用戶的協(xié)同過濾通過相似用戶對目標(biāo)項(xiàng)目i的評分來預(yù)測用戶u對項(xiàng)目i的評分。
兩種不同方式預(yù)測的用戶u對項(xiàng)目i的評分都能作為最終結(jié)果直接展示,而為了得到更準(zhǔn)確的結(jié)果,此處引入加權(quán)因子t,對兩種預(yù)測評分進(jìn)行加權(quán)求和,在所有的預(yù)測分值中選取top-n生成推薦列表。其具體公式如下所示。
ru,i=t×ru+(1-t)×ri
其中,t為引入的控制參數(shù),取值范圍為[0,1],取值間隔為0.1,理論上經(jīng)實(shí)驗(yàn)后t可取到在特定數(shù)據(jù)集上的最優(yōu)值,如果實(shí)驗(yàn)條件允許,還可以適當(dāng)減小取值間隔,得到更理想的t值。ru為采用基于用戶的協(xié)同過濾算法得到的目標(biāo)用戶對某一項(xiàng)目的評分,ri為采用基于項(xiàng)目的協(xié)同過濾算法得到的目標(biāo)用戶對某一項(xiàng)目的評分。當(dāng)t值為0時,僅考慮基于用戶的協(xié)同過濾算法對結(jié)果的影響,而當(dāng)t值為1時則完全相反。
至此,得到用戶u對項(xiàng)目i的最終預(yù)測評分。本實(shí)施例中,用戶對項(xiàng)目的預(yù)測評分為:
實(shí)施例2、上述實(shí)施例1中,在實(shí)際的系統(tǒng)里,knn算法的開銷通常都是非常大的,想象一下千萬級的用戶量和百萬級的歌曲數(shù)量,計(jì)算最近鄰居的開銷是十分可怕的。尤其本文所提出的h-knn算法將ub-cf和ib-cf相結(jié)合,通過加權(quán)求和的方式求出結(jié)果,這就意味著需要兩次計(jì)算相似度。因此,必須采取一定的優(yōu)化手段來解決knn算法時間空間復(fù)雜度高、運(yùn)算速度不理想等問題。
考慮到單機(jī)系統(tǒng)性能的限制,采用分布式系統(tǒng)實(shí)現(xiàn)并行優(yōu)化無疑是一個理想的選擇。本文采用mapreduce+hadoop的方式完成knn算法的并行化,實(shí)現(xiàn)方式如下。
1、輸入用戶-項(xiàng)目評分矩陣。map階段接收輸入的鍵值對<key,value>,其中key是數(shù)據(jù)集的行號,而value則是當(dāng)前行的內(nèi)容,也就是一個用戶對一首歌曲的評分。接下來完成對此內(nèi)容的切分,按照key的值完成shuffle過程,產(chǎn)生reduce階段的輸出鍵值對,這時的key變成了userid,value變成了songid和rating。隨后,reduce階段把map階段的輸出合成用戶-項(xiàng)目評分矩陣。
2、完成h-knn算法過程的步驟1,計(jì)算用戶之間與項(xiàng)目之間的相似性。此過程map階段的輸入為用戶-項(xiàng)目評分矩陣,shuffle過程提取每個用戶對項(xiàng)目的評分形成鍵值對,key值為項(xiàng)目對(userid(a),userid(b)),value值為評分對(rating(a),rating(b)),將鍵值對作為reduce階段的輸入,reduce階段完成項(xiàng)目間相似度計(jì)算,并將結(jié)果保存輸出。返回步驟1,用類似的方法計(jì)算用戶之間的相似性。
3、此步驟map階段輸入為用戶與項(xiàng)目之間的相似性,shuffle過程完成n個最近鄰居的計(jì)算形成鍵值對,key值為userid或songid,value值為最近的n個鄰居,reduce階段完成h-knn算法的3、4步,計(jì)算目標(biāo)用戶對項(xiàng)目的預(yù)測評分,并以此形成推薦列表。
實(shí)施例3、本方法采用隨機(jī)梯度下降法完成目標(biāo)參數(shù)最優(yōu)化。隨機(jī)梯度下降法是一個最優(yōu)化算法,通常也稱為最速下降法。該方法是以負(fù)梯度方向?yàn)樗阉鞣较虻?,隨機(jī)梯度下降法越接近目標(biāo)值,步長越小,前進(jìn)越慢。使用隨機(jī)梯度下降法的具體步驟如下:
1、確定因子數(shù)f,懲罰參數(shù)λ和學(xué)習(xí)率η,初始化用戶隱形因子矩陣u和項(xiàng)目隱性因子矩陣m;
2、對于每個用戶-項(xiàng)目評分對(用戶u,項(xiàng)目m均屬于矩陣r):
201、計(jì)算評分誤差
202、更新用戶u和項(xiàng)目m的隱性因子向量uif和mjf:
uif+=η·(eui·mjf-λ·uif)
mjf+=η·(eui·uif-λ·mjf)
3、計(jì)算目標(biāo)參數(shù)e,如果e的值比之前的小,則更新學(xué)習(xí)率,令η=0.9×η,然后繼續(xù)步驟2,直到e值在小幅度區(qū)間震蕩或達(dá)到了預(yù)設(shè)的迭代次數(shù)。
綜上,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。