李昆侖,蘇華仃,戎靜月
(河北大學(xué) 電子信息工程學(xué)院,河北 保定 071000)
E-mail:likunlun@hbu.edu.cn
信息技術(shù)的發(fā)展使電子商務(wù)領(lǐng)域快速崛起.同時(shí)商品種類也呈爆炸式增長,人們很難從眾多商品中快速定位自己需要的商品.推薦系統(tǒng)的應(yīng)用在一定程度上緩解了這一問題.它通過分析用戶的歷史購物記錄以及商品之間的關(guān)系,挖掘出用戶潛意識(shí)傾向的商品,進(jìn)一步產(chǎn)生推薦[1,2].這一應(yīng)用既加快了電商平臺(tái)的交易速度,也提升了用戶的體驗(yàn)滿意度.
推薦系統(tǒng)可大致分為:基于協(xié)同過濾的推薦系統(tǒng)和基于內(nèi)容的推薦系統(tǒng)[3,4],也可分為顯式和隱式反饋推薦系統(tǒng)[5,6].基于協(xié)同過濾的推薦系統(tǒng),主要是運(yùn)用用戶或商品之間的相似度,來進(jìn)行商品推薦[7-9];基于內(nèi)容的推薦系統(tǒng),主要是分析用戶或商品的標(biāo)簽,進(jìn)而向用戶推薦商品[10].顯式反饋推薦系統(tǒng)主要是通過分析用戶對(duì)購買商品的評(píng)分,來向用戶推薦商品;隱式反饋推薦系統(tǒng)則主要利用用戶對(duì)商品信息的點(diǎn)擊、瀏覽等行為,以及現(xiàn)有商品對(duì)用戶行為習(xí)慣與興趣愛好的影響,來推測(cè)用戶對(duì)商品的購買行為.奇異值矩陣分解(Singular Value Matrix Decomposition)是協(xié)同過濾的一部分,即可用于降維也可用于預(yù)測(cè)用戶對(duì)項(xiàng)目的評(píng)分[11,12].用于降維時(shí)把高維數(shù)據(jù),通過矩陣分解得到影響用戶對(duì)項(xiàng)目評(píng)分的主要因素;在用于預(yù)測(cè)評(píng)分時(shí),通過模型訓(xùn)練得到用戶或項(xiàng)目的隱因子,以此進(jìn)行推薦.本文主要研究SVD用于預(yù)測(cè)評(píng)分的情況.文獻(xiàn)[13]中針對(duì)SVD評(píng)分模型對(duì)評(píng)分系統(tǒng)信息、用戶與項(xiàng)目特性考慮不全的問題,提出了Biased-SVD 模型,提高了模型的準(zhǔn)確性.Koren等人在Biased-SVD評(píng)分預(yù)測(cè)模型的基礎(chǔ)上融入了項(xiàng)目的隱式反饋,提出了SVD++(基于項(xiàng)目隱式反饋的矩陣分解),減小了預(yù)測(cè)評(píng)分的誤差[14].Tan等人針對(duì)SVD++預(yù)測(cè)評(píng)分結(jié)果可能超出推薦評(píng)級(jí)范圍的問題,充分的運(yùn)用不同用戶的評(píng)級(jí)差異提出了基于比例的SVD++評(píng)分預(yù)測(cè)模型PBESVD++(Proportion-based Baseline Estimate SVD++),使模型預(yù)測(cè)得到的評(píng)分更接近實(shí)際[15].Roberto等人則從項(xiàng)目流行度的角度對(duì)SVD++算法進(jìn)行改進(jìn),側(cè)重流行項(xiàng)目對(duì)用戶購買行為的影響,提出了基于項(xiàng)目流行度的矩陣分解PSVD++(Popularity-Based SVD++),使項(xiàng)目信息的使用更加精確[16].Panagiotis等人提出多維矩陣因子分解模型xSVD++,并結(jié)合協(xié)同過濾(CF)算法,利用用戶和項(xiàng)目屬性,進(jìn)行評(píng)分預(yù)測(cè),提高了預(yù)測(cè)評(píng)分的精確度[17].
以上方法在進(jìn)行矩陣分解時(shí)大都只是單一的考慮項(xiàng)目隱式反饋或用戶隱式反饋,造成用戶對(duì)項(xiàng)目的評(píng)分不太精確.針對(duì)以上問題,本文將基于項(xiàng)目隱式反饋與用戶隱式反饋的矩陣分解融合在一起,并賦予一定的權(quán)重.除此以外我們還融入了項(xiàng)目與項(xiàng)目和用戶與用戶的相關(guān)性函數(shù),以此來體現(xiàn)隱式反饋信息的重要程度.為進(jìn)一步提高本文提出的矩陣分解評(píng)分模型的預(yù)測(cè)精度,我們還對(duì)相似性度量方式進(jìn)行了改進(jìn),即同時(shí)考慮用戶-項(xiàng)目評(píng)分和項(xiàng)目的屬性信息.經(jīng)驗(yàn)證本文算法對(duì)預(yù)測(cè)評(píng)分的精確度有了一定程度的提高.
SVD在用于評(píng)分時(shí),通過模型訓(xùn)練可將原始評(píng)分矩陣分解成pu、qi兩個(gè)矩陣.pu的每一列代表某一用戶的興趣度量值,pu(i)=(i1,i2,…,ik)T,u(i)是所有用戶中的一個(gè);qi的每一列代表某一項(xiàng)目的屬性度量值,qi(j)=(j1,j2,…,jk)T,i(j)是所有項(xiàng)目中的一個(gè).其中下標(biāo)k是隱因子的個(gè)數(shù).SVD評(píng)分模型:
(1)
(2)
SVD++算法是在Biased-SVD矩陣分解基礎(chǔ)上進(jìn)一步的改進(jìn),它分析了項(xiàng)目的不同的影響因素對(duì)評(píng)分的影響,得到如式(3)所示的分解形式[14].
(3)
其中R(u)是用戶u評(píng)價(jià)過的項(xiàng)目集合;yj是項(xiàng)目的屬性向量.d_SVD++是SVD++的對(duì)偶模型,即基于用戶隱式反饋的矩陣分解:
(4)
其中N(i)是評(píng)價(jià)過項(xiàng)目i的用戶集合;xv是用戶的屬性向量.
1)余弦相似度
余弦相似度,是把向量間夾角大小作為衡量?jī)上蛄肯嗨婆c否的標(biāo)準(zhǔn).其值在0-1之間.
(5)
其中n∈(1,2,3,…,l);在推薦系統(tǒng)中l(wèi)值為項(xiàng)目或用戶的個(gè)數(shù).
2)基于皮爾森相關(guān)系數(shù)的相似度
皮爾森相關(guān)系數(shù),可用于檢測(cè)兩個(gè)向量線性相關(guān)的程度,其值在0-1之間.
(6)
3)基于Jaccard相似系數(shù)的相似度
Jaccard相似系數(shù),在推薦系統(tǒng)中可以用來表示兩個(gè)用戶或項(xiàng)目集合之間的相似度,一般限制兩個(gè)集合中的數(shù)據(jù)為二值數(shù)據(jù)0或1,因此只有推薦系統(tǒng)中的數(shù)據(jù)為二值數(shù)據(jù)時(shí)才能使用Jaccard相似系數(shù)[18].其值在0-1之間.
(7)
其中A和B表示兩個(gè)集合.
皮爾森相關(guān)系數(shù),可理解為去除中心影響的余弦相似度,但是這種計(jì)算相似度的方式直接將用戶之間的評(píng)分差異抵消掉,卻忽略了用戶間的評(píng)分差異本身也是區(qū)分不同用戶的一種評(píng)測(cè)方式,如果直接將其忽略掉也會(huì)造成相似度計(jì)算不準(zhǔn)確,相比之下不如直接使用余弦相似度計(jì)算有優(yōu)勢(shì).Jaccard相似系數(shù),對(duì)數(shù)據(jù)的要求為二值型,而大部分推薦系統(tǒng)使用的樣本數(shù)據(jù)是非二值型,所以在計(jì)算相似度時(shí)有一定的局限性,但余弦相似度在計(jì)算時(shí)就沒有此局限.綜上,余弦相似度在本文中應(yīng)用時(shí)更有優(yōu)勢(shì),相比于其它兩種相似度計(jì)算方式,它不僅計(jì)算簡(jiǎn)單、準(zhǔn)確,還對(duì)數(shù)據(jù)本身的局限性小.因此,本文先采用余弦相似度作為相似性度量方式,并將其應(yīng)用到改進(jìn)的矩陣分解評(píng)分模型中,然后為進(jìn)一步提高提出的矩陣分解評(píng)分模型的精確度,下文我們又對(duì)相似度進(jìn)行了改進(jìn).
為了使奇異值矩陣分解評(píng)分模型在預(yù)測(cè)用戶對(duì)項(xiàng)目的評(píng)分時(shí)更加精確,我們對(duì)SVD++和d_SVD++評(píng)分模型做了相應(yīng)改進(jìn).將項(xiàng)目與用戶的隱式反饋信息融合在一起,并賦予一定的權(quán)重,同時(shí)還將用戶與用戶和項(xiàng)目與項(xiàng)目的相關(guān)性函數(shù)加入進(jìn)矩陣分解評(píng)分模型,改進(jìn)后的矩陣分解評(píng)分模型如式(8)所示.其中λ是融合因子;simitem和simuser分別是項(xiàng)目和用戶的相似度矩陣.
(8)
真實(shí)評(píng)分與預(yù)測(cè)評(píng)分的誤差:
(9)
損失函數(shù)是總的誤差平方和的體現(xiàn),從一定程度上反映了評(píng)分公式對(duì)預(yù)測(cè)評(píng)分精確度的影響.一般來說損失函數(shù)值越小,預(yù)測(cè)的評(píng)分值與真實(shí)的評(píng)分值就越接近,這樣訓(xùn)練出來的模型的準(zhǔn)確率越高.然而損失函數(shù)的減小程度也需要一定的控制,因?yàn)閾p失函數(shù)過度的減小會(huì)造成過擬合,使預(yù)測(cè)得到的評(píng)分值與訓(xùn)練集中真實(shí)的評(píng)分值過于接近,由此造成預(yù)測(cè)評(píng)分模型應(yīng)用在測(cè)試集時(shí)泛化能力減弱,不利于模型的應(yīng)用.為了改變由過擬合造成評(píng)分模型泛化能力減弱的狀態(tài),本文引入了正則項(xiàng),使評(píng)分模型在擁有較高預(yù)測(cè)精度的前提下,又保證了良好的泛化能力.損失函數(shù)如式(10)所示:
(10)
其中λ1、λ2為正則因子;‖pu‖2、‖qi‖2、‖bu‖2、‖bi‖2、‖xv‖2、‖yj‖2為正則項(xiàng).
本文采用SGD(隨機(jī)梯度下降).式(11)是梯度更新原理:
(11)
其中α是學(xué)習(xí)率;θi是模型參數(shù).
采用梯度下降對(duì)參數(shù)進(jìn)行更新時(shí),首先要對(duì)各變量求偏導(dǎo),方便參數(shù)更新時(shí)使用:
(12)
式(13)是參數(shù)更新的公式:
(13)
其中η為學(xué)習(xí)率.
算法步驟:
輸入:用戶-項(xiàng)目評(píng)分?jǐn)?shù)據(jù)、融合因子λ,隱因子個(gè)數(shù)n_factors,學(xué)習(xí)率η,正則因子λ1、λ2,迭代停止條件:達(dá)到最大循環(huán)次數(shù)n_epochs或達(dá)到設(shè)置的收斂誤差.
輸出:用戶對(duì)項(xiàng)目的預(yù)測(cè)評(píng)分以及預(yù)測(cè)評(píng)分的均方根誤差(RMSE).
Step 1.計(jì)算矩陣simuser和simitem;
Step 2.構(gòu)建新的評(píng)分模型,如公式(8)所示. 將基于項(xiàng)目和基于用戶的隱式反饋的矩陣分解模型進(jìn)行融合,并引入用戶之間的相關(guān)性函數(shù)simuser(u,v)、項(xiàng)目之間的相關(guān)性函數(shù)simitem(i,j);
Step 3.對(duì)用戶-項(xiàng)目評(píng)分?jǐn)?shù)據(jù)進(jìn)行k均等分;
Step 4.訓(xùn)練集(train_dataset)與測(cè)試集(test_dataset)的選取;
Step 5.訓(xùn)練評(píng)分模型,得到模型的各參數(shù)值;
1.forcurrent_epochin range(n_epochs): or while大于設(shè)置的收斂誤差:
2. foru,i,ru,iintrain_dataset:
3. 采用公式(9)計(jì)算評(píng)分誤差eu,i;
4. 改進(jìn)后的矩陣分解評(píng)分模型采用公式(13)對(duì)各參數(shù)進(jìn)行更新;
5. end
6.end
7.對(duì)測(cè)試集(test_dataset)進(jìn)行評(píng)分預(yù)測(cè),并計(jì)算其RMSE值.
Step 6.判斷k份子集中是否每一份子集都被選做過測(cè)試集(test_dataset),如果沒有,則繼續(xù)進(jìn)行Step 4、Step 5、Step 6;否則停止實(shí)驗(yàn),并輸出相應(yīng)測(cè)試集的預(yù)測(cè)評(píng)分和RMSE值.
本文使用的是MovieLens 100k數(shù)據(jù)集,其中包含三個(gè)主要文件:u.data(用戶-電影評(píng)分)、u.item(電影屬性)、u.info(用戶的信息).由于傳統(tǒng)的相似性度量方式采用的是文件u.data中如表1所示相對(duì)稀疏的數(shù)據(jù),所以在計(jì)算相似度時(shí)就顯得不是很精確.為了進(jìn)一步提高融合項(xiàng)目與用戶隱式反饋的矩陣分解評(píng)分模型的精確度,我們還對(duì)相似性度量方式進(jìn)行了改進(jìn),即同時(shí)考慮用戶-項(xiàng)目評(píng)分和項(xiàng)目屬性信息.
表1 用戶-項(xiàng)目評(píng)分
Table1 User ratings of items
itemi+1itemi+2…itemi+nua3Null…NullubNull5…NullucNullNull…Null
項(xiàng)目的屬性信息包括:電影id、電影發(fā)布日期、電影類型.電影的id直接與電影相關(guān);電影的發(fā)布日期在某種程度上與該時(shí)期的流行元素、電影拍攝方式以及用戶對(duì)電影的反饋有關(guān);電影類型更是直接與電影的內(nèi)容相關(guān).針對(duì)以上涉及到的項(xiàng)目屬性信息,本文首先運(yùn)用正則表達(dá)式對(duì)項(xiàng)目的重要屬性信息進(jìn)行提取.然后對(duì)電影的發(fā)布日期這一列數(shù)據(jù)進(jìn)行min-max歸一化處理,使該列數(shù)據(jù)的數(shù)值在0-1之間.處理后的電影發(fā)布日期這一列的數(shù)據(jù)和電影類型的數(shù)據(jù)數(shù)量級(jí)差異減小.min-max歸一化公式:
(14)
其中min是該列數(shù)據(jù)中最小的時(shí)間值;max是該列數(shù)據(jù)中最大的時(shí)間值;x是未經(jīng)min-max歸一化處理之前的時(shí)間值;x′是min-max歸一化處理之后的時(shí)間值.
表2顯示了處理好的項(xiàng)目屬性信息.其中The Genres of Movies中的19個(gè)屬性對(duì)應(yīng)的0、1值分別表示電影不屬于該類型和電影屬于該類型;Release Time這一列的數(shù)據(jù),括號(hào)內(nèi)的數(shù)據(jù)是未經(jīng)歸一化的時(shí)間值,即原始的時(shí)間數(shù)據(jù),括號(hào)外的數(shù)據(jù)是歸一化處理之后的數(shù)據(jù).經(jīng)初步處理的項(xiàng)目屬性,既包含電影的內(nèi)容,又有電影推出時(shí)間.
表2 項(xiàng)目屬性信息
Table 2 Attributes of items
The Genres of MoviesRelease Timeattr1…attr19—itemi+11…00.973684(1996)itemi+20…00.960526(1995)itemi+30…10.986842(1997)
simuser(u,v)的改進(jìn):先計(jì)算用戶的屬性評(píng)分矩陣,即將用戶評(píng)價(jià)過的項(xiàng)目,結(jié)合用戶對(duì)這些項(xiàng)目的評(píng)分,以及這些項(xiàng)目的處理好的屬性,綜合成用戶的屬性評(píng)分,然后應(yīng)用余弦相似度對(duì)屬性評(píng)分?jǐn)?shù)據(jù)進(jìn)行計(jì)算.用戶-用戶的相似度:
(15)
其中ru,i和rv,j分別表示用戶u對(duì)項(xiàng)目i的評(píng)分和用戶v對(duì)項(xiàng)目j的評(píng)分;R(u)和R(v)分別表示用戶u和v評(píng)價(jià)過的項(xiàng)目的集合;xi和xj分別表示項(xiàng)目i和j的屬性向量.
simitem(i,j)的改進(jìn):先將評(píng)價(jià)過項(xiàng)目的用戶,結(jié)合這些用戶對(duì)項(xiàng)目的評(píng)分,以及處理好的項(xiàng)目的屬性,綜合成項(xiàng)目的屬性評(píng)分,然后應(yīng)用余弦相似度對(duì)屬性評(píng)分?jǐn)?shù)據(jù)進(jìn)行計(jì)算.項(xiàng)目-項(xiàng)目的相似度:
(16)
其中N(i)和N(j)分別表示評(píng)價(jià)過項(xiàng)目i和j的用戶集合.
假設(shè)數(shù)據(jù)集中用戶有m個(gè),項(xiàng)目有n個(gè),且m=cn,其中c在同一系統(tǒng)中同一時(shí)間的數(shù)據(jù)集內(nèi)為一固定常數(shù);R(u)為用戶u評(píng)價(jià)過的項(xiàng)目集合,|R(u)|為所有集合R(u)中項(xiàng)目的個(gè)數(shù)較大值,N(i)為評(píng)價(jià)過項(xiàng)目i的用戶集合,|N(i)|為所有集合N(i)中用戶的個(gè)數(shù)較大值;算法要經(jīng)過k折交叉驗(yàn)證,且在模型訓(xùn)練時(shí)k為一固定常數(shù);最大循環(huán)次數(shù)為n_epochs;隱因子的個(gè)數(shù)為n_factors.
1)時(shí)間復(fù)雜性分析
算法步驟Step 1,首先計(jì)算融合項(xiàng)目屬性的用戶和項(xiàng)目的屬性評(píng)分矩陣,且時(shí)間復(fù)雜度為O(m|R(u)|+n|N(i)|);然后計(jì)算矩陣simuser和simitem,且兩矩陣均為對(duì)角線為1的對(duì)稱矩陣,故時(shí)間復(fù)雜度為O(m×(m-1)/2+n×(n-1)/2).算法步驟Step 3、Step 4、Step 5、Step 6,其中Step 3、Step 4、Step 6為Step 5的外循環(huán),且循環(huán)次數(shù)為k.Step 5最外層循環(huán)次數(shù)為n_epochs;次外層循環(huán)次數(shù)為(k-1)/k×m×n;最內(nèi)層循環(huán)包括兩并列部分:第一部分涉及到用戶u評(píng)價(jià)過的項(xiàng)目集合R(u);第二部分涉及到評(píng)價(jià)過項(xiàng)目i的用戶集合N(i).故整個(gè)算法的時(shí)間復(fù)雜度為:
即為:
O(m|R(u)|+n|N(i)|)+O(m2+n2)+O(n_epochs(k-1)(|R(u)|+|N(i)|)mn)
SVD++算法的時(shí)間復(fù)雜度為:
即為:
O(n_epochs(k-1)|R(u)|mn)
d_SVD++算法的時(shí)間復(fù)雜度為:
即為:
O(n_epochs(k-1)|N(i)|mn)
因?yàn)閙=cn,且c在同一系統(tǒng)中同一時(shí)間的數(shù)據(jù)集內(nèi)為一固定常數(shù),在模型訓(xùn)練時(shí)k也為一固定常數(shù);又因?yàn)閨N(i)|和|R(u)|和相對(duì)于m或n來說非常小,畢竟共同評(píng)價(jià)過項(xiàng)目i的用戶數(shù)量和用戶u評(píng)價(jià)過的商品的數(shù)量都很少,所以不會(huì)很大程度的影響整個(gè)算法的運(yùn)行時(shí)間.故對(duì)本文提出算法、SVD++、d_SVD++算法的時(shí)間復(fù)雜度進(jìn)行了簡(jiǎn)化,省略了常數(shù)c、|N(i)|、|R(u)|,最終改進(jìn)算法、SVD++以及d_SVD++算法的時(shí)間復(fù)雜度可大致統(tǒng)一為:O(n_epochs×n2).
2)空間復(fù)雜性分析
由算法步驟可知,首先要建立用戶-項(xiàng)目評(píng)分矩陣;其次要計(jì)算用戶和項(xiàng)目的的屬性評(píng)分矩陣,以及矩陣simuser和simitem,空間復(fù)雜度為O(mn+c1m+c1n+m2+n2),其中c1為項(xiàng)目屬性的個(gè)數(shù),在本文中為一固定常數(shù);最后訓(xùn)練參數(shù)矩陣,其空間復(fù)雜度為:
O(1+m+n+2m×n_factors+2n×n_factors)
故本文提出算法的空間復(fù)雜度為:
O(mn+c1m+c1n+m2+n2)+O(1+m+n+2m×n_factors+2n×n_factors)
即為:
O(mn+c1m+c1n+m2+n2)+O((m+n)×n_factors)
SVD++的空間復(fù)雜度為:
O(mn)+O(1+m+n+m×n_factors+2n×n_factors)
即為:
O(mn)+O((m+n)×n_factors)
d_SVD++的空間復(fù)雜度為:
O(mn)+O(1+m+n+2m×n_factors+n×n_factors)
即為:
O(mn)+O((m+n)×n_factors)
因?yàn)閙=cn,且c在同一系統(tǒng)中同一時(shí)間的數(shù)據(jù)集內(nèi)為一固定常數(shù),又因?yàn)閏1為項(xiàng)目屬性的個(gè)數(shù),在本文中為一固定常數(shù).故最終改進(jìn)算法,SVD++以及d_SVD++算法的空間復(fù)雜度可大致統(tǒng)一為:O(n2+n×n_factors).
綜上雖然本文提出的算法在復(fù)雜性上與算法SVD++和d_SVD++的大致相同,但是本文提出的算法同算法SVD++和d_SVD++相比在預(yù)測(cè)評(píng)分的精確度上有了明顯提高,進(jìn)一步體現(xiàn)了本文提出算法的優(yōu)勢(shì).
本文使用Movielens 100k數(shù)據(jù)集,它不僅包含了943名用戶對(duì)1682部電影的評(píng)分,還包括了1682部電影的屬性信息.其中評(píng)分是從1到5的整數(shù),電影屬性涉及到了電影類型、電影的推出時(shí)間等.
本文以均方根誤差(RMSE)作為評(píng)價(jià)指標(biāo).一般來說均方根誤差RMSE越小說明算法預(yù)測(cè)越精確.
(17)
其中n是預(yù)測(cè)評(píng)分的個(gè)數(shù).
實(shí)驗(yàn)環(huán)境:處理器為Intel(R)Core(TM)i5-7300 HQ CPU @ 2.50GHz 2.50GHz,內(nèi)存7.87GB的計(jì)算機(jī).軟件使用Python3.6.
以下實(shí)驗(yàn)均采用k折交叉驗(yàn)證,本文取k=5.
1)不同融合因子對(duì)本文算法的影響
實(shí)驗(yàn)條件:隱因子個(gè)數(shù)n_factors=20,學(xué)習(xí)率η=0.007,正則因子λ1=0.002、λ2=0.014;迭代停止條件:最大循環(huán)次數(shù)n_epochs=20;變化的條件:不同的融合因子數(shù)值.
圖1 不同大小的融合因子對(duì)本文算法的影響
由圖1可知改進(jìn)的評(píng)分模型的預(yù)測(cè)精度隨著融合因子的增大,先是逐步提高,在融合因子λ=0.9時(shí)預(yù)測(cè)精度達(dá)到最高值,隨后預(yù)測(cè)精度開始下降.可見融合因子并不能一味的增大或減小,只有以合適的權(quán)重融合才能使預(yù)測(cè)精度達(dá)到最高值.而在融合因子λ=0.9時(shí)RMSE值最小,可能是由數(shù)據(jù)集本身的特性造成的,因?yàn)轫?xiàng)目的個(gè)數(shù)為1682,用戶個(gè)數(shù)為943,項(xiàng)目的數(shù)量明顯大于用戶的數(shù)量,故SVD++在改進(jìn)的評(píng)分模型中的權(quán)重要大于d_SVD++.通過對(duì)不同的λ值進(jìn)行實(shí)驗(yàn),最后選出使得RMSE值相對(duì)較小的λ值作為項(xiàng)目隱式反饋矩陣分解在改進(jìn)算法中的權(quán)重,1-λ則為用戶隱式反饋矩陣分解在改進(jìn)算法中的權(quán)重.此即為,項(xiàng)目和用戶隱式反饋矩陣分解在改進(jìn)算法中權(quán)重的確定方法.
2)不同學(xué)習(xí)率對(duì)本文算法的影響
實(shí)驗(yàn)條件:隱因子個(gè)數(shù)n_factors=20,融合因子λ=0.9,正則因子λ1=0.002,λ2=0.014;迭代停止條件:最大循環(huán)次數(shù)n_epochs;變化的條件:不同的循環(huán)次數(shù)n_epochs;對(duì)比試驗(yàn):學(xué)習(xí)率η的不同值.
由圖2可知當(dāng)η=0.007時(shí)算法的預(yù)測(cè)精度較高.不僅在相同迭代次數(shù)下RMSE值較低,而且從整體上來看收斂速度也比較快.同一學(xué)習(xí)率下算法的精確度隨著迭代次數(shù)的增加,先是提高的比較快,在迭代次數(shù)增加到25以后算法的準(zhǔn)確度雖然也在提升,但變化不是很大,慢慢的趨于平穩(wěn).學(xué)習(xí)率對(duì)算法的影響:過小算法收斂慢,訓(xùn)練用時(shí)長;過大則容易造成震蕩,甚至導(dǎo)致算法無法收斂.因此,我們只有選擇合適的學(xué)習(xí)率才能使算法的性能達(dá)到最優(yōu).
圖2 不同學(xué)習(xí)率η對(duì)本文算法的影響
3)不同正則因子1對(duì)本文算法的影響
實(shí)驗(yàn)條件:隱因子個(gè)數(shù)n_factors=20,學(xué)習(xí)率η=0.007,融合因子λ=0.9,正則因子λ2=0.014;迭代停止條件:最大循環(huán)次數(shù)n_epochs;變化的條件:不同的循環(huán)次數(shù)n_epochs;對(duì)比試驗(yàn):正則因子λ1的不同值.
圖3顯示了正則因子λ1的不同值對(duì)本文算法的影響.由圖3可知同一正則因子λ1下,RMSE值先是隨著迭代次數(shù)的增加下降較快,漸漸的算法的RMSE值隨迭代次數(shù)的變化下降的幅度變小,逐漸收斂.當(dāng)正則因子λ1=0.002時(shí)算法的性能達(dá)到最優(yōu).算法不僅在同一條件下精度最高,而且從整體上來看相比于其它的正則因子值,λ1=0.002時(shí)本文算法也能快速的收斂.
圖3 不同正則因子λ1對(duì)本文算法的影響
4)不同正則因子2對(duì)本文算法的影響
實(shí)驗(yàn)條件:隱因子個(gè)數(shù)n_factors=20,學(xué)習(xí)率η=0.007,融合因子λ=0.9,正則因子λ1=0.002;迭代停止條件:最大循環(huán)次數(shù)n_epochs;變化的條件:不同的循環(huán)次數(shù)n_epochs;對(duì)比實(shí)驗(yàn):正則因子λ2的不同值.
圖4顯示了正則因子λ2的不同值對(duì)預(yù)測(cè)評(píng)分精度的影響,由圖4可知同一正則因子λ2下,RMSE值先是隨著迭代次數(shù)的逐步增加下降的比較快,但是當(dāng)?shù)螖?shù)增加到一定程度時(shí)相應(yīng)的RMSE值下降的幅度逐步減小,直到慢慢的趨于收斂.當(dāng)正則因子λ2=0.014時(shí)算法各方面效果比較好.算法不僅在同一條件下RMSE值相對(duì)較低,而且從整體上來看相比于其它的正則因子值,λ2=0.014時(shí)本文算法也能快速的收斂.
圖4 不同正則因子λ2對(duì)本文算法的影響
5)不同隱因子個(gè)數(shù)對(duì)不同算法的影響
實(shí)驗(yàn)條件:學(xué)習(xí)率η=0.007,融合因子λ=0.9,正則因子λ1=0.002,λ2=0.014;迭代停止條件:收斂誤差=0.001;變化的條件:不同的隱因子個(gè)數(shù)n_factors;對(duì)比實(shí)驗(yàn):不同的矩陣分解算法.
圖5 不同隱因子個(gè)數(shù)對(duì)本文算法和SVD++、d_SVD++的影響
由圖5可知在相同的實(shí)驗(yàn)條件下本文提出的矩陣分解算法的RMSE值均低于SVD++和d_SVD++算法,可見本文提出的算法在同一條件下的精確度相對(duì)較高.并且本文算法和SVD++、d_SVD++都會(huì)隨著隱因子個(gè)數(shù)的增加,預(yù)測(cè)精度也會(huì)逐漸提高,慢慢的趨于平穩(wěn).可見隱因子在一定范圍內(nèi)對(duì)三種算法預(yù)測(cè)精度提高明顯,隨著隱因子個(gè)數(shù)越來越多預(yù)測(cè)精度提高反而變得緩慢,使三種算法的計(jì)算成本加大,不利于模型的訓(xùn)練.
6)不同相似度計(jì)算方式對(duì)本文提出的矩陣分解評(píng)分模型的影響
實(shí)驗(yàn)條件:學(xué)習(xí)率η=0.007,融合因子λ=0.9,正則因子λ1=0.002,λ2=0.014;迭代停止條件:收斂誤差=0.001;變化的條件:不同的隱因子個(gè)數(shù)n_factors;對(duì)比實(shí)驗(yàn):不同的相似性度量方式.
圖6 改進(jìn)相似度與余弦相似度對(duì)本文提出的矩陣分解評(píng)分模型的影響
圖6顯示了改進(jìn)的相似度和傳統(tǒng)的余弦相似度對(duì)本文提出的矩陣分解評(píng)分模型的影響.由圖6可知兩種相似度計(jì)算方式應(yīng)用于改進(jìn)的矩陣分解評(píng)分模型時(shí),預(yù)測(cè)評(píng)分的精確度均是隨著隱因子個(gè)數(shù)的增加而逐步提高,并慢慢的趨于收斂.但是改進(jìn)的相似度應(yīng)用在本文提出的矩陣分解評(píng)分模型時(shí),RMSE值均低于傳統(tǒng)的余弦相似度.表明改進(jìn)的相似度進(jìn)一步提高了本文算法的預(yù)測(cè)精度.
由于推薦系統(tǒng)中奇異值矩陣分解在用于預(yù)測(cè)用戶對(duì)項(xiàng)目的評(píng)分時(shí),大都只是單一的考慮項(xiàng)目隱式反饋或用戶隱式反饋,造成用戶對(duì)項(xiàng)目的評(píng)分不太精確.本文針對(duì)該問題,將項(xiàng)目隱式反饋與用戶隱式反饋的矩陣分解融合在一起,并賦予一定的權(quán)重,同時(shí)還引入了項(xiàng)目與項(xiàng)目和用戶與用戶的相關(guān)性函數(shù),以此來體現(xiàn)隱式反饋信息的重要程度.為了進(jìn)一步提高本文提出的矩陣分解評(píng)分模型的精確度,本文又將項(xiàng)目屬性信息融入進(jìn)相似度的計(jì)算;最后運(yùn)用k折交叉驗(yàn)證的實(shí)驗(yàn)方法,從多個(gè)角度對(duì)本文提出的預(yù)測(cè)評(píng)分模型進(jìn)行實(shí)驗(yàn)驗(yàn)證.經(jīng)驗(yàn)證本文算法提高了預(yù)測(cè)評(píng)分的精確度.
今后考慮將用戶-項(xiàng)目評(píng)分的時(shí)間序列信息融入進(jìn)矩陣分解評(píng)分模型,使預(yù)測(cè)評(píng)分更加精確.