一種面向多樣性的推薦方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)領(lǐng)域,具體涉及一種面向多樣性的推薦方法。
【背景技術(shù)】
[0002] 通過(guò)分析用戶的歷史行為數(shù)據(jù),推薦系統(tǒng)可以從大量的信息中找到用戶可能會(huì)感 興趣的內(nèi)容推薦給用戶。大部分的推薦算法通過(guò)預(yù)測(cè)目標(biāo)用戶對(duì)項(xiàng)目的評(píng)分,然后推薦評(píng) 分最高的N個(gè)項(xiàng)目給用戶以提升精確度,如應(yīng)用最廣泛的基于用戶(項(xiàng)目)的協(xié)同過(guò)濾與 矩陣分解推薦算法等。這些面向精確度的算法認(rèn)為高精確度的推薦結(jié)果即意味著好的推薦 結(jié)果。
[0003] 然而,高的精確度不一定意味著高的用戶滿意度,也不一定能提高商品的銷(xiāo)售平 衡。一般而言,推薦給用戶的項(xiàng)目個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于系統(tǒng)總的項(xiàng)目個(gè)數(shù),以精確度為衡量指標(biāo)的 算法可能會(huì)導(dǎo)致兩方面的問(wèn)題:一方面由于流行度高的商品具有更多的歷史數(shù)據(jù),因此更 容易被推薦,而那些被少部分用戶購(gòu)買(mǎi)的、目標(biāo)用戶可能會(huì)更喜歡的項(xiàng)目難以被推薦,導(dǎo)致 系統(tǒng)的推薦結(jié)果集中在少部分的流行度高的項(xiàng)目中,不利于商業(yè)模型;另一方面推薦的結(jié) 果與用戶過(guò)去的購(gòu)買(mǎi)行為太相似,從而不能迎合用戶的廣泛喜好,導(dǎo)致用戶對(duì)系統(tǒng)的滿意 度下降。提高推薦的多樣性有助于解決以上問(wèn)題。
[0004] 推薦的多樣性可以從系統(tǒng)與用戶兩方面進(jìn)行衡量,分別表示為整體多樣性與個(gè)體 多樣性。整體多樣性衡量推薦系統(tǒng)將所有商品推薦出去的能力,個(gè)體多樣性衡量給單個(gè)用 戶推薦商品的多樣性。提尚如者有助于增加商業(yè)利益,提尚后者有助于提尚用戶滿意度。
[0005] 目前,許多研究者從不同的方面分析了多樣性并提出了相應(yīng)的算法,但是,大部分 的算法是以降低精確度的代價(jià)來(lái)提高多樣性性能,并且,尚未有工作同時(shí)分析并提高推薦 的精確度、個(gè)體多樣性、整體多樣性與銷(xiāo)售平衡。因此,有必要提出一種方法來(lái)同時(shí)提高推 薦結(jié)果的精確度與多樣性。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明針對(duì)目前推薦結(jié)果中多樣性不高、大部分推薦算法是在降低精確度的情況 下提高多樣性的問(wèn)題,提供一種面向多樣性的推薦方法,其通過(guò)資源在二部圖上的傳播,設(shè) 計(jì)傳播概率與傳播損耗,使得推薦的精確度與多樣性更高。
[0007] 為解決上述問(wèn)題,本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0008] -種面向多樣性的推薦方法,包含以下步驟:
[0009] 步驟1、根據(jù)歷史評(píng)分?jǐn)?shù)據(jù)構(gòu)建用戶-項(xiàng)目二部圖G = (V,E),其中V表示節(jié)點(diǎn)集, E表示邊集;
[0010] 步驟2、計(jì)算傳播概率,包括用戶u傳播到其鄰居項(xiàng)目j的傳播概率pu]、項(xiàng)目j傳 播到其鄰居用戶V的傳播概率P]v和用戶V傳播到其鄰居項(xiàng)目i的傳播概率P vl;
[0011] 上述用戶U傳播到其鄰居項(xiàng)目j的傳播概率pu]為:
[0013] 式中,ruj為用戶u對(duì)項(xiàng)目j的評(píng)分;
[0014] 上述項(xiàng)目j傳播到其鄰居用戶V的傳播概率p]v為:
[0016] 式中,rvj為用戶V對(duì)項(xiàng)目j的評(píng)分;
[0017] 上述用戶V傳播到其鄰居項(xiàng)目i的傳播概率Pvl為:
[0019] 式中,rvl為用戶V對(duì)項(xiàng)目i的評(píng)分;
[0020] 步驟3、計(jì)算傳播損耗,包括用戶u傳播到其鄰居項(xiàng)目j的傳播損耗cu],項(xiàng)目j傳 播到其鄰居用戶V的傳播損耗c ]v,用戶V傳播到其鄰居項(xiàng)目i的傳播損耗Cvl;
[0021] 上述用戶u傳播到其鄰居項(xiàng)目j的傳播損耗cu]為:
[0023] 式中,ruj為用戶u對(duì)項(xiàng)目j的評(píng)分;
[0024] 上述項(xiàng)目j傳播到其鄰居用戶V的傳播損耗c]v為:
[0026] 式中,rvj為用戶V項(xiàng)目j的評(píng)分;
[0027] 上述用戶V傳播到其鄰居項(xiàng)目i的傳播損耗Cvl為:
[0028] Cvl= Iknn(J) n {i}
[0029] 式中,KNN(j)為項(xiàng)目j的K個(gè)最近鄰居項(xiàng)目集合,K為設(shè)定值,{i}為只包含項(xiàng)目 i的集合;
[0030] 步驟4、基于步驟2和步驟3,預(yù)測(cè)用戶u對(duì)項(xiàng)目i的得分4 ,即:
[0032] 式中,pu]為用戶U傳播到其鄰居項(xiàng)目j的傳播概率,p ]v為項(xiàng)目j傳播到其鄰居用 戶V的傳播概率,Pvl為用戶V傳播到其鄰居項(xiàng)目i的傳播概率;c u]為用戶u傳播到其鄰居 項(xiàng)目j的傳播損耗,c]v為項(xiàng)目j傳播到其鄰居用戶V的傳播損耗,c V1為用戶V傳播到其鄰 居項(xiàng)目i的傳播損耗;
[0033] 步驟5、針對(duì)某個(gè)目標(biāo)用戶,根據(jù)步驟4所得到的該目標(biāo)用戶對(duì)各個(gè)項(xiàng)目的得分進(jìn) 行排序,然后推薦其中N個(gè)得分最高的項(xiàng)目給該目標(biāo)用戶;其中N為設(shè)定值;
[0034] 上述u和V均為用戶,Vu為用戶集合,u e Vu, V e Vu;i和j均為項(xiàng)目,V :為項(xiàng)目 集合,i e V1, j e Vp
[0035] 步驟3中,項(xiàng)目j的K個(gè)最近鄰居項(xiàng)目集合KNN (j)的確定過(guò)程如下:
[0036] 先根據(jù)下式計(jì)算項(xiàng)目j與項(xiàng)目k的相似度s]k,即:
[0038] 式中,rvj為用戶v對(duì)項(xiàng)目j的評(píng)分;r vk為用戶v對(duì)項(xiàng)目k的評(píng)分;
[0039] 再將項(xiàng)目j與項(xiàng)目k的相似度進(jìn)行排序,并從中選取出K個(gè)相似度s]k高的項(xiàng)目形 成j的最近鄰居項(xiàng)目集合KNN (j);
[0040] 上述V為用戶,Vu為用戶集合,V e Vu;j和k均為項(xiàng)目,V1為項(xiàng)目集合,j e V1, k e Vio
[0041] 與現(xiàn)有技術(shù)相比,本發(fā)明由于考慮了項(xiàng)目評(píng)分的詳細(xì)信息、抑制了高流行度項(xiàng)目 的推薦能力、提高了興趣專(zhuān)一用戶的推薦能力、并且只為目標(biāo)用戶已評(píng)論過(guò)項(xiàng)目的最近鄰 居項(xiàng)目傳播資源、排除了不相關(guān)項(xiàng)目的干擾,不僅可以獲得更好的精確度,并且能獲得更好 的整體多樣性、銷(xiāo)售平衡與個(gè)體多樣性。
【附圖說(shuō)明】
[0042] 圖1為資源在二部圖中通過(guò)一條路徑傳播的過(guò)程。
[0043] 圖2為不同算法在Precision、Gini系數(shù)、ILS方面的表現(xiàn)。其中(a)為在 MovieLens數(shù)據(jù)集上各個(gè)算法的Precision性能,(b)為在Netflix數(shù)據(jù)集上各個(gè)算法的 Precision性能,(c)為在MovieLens數(shù)據(jù)集上各個(gè)算法的Gini系數(shù)性能,(d)為在Netflix 數(shù)據(jù)集上各個(gè)算法的Gini系數(shù)性能,(e)為在MovieLens數(shù)據(jù)集上各個(gè)算法的ILS性能, (f)為在Netflix數(shù)據(jù)集上各個(gè)算法的ILS性能。
【具體實(shí)施方式】
[0044] -種面向多樣性的推薦方法,包含以下步驟:
[0045] 步驟一:構(gòu)建用戶-項(xiàng)目二部圖G。
[0046] 將用戶-項(xiàng)目關(guān)系表示為二部圖G = (V,E),其中V表示節(jié)點(diǎn)集,E表示邊集。Vu 為用戶集合,u為用戶,u e Vu5V1為項(xiàng)目集合,i為項(xiàng)目,i e V1。如果用戶u評(píng)論過(guò)項(xiàng)目 i,則用戶u與項(xiàng)目i之間存在一條邊,并且該條邊的權(quán)重wui= Wiu= 1^,1^表示用戶u對(duì) 項(xiàng)目i的評(píng)分。
[0047] 步驟二:資源傳播。
[0048] 預(yù)測(cè)目標(biāo)用戶U對(duì)項(xiàng)目i的得分的過(guò)程即資源從用戶U出發(fā)經(jīng)過(guò)三步傳播到項(xiàng)目 i的過(guò)程,參見(jiàn)圖1,即:
[0049] 第一步(圖1中stepl)從用戶u傳播到其鄰居項(xiàng)目j。所謂用戶u的鄰居項(xiàng)目j 即在二部圖G中與用戶u通過(guò)邊相連的項(xiàng)目。
[0050] 第二步(圖1中step2)從鄰居項(xiàng)目j傳播到其鄰居用戶V。所謂鄰居項(xiàng)目j的 鄰居用戶V即在二部圖G中與項(xiàng)目j通過(guò)邊相連的用戶。
[0051] 第三步(圖1中step 3)從鄰居用戶V傳播到其鄰居項(xiàng)目i。所謂鄰居用戶V的 鄰居項(xiàng)目i即在二部圖G中與用戶V通過(guò)邊相連的項(xiàng)目。
[0052] 用戶和項(xiàng)目統(tǒng)稱(chēng)作節(jié)點(diǎn),當(dāng)需要對(duì)用戶和項(xiàng)目?jī)深?lèi)節(jié)點(diǎn)進(jìn)行統(tǒng)一描述時(shí),以下采 用X和y來(lái)泛指用戶或項(xiàng)目節(jié)點(diǎn),且y為X的鄰居節(jié)點(diǎn)。由于上述每一步的傳播過(guò)程均考 慮傳播概率Pxy與傳播損耗C xy,因此從節(jié)點(diǎn)X傳播到鄰居節(jié)點(diǎn)y的資源數(shù)RN為:
[0053] RN = R (X) · pxy · cxy (1)
[0054] 式中,R(X)為節(jié)點(diǎn)X具有的資源,Pxy為傳播概率,c xy為傳播損耗。
[0055] 傳播概率Pxy描述了多少資源從節(jié)點(diǎn)X出發(fā)向鄰居節(jié)點(diǎn)y傳播,與節(jié)點(diǎn)X相關(guān)。傳 播概率P xy的計(jì)算公式為:
[0057] 式中,Wxy為連接節(jié)點(diǎn)X與y的邊上的權(quán)重,r xy為當(dāng)X屬于用戶節(jié)點(diǎn)而y屬于項(xiàng)目 節(jié)點(diǎn)時(shí)用戶X對(duì)項(xiàng)目y的評(píng)分,ryx為當(dāng)X屬于項(xiàng)目節(jié)點(diǎn)而y屬于用戶節(jié)點(diǎn)時(shí)用戶y對(duì)項(xiàng)目 X的評(píng)分。
[0058] 用戶u傳播到鄰居項(xiàng)目j的傳播概率puj,鄰居項(xiàng)目j傳播到鄰居用戶V的傳播概 率P ]v,鄰居用戶V傳播到項(xiàng)目i的傳播概率Pvl均使用公式(2)計(jì)算,具體來(lái)說(shuō):
[0059] 上述用戶u傳播到其鄰居項(xiàng)目j的傳播概率pu]為:
[0061] 式中,ruj為用戶u對(duì)項(xiàng)目j的評(píng)分。
[0062] 上述項(xiàng)目j傳播到其鄰居用戶V的傳播概率p]v為:
[0064] 式中,rvj為用戶V對(duì)項(xiàng)目j的評(píng)分。
[0065] 上述用戶V傳播到其鄰居項(xiàng)目i的傳播概率Pvl為:
[0067] 式中,rvl為用戶V對(duì)項(xiàng)目i的評(píng)分。
[0068] 傳播損耗描述了資源在傳播過(guò)程中的損耗情況,與鄰居節(jié)點(diǎn)y相關(guān)。本發(fā)明區(qū)分 對(duì)待三步傳播中的不同鄰居節(jié)點(diǎn)y,考慮三種因素計(jì)算傳播損耗c xy,分別為項(xiàng)目度、用戶熵 與鄰居項(xiàng)目。
[0069] 首先,考慮到項(xiàng)目的度,將第一步中的傳播損耗cu]計(jì)算為:
[0071] 式中,kj為鄰居項(xiàng)目j的度,r uj為用戶U對(duì)項(xiàng)目j的評(píng)分。
[0072] 其次,使用用戶熵來(lái)計(jì)算第二步中的傳播損耗c]v:
[0074] 式中,E(V)為用戶V的用戶熵,pvj為用戶V傳播到鄰居項(xiàng)目j的傳播概率并使用 公式(2)進(jìn)行計(jì)算。
[0075] 最后,使用項(xiàng)目的最近鄰居概念,當(dāng)項(xiàng)目i不屬于目標(biāo)用戶u評(píng)論過(guò)的鄰居項(xiàng)目j 的最近鄰居項(xiàng)目時(shí)則不進(jìn)行傳播,將第三步中的傳播損耗cvl計(jì)算為:
[0076] Cvl= |KNN(j) n {i} (