張雙慶
摘要:文章首先介紹現(xiàn)存的基于用戶的協(xié)同過濾推薦算法,分析算法存在的問題。然后在此基礎(chǔ)上提出一種新的算法,新算法考察不同用戶對相同物品評分的差值,以此度量用戶與用戶的相似度。由于新算法只關(guān)心不同用戶對相同物品評分,因此既解決了數(shù)據(jù)稀疏導(dǎo)致的算法準(zhǔn)確度下降問題,同時,又提升了算法效率。最后,利用MoiveLens數(shù)據(jù)集中的測試數(shù)據(jù)集對新算法和老算法進行對比,從不同的維度比較新老算法的優(yōu)劣勢。
關(guān)鍵詞:推薦算法;協(xié)同過濾;數(shù)據(jù)稀疏;推薦效率;推薦精度
中圖分類號:TP312? ? ? 文獻標(biāo)識碼:A? ? ? 文章編號:1009-3044(2019)01-0019-03
User-based Collaborative Filtering Recommendation Algorithm
ZHANG Shuang-qing
(Shanghai University, Shanghai 200444, China)
Abstract: The article first introduces the existing user-based collaborative filtering recommendation algorithm and analyzes the problems of the algorithm. Then, based on this, a new algorithm is proposed. The new algorithm examines the difference between the scores of different users on the same item, and measures the similarity between the user and the user. Since the new algorithm only cares about the scores of the same items by different users, it not only solves the problem of the accuracy of the algorithm caused by data sparseness, but also improves the efficiency of the algorithm. Finally, the new algorithm and the old algorithm are compared by using the test data set in the MoiveLens data set to compare the advantages and disadvantages of the old and new algorithms from different dimensions.
Key words:recommended algorithm; collaborative filtering; data sparse; recommended efficiency; recommended accuracy
1 引言
截至2018年6月,我國網(wǎng)民規(guī)模達8.02億,互聯(lián)網(wǎng)普及率為57.7%;我國手機網(wǎng)民規(guī)模達7.88億,網(wǎng)民通過手機接入互聯(lián)網(wǎng)的比例高達98.3%[1]。隨著互聯(lián)網(wǎng)特別是移動互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)爆炸式增長。但是,人類所能接受和處理的數(shù)據(jù)卻沒有顯著增長,信息過載[2]已成為常態(tài)。目前解決信息過載的方式有兩種,一種是搜索引擎,另一種就是推薦系統(tǒng)[3]。推薦系統(tǒng)對用戶的歷史信息等進行研究與挖掘,分析不同用戶的喜好,預(yù)測用戶對產(chǎn)品或信息的評分,從而推薦用戶評分較高的產(chǎn)品給用戶。好的推薦系統(tǒng)不僅能改善用戶體驗,還能提高服務(wù)效率。目前,推薦系統(tǒng)在電子商務(wù)、社交網(wǎng)絡(luò)、音視頻應(yīng)用等領(lǐng)域大展身手,不少新型應(yīng)用正是基于推薦系統(tǒng)建立起來的。
推薦系統(tǒng)中最重要的部分是推薦算法,它決定了推薦結(jié)果的好壞和系統(tǒng)性能的優(yōu)劣,是推薦系統(tǒng)至關(guān)重要的部分。常用的推薦算法主要包括基于內(nèi)容(content-based)推薦算法、協(xié)同過濾(collaborative filtering)推薦算法、基于人口統(tǒng)計學(xué)(demographic)推薦算法、基于知識(knowledge-based)推薦算法等[4]。協(xié)同過濾算法主要利用已有用戶群過去的行為或者意見預(yù)測當(dāng)前用戶可能喜歡或者對那些物品感興趣。此類算法在業(yè)界已經(jīng)廣泛應(yīng)用,本文主要從以此類算法為研究對象。
在大數(shù)據(jù)時代,數(shù)據(jù)的稀疏性普遍存在于各個系統(tǒng)中。數(shù)據(jù)稀疏[5]會導(dǎo)致兩個問題:推薦結(jié)果不準(zhǔn)確和推薦算法效率變低。大量稀疏的數(shù)據(jù)不僅占用計算時間,且對推薦結(jié)果產(chǎn)生噪聲干擾。顯然,這些是我們不愿意看到的。
本文提出一種新的算法,新算法考察不同用戶對相同物品評分的差值,以此度量用戶與用戶的相似度。由于新算法只關(guān)心不同用戶對相同物品評分,因此既解決了數(shù)據(jù)稀疏導(dǎo)致的算法準(zhǔn)確度下降問題,同時,又提升了算法效率。
2 基于用戶協(xié)同過濾推薦算法與改進
協(xié)同推薦算法主要有兩種,基于用戶的最近鄰?fù)扑](user-based nearest neighbor recommendation)算法、基于物品的余弦相似度(cosine similarity)算法[6]。本文主要討論基于用戶的近鄰?fù)扑]算法。
2.1 基于用戶的最近鄰?fù)扑]
表1顯示了當(dāng)前用戶Amy與其他用戶對物品的評分?jǐn)?shù)據(jù),評分范圍為1-5分,用戶給予物品評分為5則表示用戶喜歡此物品,評分為1代表用戶不喜歡此物品。在此表格中,推薦系統(tǒng)的任務(wù)是確定Amy是否喜歡她從來未見過的物品5(I5),為此,我們需要找到那些與Amy有著類似偏好的用戶,然后用這組用戶對物品5(I5)的評分來預(yù)測Amy是否喜歡此物品。
由公式1我們得知,用戶a,b的相似度由用戶a與用戶b評論過的所有物品的分?jǐn)?shù)決定。當(dāng)物品數(shù)量急劇增加時,用戶感興趣的物品卻增長緩慢,數(shù)據(jù)稀疏性問題開始顯現(xiàn)。基于用戶的最近鄰?fù)扑]算法的效率和準(zhǔn)確度下降。為此,我們提出了一種新的算法,以解決數(shù)據(jù)稀疏導(dǎo)致的算法效率與準(zhǔn)確度下降問題。
2.2 一種基于用戶評分差值的相似度算法
事實上,每個用戶的評論數(shù)與物品量可能存在數(shù)十個數(shù)量級的差距。為此,我們采用了一種新的算法來解決這個問題,新算法主要考察兩個用戶共同評論過的物品,用戶對相同物品評分的差值決定用戶的相似度。新算法公式如下:
2.3 驗證兩種算法的優(yōu)劣性
本實驗選用MovieLens[8] 100K 數(shù)據(jù)集對算法進行訓(xùn)練和驗證。數(shù)據(jù)集包括1000名用戶對1700部電影的100000個評分。數(shù)據(jù)分為2部分,一部分是訓(xùn)練數(shù)據(jù),另一部分是驗證數(shù)據(jù)。通常使用平均絕對誤差(MAE)和均方根誤差(RMSE)來評估推薦算法的準(zhǔn)確性。
其中,f(u,i)是推薦算法計算出的用戶u對物品i的評分,rui是用戶u對物品i的真實評分,Rtest是測試集。
本文使用Python語言實現(xiàn)算法并測試測試算法的準(zhǔn)確性和效率。Python是一種動態(tài)的、面向?qū)ο蟮哪_本語言,最初被設(shè)計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發(fā)[10]。以下是算法的實現(xiàn)偽代碼:
def getSimilar(u1,u2):
u1M = u1評論的電影集合
u2M = u2評論的電影集合
u1u2M = u1評論的電影集合<E:\知網(wǎng)文件\電腦\電腦01-02\電腦01\1xs201901\Image\image29.png>u2評論的電影集合
u_uPower = 0
k=0.5 #參數(shù)K
for m in u1u2M:
u1mR = u1對電影m的評分
u2mR = u2對電影m的評分
u_uR = 1-abs(float(u1mR)-float(u2mR))/2
u_uPower += u_uR
u_uSim = u_uPower/abs(u_uPower)*(1-(1-k)**abs(u_uPower))
return u_uSim
實驗結(jié)果數(shù)據(jù)如下:
由圖1、圖2可知,當(dāng)鄰居數(shù)量較少時,基于用戶的鄰域算法準(zhǔn)確度與新算法準(zhǔn)確度基本相同,但當(dāng)數(shù)據(jù)量增大,鄰居數(shù)量增多時,基于新算法的優(yōu)勢就體現(xiàn)了出來,新算法的誤差小于基于近鄰?fù)扑]算法。由于新算法只考察用戶共同評論過的物品,所有當(dāng)數(shù)據(jù)稀疏度增加時,算法耗時并未隨之增加。在數(shù)據(jù)稀疏時,新算法的效率高于鄰域算法。
3 結(jié)論
當(dāng)k取不同值時,推薦算法給出的結(jié)果不盡相同。我們可以通過大量數(shù)據(jù)訓(xùn)練算法,找出對應(yīng)最適合系統(tǒng)的k值,以求算法在精度方面達到系統(tǒng)的要求??傮w來說,新算法在準(zhǔn)確性和時效性方面有所提升。同時,也存在一些問題,如當(dāng)鄰居用戶大量提升時,公式3、4中的<E:\知網(wǎng)文件\電腦\電腦01-02\電腦01\1xs201901\Image\image32.png>項會快速增加,導(dǎo)致用戶相似度趨近于1。此時我們需要對<E:\知網(wǎng)文件\電腦\電腦01-02\電腦01\1xs201901\Image\image32.png>進行求導(dǎo),以減小數(shù)據(jù)范圍對推薦精度的影響。
參考文獻:
[1] 中國互聯(lián)網(wǎng)信息中心.第42次《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》[EB/OL]. http://www.cnnic.net.cn/hlwfzyj/hlwxzbg/hlwtjbg/201808/t20180820_70488.htm.
[2] Landhuis E. Scientific literature: Information overload[J]. Nature, 2016, 535(7612):457-458.
[3] Wei J, He J, Chen K, et al. Collaborative Filtering and Deep Learning Based Recommendation System For Cold Start Items[J]. Expert Systems with Applications, 2017, 69:29-39.
[4] Ricci F, Rokach L, Shapira B, et al. Recommender Systems Handbook[M].Springer US, 2011.
[5] Shepperd M, Cartwright M. Predicting with sparse data[J]. 2001, 27(11):987-998.
[6] 弗朗西斯科·里奇,等,李艷民.推薦系統(tǒng)[M].機械工業(yè)出版社,2015.
[7] 王國霞, 劉賀平. 個性化推薦系統(tǒng)綜述[J].計算機工程與應(yīng)用,2012, 48(7):66-76.
[8] Harper F M, Konstan J A. The MovieLens Datasets: History and Context[M].ACM, 2015.
[9] 朱郁筱,呂琳媛.推薦系統(tǒng)評價指標(biāo)綜述[J].電子科技大學(xué)學(xué)報,2012, 41(2):163-175.
[10] 百度百科. Python(計算機程序設(shè)計語言)[EB/OL]. https://baike.baidu.com/item/Python/407313.