鄭小楠,譚欽紅,馬 浩,劉武啟
(1.重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065;2.重慶郵電大學(xué) 信號(hào)與信息處理重慶市重點(diǎn)實(shí)驗(yàn)室,重慶 400065)
協(xié)同過(guò)濾推薦算法(collaborative filtering recommendation algorithm,CF)作為推薦算法中應(yīng)用最普遍的算法之一,被廣泛應(yīng)用于推薦系統(tǒng)中[1]。但是其自身的數(shù)據(jù)稀疏性[2]、相似度計(jì)算不合理等問(wèn)題都導(dǎo)致了算法推薦質(zhì)量的嚴(yán)重下降。
針對(duì)數(shù)據(jù)稀疏問(wèn)題,目前大多數(shù)研究采用的是利用評(píng)分均值、眾數(shù)或者中位數(shù)等進(jìn)行填充。這些同等填充方法忽略了用戶(hù)偏好和物品差異,缺乏一定的可靠性。文獻(xiàn)[3,4]通過(guò)研究用戶(hù)對(duì)物品的偏好程度和物品相似度對(duì)評(píng)分缺失項(xiàng)進(jìn)行了填充。文獻(xiàn)[5]通過(guò)計(jì)算用戶(hù)的興趣得分進(jìn)行矩陣填充,以上方法都以不同的方式降低了數(shù)據(jù)稀疏率,但未充分考慮用戶(hù)偏好和物品屬性之間的內(nèi)在聯(lián)系。
針對(duì)相似度問(wèn)題,文獻(xiàn)[6]提出了衡量物品屬性的相似度計(jì)算方法,文獻(xiàn)[7]提出一種基于評(píng)分和結(jié)構(gòu)相似度計(jì)算物品相似度的方法。文獻(xiàn)[8-10]也都針對(duì)相似度計(jì)算提出了不同改進(jìn)辦法。以上方法均未考慮不同目標(biāo)用戶(hù)的偏好。針對(duì)以上問(wèn)題,本文提出了一種改進(jìn)算法,該算法考慮了用戶(hù)偏好的權(quán)重。根據(jù)目標(biāo)用戶(hù)的不同,改進(jìn)物品相似度的計(jì)算;最后結(jié)合改進(jìn)的填充算法和相似度計(jì)算公式得到基于用戶(hù)偏好矩陣填充的改進(jìn)混合推薦算法。該算法不僅大大提高了推薦的準(zhǔn)確性,而且還滿(mǎn)足了用戶(hù)的個(gè)性化需求。
首先定義用戶(hù)集合U={U1,U2,U3,…,Um},物品集合I={I1,I2,I3,…,In},用戶(hù)評(píng)分矩陣Rm×n,符號(hào)相關(guān)概念定義見(jiàn)表1。其中Rui∈[1,5],當(dāng)Rui=0時(shí)表示用戶(hù)沒(méi)有評(píng)價(jià)該物品。傳統(tǒng)的協(xié)同過(guò)濾推薦算法步驟如下:
步驟1 根據(jù)用戶(hù)評(píng)級(jí)數(shù)據(jù)構(gòu)建用戶(hù)物品評(píng)分矩陣如式(1)所示
(1)
表1 本節(jié)公式符號(hào)含義
步驟2 根據(jù)步驟1構(gòu)建的評(píng)分矩陣,計(jì)算用戶(hù)或者物品間的相似度,獲取用戶(hù)或者物品相似度矩陣。用戶(hù)相似度計(jì)算如式(2)所示,其相似度矩陣為m×m的矩陣,定義為Su,計(jì)算結(jié)果如式(3)所示。物品相似度計(jì)算如式(4)所示,其相似度矩陣為n×n的矩陣,定義為SI,計(jì)算結(jié)果顯示在式(5)中,公式相關(guān)概念的定義顯示在表1中
(2)
(3)
(4)
(5)
步驟3 對(duì)步驟2獲取的用戶(hù)或者物品相似度矩陣進(jìn)行排序,得到目標(biāo)用戶(hù)或物品的近鄰集合Uk或In。
步驟4 產(chǎn)生推薦集合。如果采用基于用戶(hù)的推薦,則可以根據(jù)用戶(hù)a的近鄰集合Uk獲得尚未評(píng)級(jí)物品i的用戶(hù)a對(duì)i的預(yù)測(cè)評(píng)級(jí)分?jǐn)?shù)Pa,j,如式(6)所示
(6)
類(lèi)似地,如果采用基于物品的推薦,則根據(jù)用戶(hù)的評(píng)分物品計(jì)算的推薦集合In可以獲得用戶(hù)a對(duì)沒(méi)有評(píng)分的物品i的預(yù)測(cè)評(píng)級(jí)分?jǐn)?shù)Pa,i,如式(7)所示
(7)
最后根據(jù)從大到小的預(yù)測(cè)分?jǐn)?shù),獲取目標(biāo)用戶(hù)a的推薦集合。
不同用戶(hù)對(duì)不同物品屬性的偏好不同,我們稱(chēng)之為用戶(hù)偏好。不同物品具有不同的屬性,且每個(gè)屬性對(duì)于區(qū)別該物品與其它物品的貢獻(xiàn)值不同,我們稱(chēng)之為屬性權(quán)重。文獻(xiàn)[5]提出了融合用戶(hù)興趣評(píng)分的填充方法考慮了物品之間差異性,但未衡量不同用戶(hù)的物品屬性偏好權(quán)重。針對(duì)以上矩陣填充的缺陷,本文提出了一種基于用戶(hù)偏好和屬性權(quán)重的矩陣填充算法。該算法考慮了用戶(hù)對(duì)物品屬性的偏好,使填充的數(shù)據(jù)更可靠,并獲得更好的推薦。
不同的物品具有不同的屬性,每個(gè)屬性具有不同的權(quán)重值。用戶(hù)對(duì)不同物品的評(píng)分差異可以反映用戶(hù)對(duì)不同物品屬性的偏好。當(dāng)填充矩陣時(shí),結(jié)合評(píng)分?jǐn)?shù)據(jù),分析用戶(hù)對(duì)物品屬性的偏好,并計(jì)算用戶(hù)的偏好權(quán)重和屬性評(píng)分均值。然后利用偏好權(quán)重和屬性評(píng)分均值進(jìn)行計(jì)算,計(jì)算結(jié)果用于矩陣填充,使填充值具有更好的推薦效果。
2.1.1 建立用戶(hù)偏好矩陣
本節(jié)中采用TF-IDF(term frequency-inverse document frequency)的思想,結(jié)合用戶(hù)u對(duì)電影I的評(píng)分Ru,i進(jìn)行計(jì)算,計(jì)算結(jié)果代表用戶(hù)的物品屬性偏好權(quán)重。TFut在本文的含義是,物品屬性t在用戶(hù)u的已評(píng)分物品集合中出現(xiàn)的次數(shù)。TFut越大,表示該用戶(hù)u對(duì)物品屬性t的喜好越大,越能用該物品屬性代表用戶(hù)的喜好。IDF(t)在本文的含義是,物品屬性t在整個(gè)物品集合中出現(xiàn)的次數(shù)。IDF(t)越大,表示物品屬性t對(duì)區(qū)別不同用戶(hù)喜好的貢獻(xiàn)越少。因此本文使用下面的式(8)定義了用戶(hù)u對(duì)物品屬性t的偏好,相關(guān)公式符號(hào)含義見(jiàn)表2。
表2 公式含義
P(u,t)=TFut×IDF(t)
(8)
(9)
(10)
用戶(hù)對(duì)物品的評(píng)級(jí)代表了用戶(hù)對(duì)物品屬性的主觀偏好。在式(8)~式(10)中,如果物品屬性t在用戶(hù)已評(píng)分物品中經(jīng)常出現(xiàn),并且TFut值比較大,這意味著用戶(hù)對(duì)物品屬性t具有高度偏好,并且用戶(hù)可能更喜歡具有屬性t的物品。如果用戶(hù)評(píng)價(jià)了很多包含某一相同元素的物品,但是TFut值比較小,這就表示用戶(hù)對(duì)屬性t比較喜好,但是很難獲取到具有物品屬性t的物品。即推薦具有物品屬性t的物品給用戶(hù)更貼近用戶(hù)的需求。IDF(t)顯示了物品屬性t在整個(gè)數(shù)據(jù)集中的流行度。用它對(duì)用戶(hù)偏好進(jìn)行加權(quán)可以保證實(shí)驗(yàn)結(jié)果不會(huì)被流行元素影響。
最后對(duì)式(8)~式(10)進(jìn)行歸一化處理,使
(11)
歸一化處理后wu,t∈(0,1)。對(duì)于用戶(hù)u,它的偏好向量為wu(wu,1,wu,2,wu,3,…,wu,m)。同理可得用戶(hù)集中所有用戶(hù)的偏好向量,進(jìn)而求出用戶(hù)的偏好矩陣P(表3)。
表3 用戶(hù)偏好矩陣
由此計(jì)算出了用戶(hù)對(duì)特定物品屬性的偏好權(quán)重。
2.1.2 計(jì)算物品屬性評(píng)分
結(jié)合用戶(hù)評(píng)分?jǐn)?shù)據(jù)和物品屬性信息可以構(gòu)建評(píng)分矩陣(表4)和物品屬性矩陣(表5)。依據(jù)用戶(hù)的評(píng)分?jǐn)?shù)據(jù)和物品屬性,能夠得到用戶(hù)對(duì)具體物品屬性的評(píng)級(jí)。
表4 用戶(hù)-物品評(píng)分矩陣
表5 物品屬性矩陣
表5中的t=1表示該屬性包含在該項(xiàng)中,并且t=0表示該屬性未包括在該項(xiàng)中。計(jì)算物品屬性的用戶(hù)評(píng)分,如式(12)所示
(12)
最后根據(jù)計(jì)算式(12)的計(jì)算結(jié)果得到用戶(hù)-物品屬性評(píng)分矩陣(表6)。
表6 用戶(hù)-物品屬性評(píng)分矩陣
2.1.3 基于用戶(hù)偏好的矩陣填充
根據(jù)表3獲取的用戶(hù)偏好矩陣和表6獲取的用戶(hù)物品屬性評(píng)分矩陣,填補(bǔ)用戶(hù)評(píng)分缺失項(xiàng)。填補(bǔ)用戶(hù)的未評(píng)級(jí)物品時(shí)需要考慮兩個(gè)方面:
(1)未評(píng)級(jí)物品中包括的所有物品屬性都包含在用戶(hù)已評(píng)分物品集的所有物品屬性中。在該情況下,采用式(13)計(jì)算填充值
(13)
(2)未評(píng)級(jí)物品中的物品屬性未包含在用戶(hù)的評(píng)級(jí)物品集中。在該情況下,為了避免不準(zhǔn)確的填充值影響后續(xù)評(píng)分的準(zhǔn)確度,不填補(bǔ)該物品。
通過(guò)本節(jié)提出的算法,填補(bǔ)用戶(hù)未評(píng)分的物品可以很好地緩解評(píng)分?jǐn)?shù)據(jù)的稀疏性。最后在實(shí)驗(yàn)部分對(duì)本節(jié)提出的填充算法與目前研究中常用的幾種填充算法進(jìn)行對(duì)比。
傳統(tǒng)的CF算法中,相似度的計(jì)算沒(méi)有考慮目標(biāo)用戶(hù)不同。簡(jiǎn)而言之,在進(jìn)行相似度計(jì)算時(shí),兩個(gè)物品之間的共同評(píng)分用戶(hù)的權(quán)重是一樣的,目標(biāo)物品的近鄰對(duì)所有用戶(hù)都是一樣的。然而合理的假設(shè)是,當(dāng)我們搜尋目標(biāo)物品近鄰時(shí),應(yīng)該考慮對(duì)目標(biāo)物品和另一物品都評(píng)過(guò)分的用戶(hù)間的相似度,為每個(gè)目標(biāo)物品選擇不同的近鄰。另外,傳統(tǒng)的計(jì)算方法也未考慮用戶(hù)的偏好差異。因此本文提出一種考慮用戶(hù)的偏好差異的相似度算法。該算法從兩個(gè)方面改進(jìn)了相似度計(jì)算公式:用戶(hù)偏好和鄰居選擇??紤]用戶(hù)偏好,根據(jù)目標(biāo)用戶(hù)的不同,為每個(gè)目標(biāo)項(xiàng)選擇不同的近鄰集合,使近鄰選擇更加合理,提高推薦的精度。
從式(3)可知,當(dāng)計(jì)算兩個(gè)物品之間的相似性時(shí),首先需要尋找對(duì)這兩個(gè)物品都評(píng)過(guò)分的用戶(hù)集合。然后根據(jù)用戶(hù)集合中的用戶(hù)的評(píng)分偏差來(lái)計(jì)算兩個(gè)物品間的相似度。對(duì)于任何用戶(hù)來(lái)說(shuō),物品之間的相似性是相同的,這顯然是不合理的。因此,本文中相似度算法改進(jìn)的第一點(diǎn)是將用戶(hù)相似度引入到物品相似度的計(jì)算中,并在計(jì)算物品之間的相似度時(shí),考慮目標(biāo)用戶(hù)與已對(duì)兩個(gè)物品進(jìn)行評(píng)分的用戶(hù)之間的相似性。然后對(duì)用戶(hù)相似度的計(jì)算要考慮用戶(hù)偏好的差異。因此本文對(duì)相似度算法改進(jìn)的第二點(diǎn)是采用表3的用戶(hù)偏好矩陣,考慮用戶(hù)之間的偏好差異來(lái)計(jì)算用戶(hù)之間的相似性。最后,本文采用的用戶(hù)相似度的計(jì)算如下面的式(14)所示,考慮用戶(hù)偏好的物品相似度的計(jì)算如式(15)所示。其中,公式中的符號(hào)含義見(jiàn)表7。
表7 公式含義
(14)
(15)
根據(jù)用戶(hù)對(duì)物品屬性的偏好權(quán)重填充矩陣,然后改進(jìn)相似度計(jì)算公式。為不同的目標(biāo)用戶(hù)和不同的目標(biāo)物品找到更合適的鄰居集,然后根據(jù)鄰居集計(jì)算物品評(píng)分預(yù)測(cè)值。最后,提出了一種基于用戶(hù)偏好和矩陣填充的改進(jìn)混合推薦算法。
算法:基于用戶(hù)偏好矩陣填充的改進(jìn)混合推薦算法
輸入:用戶(hù)評(píng)分?jǐn)?shù)據(jù)、物品屬性信息、鄰居數(shù)目K
輸出:目標(biāo)用戶(hù)的預(yù)測(cè)評(píng)分
具體的步驟如下:
(1)計(jì)算用戶(hù)偏好和屬性評(píng)分均值;
(2)根據(jù)(1)中得到的矩陣,采用式(13)的計(jì)算結(jié)果填充矩陣;
(3)根據(jù)(1)中求解的偏好權(quán)重計(jì)算不同用戶(hù)間的相似度;
(4)根據(jù)(3)計(jì)算的結(jié)果,考慮目標(biāo)用戶(hù)的差異,使用式(15)計(jì)算物品之間的相似度;
(5)根據(jù)步驟(4)得到的對(duì)于不用目標(biāo)用戶(hù)的物品相似度,采用如式(16)獲取用戶(hù)沒(méi)有評(píng)分物品的預(yù)測(cè)值。最后,選擇預(yù)測(cè)值中得分最高的前N項(xiàng)作為目標(biāo)用戶(hù)的推薦集。其符號(hào)含義見(jiàn)表8
(16)
表8 式(16)符號(hào)含義
本文的所有實(shí)驗(yàn)和算法都是通過(guò)MATLAB和Python實(shí)現(xiàn)。實(shí)驗(yàn)運(yùn)行PC的操作系統(tǒng)為Windows10,處理器為Intel Core i5-4200U CPU,內(nèi)存為8 GB。
本文采用的實(shí)驗(yàn)數(shù)據(jù)是Movielens100k數(shù)據(jù)集,該數(shù)據(jù)集是推薦算法研究中的常用數(shù)據(jù)集[11]。為了更好地對(duì)本文所提出的算法進(jìn)行實(shí)驗(yàn)對(duì)比和分析,選擇它作為實(shí)驗(yàn)數(shù)據(jù)集。該數(shù)據(jù)集有943個(gè)用戶(hù)對(duì)1682部電影的100 000條評(píng)分?jǐn)?shù)據(jù)[11],除此之外還有用戶(hù)的基本信息和物品的屬性信息等。
為了評(píng)估改進(jìn)的推薦算法的準(zhǔn)確度,本文選擇平均絕對(duì)誤差(mean absolute error,MAE)作為評(píng)價(jià)標(biāo)準(zhǔn)。MAE用來(lái)計(jì)算物品的預(yù)測(cè)值和真實(shí)值之間的差異,MAE值越小,說(shuō)明預(yù)測(cè)值的準(zhǔn)確度越高,其計(jì)算公式如式(17)所示
(17)
其中,n代表預(yù)測(cè)評(píng)分的個(gè)數(shù)。
為了保證結(jié)果的準(zhǔn)確性和可行性,本文將數(shù)據(jù)集隨機(jī)分成兩部分,80%的數(shù)據(jù)用于訓(xùn)練,20%的數(shù)據(jù)用于測(cè)試。Movielens數(shù)據(jù)集由5組隨機(jī)分割的訓(xùn)練集和測(cè)試集組成,這些訓(xùn)練集和測(cè)試集在提供的5對(duì)數(shù)據(jù)集上執(zhí)行。每個(gè)實(shí)驗(yàn)取5次實(shí)驗(yàn)結(jié)果的平均值進(jìn)行分析。
實(shí)驗(yàn)1:測(cè)試本文提出的缺失項(xiàng)填充算法的有效性。
通過(guò)從訓(xùn)練數(shù)據(jù)中隨機(jī)選出一些已評(píng)分電影作為評(píng)分缺失項(xiàng),然后分別采用用戶(hù)評(píng)分均值填充法(URA),物品評(píng)分均值填充法(IRA),文獻(xiàn)[5]提出的融合用戶(hù)興趣評(píng)分填充法(UIR)和本文的基于用戶(hù)偏好的矩陣填充法(UPR)對(duì)缺失項(xiàng)進(jìn)行填充,最后,計(jì)算包含不同用戶(hù)的數(shù)據(jù)集下的MAE值,實(shí)驗(yàn)結(jié)果如圖1所示。
圖1 常用填充算法的MAE比較
從圖1能夠看出,伴隨K值的變化,4種算法的MAE都剛開(kāi)始逐步下降,然后再慢慢上升。這是因?yàn)榻弬€(gè)數(shù)的選取需要在一個(gè)合適的范圍內(nèi),過(guò)大過(guò)小都影響推薦精度。即便如此,采取本文的UPR算法填充評(píng)分缺失項(xiàng)的MAE值在包含不同用戶(hù)數(shù)的數(shù)據(jù)集中都比其它3種填充方法小,準(zhǔn)確度至少提升了4.3%。說(shuō)明在填補(bǔ)用戶(hù)評(píng)級(jí)缺失項(xiàng)時(shí)考慮用戶(hù)的偏好權(quán)重可以獲得更好的推薦。
實(shí)驗(yàn)2:檢測(cè)改進(jìn)相似度計(jì)算的有效性。
為了測(cè)試本文改進(jìn)的相似度計(jì)算的有效性,本文將針對(duì)以下4種情形進(jìn)行對(duì)比:
(1)計(jì)算傳統(tǒng)的CF算法的MAE值;
(2)在傳統(tǒng)CF算法上采用本文改進(jìn)的相似度計(jì)算,然后再根據(jù)推薦結(jié)果計(jì)算MAE值(CF_S);
(3)根據(jù)本文提出的填充算法采取傳統(tǒng)的Pearson相似度計(jì)算方法,根據(jù)推薦結(jié)果計(jì)算MAE值(UPR);
(4)根據(jù)本文提出的矩陣填充算法采用的本文提出的相似度計(jì)算方法(UPR_S)。
然后將近鄰數(shù)分別設(shè)置為5、10、20、30、40、50、60、70、80、90進(jìn)行實(shí)驗(yàn),最后根據(jù)推薦結(jié)果計(jì)算MAE值,實(shí)驗(yàn)結(jié)果如圖2所示。
圖2 改進(jìn)相似度算法性能比較
圖2的實(shí)驗(yàn)結(jié)果表明了本文提出的相似度計(jì)算方法的可行性。不管是在常規(guī)的CF算法上還是在本文提出的填充算法上使用改進(jìn)的相似度計(jì)算方法都比使用傳統(tǒng)的相似度計(jì)算取得更低的MAE值。在傳統(tǒng)算法中引入改進(jìn)的相似度計(jì)算方法,性能提升了2.7%~3.2%,在本文填充算法的基礎(chǔ)上提升了2%。說(shuō)明了本文提出的改進(jìn)相似度計(jì)算方法的有效性。
實(shí)驗(yàn)3:測(cè)試本文最終提出的算法的有效性
將本文提出的考慮用戶(hù)對(duì)屬性的偏好權(quán)重的改進(jìn)混合推薦算法(IHRUP)和傳統(tǒng)的協(xié)同過(guò)濾推薦算法(UBCF)、文獻(xiàn)[3]提出的基于評(píng)分矩陣填充和用戶(hù)興趣的協(xié)同過(guò)濾推薦算法(PICF)、文獻(xiàn)[5]提出的基于用戶(hù)興趣評(píng)分填充的改進(jìn)混合推薦算法(IHRIRF)分別在近鄰數(shù)設(shè)置為5、10、20、30、40、50、60、70、80、90時(shí)進(jìn)行實(shí)驗(yàn)對(duì)比,實(shí)驗(yàn)結(jié)果如圖3所示。
圖3 4種算法在不同數(shù)量的用戶(hù)集下的MAE比較
從圖3可以看到,隨著K值的增加,上述4種算法的MAE值開(kāi)始下降并最終接近穩(wěn)定值。對(duì)于不同的近鄰個(gè)數(shù),本文所提出的算法IHRUP均優(yōu)于UBCF、PICF和IHRIRF算法,相較于UBCF算法,推薦性能提升了12%,相較于PICF算法,推薦性能提升了5.36%,相較于IHRIRF算法,推薦性能提升了0.8%,驗(yàn)證該算法是有效的,可以進(jìn)一步降低 MAE值,有效提高推薦的準(zhǔn)確性。
本文針對(duì)現(xiàn)有的填充算法中未充分考慮用戶(hù)偏好和物品屬性?xún)?nèi)在關(guān)聯(lián)的問(wèn)題以及相似度計(jì)算中存在的不合理之處提出了一種改進(jìn)算法。該算法依據(jù)對(duì)用戶(hù)評(píng)分和物品屬性的分析,求解出用戶(hù)的偏好權(quán)重和屬性評(píng)分均值,并據(jù)此采用改進(jìn)的填充算法填補(bǔ)缺失項(xiàng)。同時(shí)在相似度計(jì)算中,通過(guò)考慮目標(biāo)用戶(hù)的差異來(lái)改進(jìn)計(jì)算公式。最后通過(guò)實(shí)驗(yàn)與其它CF推薦算法進(jìn)行比較,結(jié)果表明本文改進(jìn)的算法可以有效改善評(píng)分?jǐn)?shù)據(jù)稀疏問(wèn)題,充分考慮了用戶(hù)的偏好,能滿(mǎn)足不同用戶(hù)的喜好。