協(xié)同過濾算法(UserCF + ItemCF)

最近在看《推薦系統(tǒng)實踐》這本書仑濒,對于其中 2.4.1 基于用戶的協(xié)同過濾算法和 2.4.2 基于物品的協(xié)同過濾算法進(jìn)行了簡易實現(xiàn)逛球。

本文列舉了在算法實現(xiàn)過程中遇到的一些情況并做了猜想與解釋茧跋。


數(shù)據(jù)準(zhǔn)備

本實驗采用的數(shù)據(jù)集來自于MovieLens金麸。


基本原理

本實驗將分別采用UserCF算法和ItemCF算法,目的是為了給用戶推薦電影览妖,而不是預(yù)測用戶會給某部電影打多少分轧拄。因此,ratings.csv中的打分信息可以忽略讽膏。

先讀取ratings.csv中的數(shù)據(jù)檩电,再隨機(jī)將數(shù)據(jù)分為訓(xùn)練集Train與測試集Test。在訓(xùn)練集中獲取訓(xùn)練User之間的關(guān)聯(lián)信息UserSimilarity或者訓(xùn)練Item之間的關(guān)聯(lián)信息ItemSimilarity府树,并根據(jù)Similarity給測試用戶推薦新的電影俐末。


Code

代碼已放在對應(yīng)Github上。


實驗結(jié)果

UserCF

當(dāng)采用不同數(shù)量的相關(guān)用戶(K取值不同)的時候奄侠,推薦算法產(chǎn)生的precision卓箫、recall、coverage垄潮、popularity有著一定相關(guān)關(guān)系烹卒。時間花費也相差較大。如下所示:

K   precision   recall  coverage    popularity  time
10  16.00%  9.38%   6.79%   4.83    19.60
10  15.81%  9.31%   6.61%   4.83    19.38
10  15.64%  9.26%   6.76%   4.84    21.02
10  15.99%  9.42%   6.62%   4.84    21.14
10  16.26%  9.92%   6.51%   4.83    20.23
10  15.31%  9.10%   6.67%   4.84    20.06
10  15.04%  9.05%   6.58%   4.85    20.29
10  16.11%  9.52%   6.69%   4.84    20.50
average:
10  15.77%  9.37%   6.65%   4.84

K   precision   recall  coverage    popularity  time
50  17.80%  10.44%  2.78%   5.12    73.39
50  17.23%  10.15%  2.82%   5.12    78.35
50  16.60%  9.83%   2.83%   5.13    80.17
50  17.89%  10.54%  2.75%   5.13    79.42
50  17.18%  10.48%  2.82%   5.12    80.98
50  17.03%  10.13%  2.87%   5.12    80.02
50  16.84%  10.14%  2.85%   5.12    85.77
50  17.43%  10.30%  2.97%   5.12    80.01
average:
50  17.25%  10.25%  2.84%   5.12

若K相同弯洗,使用User-IIF算法旅急,則從實驗結(jié)果中可以看到,在coverage上有了一定提升。K=10時或粮,結(jié)果如下:

K   precision   recall  coverage    popularity  time
10  16.21%  9.51%   7.70%   4.75    26.20
10  15.35%  9.04%   7.72%   4.77    25.82
10  15.56%  9.21%   7.92%   4.77    25.59
10  15.81%  9.31%   7.55%   4.77    25.51
10  16.27%  9.93%   7.56%   4.76    26.16
10  15.37%  9.14%   7.62%   4.77    25.66
10  14.66%  8.83%   7.66%   4.77    25.62
10  16.05%  9.49%   7.45%   4.77    27.94
average:
10  15.66%  9.31%   7.65%   4.77

ItemCF

在運行ItemCF過程中辞州,意外的發(fā)現(xiàn)程序耗時特別久蝙泼,如下所示:

K    precision    recall    coverage    popularity    time
10  15.42%  9.04%   7.28%   4.67    1587.82

與UserCF相比炎码,除了time之外的數(shù)據(jù)相差都不大盟迟,而time則相差了60倍左右。

從數(shù)據(jù)集中分析潦闲,本數(shù)據(jù)集包含671個User攒菠,9125 個Item,Item / User = 13.60歉闰。

從代碼層面分析辖众,在某同一數(shù)據(jù)集下,UserCF和ItemCF分別能得到以下結(jié)果(Similarity函數(shù)和Recommend函數(shù)均在只執(zhí)行一次的條件下測得數(shù)據(jù)):

CF Similarity函數(shù)中循環(huán)次數(shù) Similarity函數(shù)運行時間 Recommend函數(shù)中循環(huán)次數(shù) Recommend函數(shù)運行時間
UserCF 5491318 1.721613 945 0.011548
ItemCF 58900317 35.749465 200 1.021870
ItemCF/UserCF 10.73 20.77 0.21 88.49

可以發(fā)現(xiàn)和敬,Similarity函數(shù)和Recommend函數(shù)的運行時間和內(nèi)部循環(huán)次數(shù)并不十分相關(guān)凹炸,尤其當(dāng)ItemCF的Recommend循環(huán)遠(yuǎn)小于UserCF的Recommend循環(huán)時,運行時間卻要來的更大昼弟。

注意到這兩個函數(shù)內(nèi)部都額外構(gòu)建了dict啤它,分別代表User_Items關(guān)系與Item_Users關(guān)系,且都實現(xiàn)了相關(guān)的find舱痘、sort操作变骡,故函數(shù)運行時間差異主要與不同Size的Dict的find、sort性能相關(guān)芭逝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塌碌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旬盯,更是在濱河造成了極大的恐慌台妆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胖翰,死亡現(xiàn)場離奇詭異接剩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)萨咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門懊缺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人某弦,你說我怎么就攤上這事桐汤。” “怎么了靶壮?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵怔毛,是天一觀的道長。 經(jīng)常有香客問我腾降,道長拣度,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮抗果,結(jié)果婚禮上筋帖,老公的妹妹穿的比我還像新娘。我一直安慰自己冤馏,他們只是感情好日麸,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逮光,像睡著了一般代箭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕刚,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天嗡综,我揣著相機(jī)與錄音,去河邊找鬼杜漠。 笑死极景,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驾茴。 我是一名探鬼主播盼樟,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沟涨!你這毒婦竟也來了恤批?” 一聲冷哼從身側(cè)響起异吻,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤裹赴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诀浪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棋返,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年雷猪,在試婚紗的時候發(fā)現(xiàn)自己被綠了睛竣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡求摇,死狀恐怖射沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情与境,我是刑警寧澤验夯,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站摔刁,受9級特大地震影響挥转,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一绑谣、第九天 我趴在偏房一處隱蔽的房頂上張望党窜。 院中可真熱鬧,春花似錦借宵、人聲如沸幌衣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泼掠。三九已至,卻和暖如春垦细,著一層夾襖步出監(jiān)牢的瞬間择镇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工括改, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留腻豌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓嘱能,卻偏偏與公主長得像吝梅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惹骂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容