張雙慶



摘要:文章首先介紹現存的基于用戶的協同過濾推薦算法,分析算法存在的問題。然后在此基礎上提出一種新的算法,新算法考察不同用戶對相同物品評分的差值,以此度量用戶與用戶的相似度。由于新算法只關心不同用戶對相同物品評分,因此既解決了數據稀疏導致的算法準確度下降問題,同時,又提升了算法效率。最后,利用MoiveLens數據集中的測試數據集對新算法和老算法進行對比,從不同的維度比較新老算法的優劣勢。
關鍵詞:推薦算法;協同過濾;數據稀疏;推薦效率;推薦精度
中圖分類號:TP312? ? ? 文獻標識碼: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月,我國網民規模達8.02億,互聯網普及率為57.7%;我國手機網民規模達7.88億,網民通過手機接入互聯網的比例高達98.3%[1]。隨著互聯網特別是移動互聯網的發展,數據爆炸式增長。但是,人類所能接受和處理的數據卻沒有顯著增長,信息過載[2]已成為常態。目前解決信息過載的方式有兩種,一種是搜索引擎,另一種就是推薦系統[3]。推薦系統對用戶的歷史信息等進行研究與挖掘,分析不同用戶的喜好,預測用戶對產品或信息的評分,從而推薦用戶評分較高的產品給用戶。好的推薦系統不僅能改善用戶體驗,還能提高服務效率。目前,推薦系統在電子商務、社交網絡、音視頻應用等領域大展身手,不少新型應用正是基于推薦系統建立起來的。
推薦系統中最重要的部分是推薦算法,它決定了推薦結果的好壞和系統性能的優劣,是推薦系統至關重要的部分。常用的推薦算法主要包括基于內容(content-based)推薦算法、協同過濾(collaborative filtering)推薦算法、基于人口統計學(demographic)推薦算法、基于知識(knowledge-based)推薦算法等[4]。協同過濾算法主要利用已有用戶群過去的行為或者意見預測當前用戶可能喜歡或者對那些物品感興趣。此類算法在業界已經廣泛應用,本文主要從以此類算法為研究對象。
在大數據時代,數據的稀疏性普遍存在于各個系統中。數據稀疏[5]會導致兩個問題:推薦結果不準確和推薦算法效率變低。大量稀疏的數據不僅占用計算時間,且對推薦結果產生噪聲干擾。顯然,這些是我們不愿意看到的。
本文提出一種新的算法,新算法考察不同用戶對相同物品評分的差值,以此度量用戶與用戶的相似度。由于新算法只關心不同用戶對相同物品評分,因此既解決了數據稀疏導致的算法準確度下降問題,同時,又提升了算法效率。
2 基于用戶協同過濾推薦算法與改進
協同推薦算法主要有兩種,基于用戶的最近鄰推薦(user-based nearest neighbor recommendation)算法、基于物品的余弦相似度(cosine similarity)算法[6]。本文主要討論基于用戶的近鄰推薦算法。
2.1 基于用戶的最近鄰推薦
表1顯示了當前用戶Amy與其他用戶對物品的評分數據,評分范圍為1-5分,用戶給予物品評分為5則表示用戶喜歡此物品,評分為1代表用戶不喜歡此物品。在此表格中,推薦系統的任務是確定Amy是否喜歡她從來未見過的物品5(I5),為此,我們需要找到那些與Amy有著類似偏好的用戶,然后用這組用戶對物品5(I5)的評分來預測Amy是否喜歡此物品。
由公式1我們得知,用戶a,b的相似度由用戶a與用戶b評論過的所有物品的分數決定。當物品數量急劇增加時,用戶感興趣的物品卻增長緩慢,數據稀疏性問題開始顯現。基于用戶的最近鄰推薦算法的效率和準確度下降。為此,我們提出了一種新的算法,以解決數據稀疏導致的算法效率與準確度下降問題。
2.2 一種基于用戶評分差值的相似度算法
事實上,每個用戶的評論數與物品量可能存在數十個數量級的差距。為此,我們采用了一種新的算法來解決這個問題,新算法主要考察兩個用戶共同評論過的物品,用戶對相同物品評分的差值決定用戶的相似度。新算法公式如下:
2.3 驗證兩種算法的優劣性
本實驗選用MovieLens[8] 100K 數據集對算法進行訓練和驗證。數據集包括1000名用戶對1700部電影的100000個評分。數據分為2部分,一部分是訓練數據,另一部分是驗證數據。通常使用平均絕對誤差(MAE)和均方根誤差(RMSE)來評估推薦算法的準確性。
其中,f(u,i)是推薦算法計算出的用戶u對物品i的評分,rui是用戶u對物品i的真實評分,Rtest是測試集。
本文使用Python語言實現算法并測試測試算法的準確性和效率。Python是一種動態的、面向對象的腳本語言,最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發[10]。以下是算法的實現偽代碼:
def getSimilar(u1,u2):
u1M = u1評論的電影集合
u2M = u2評論的電影集合
u1u2M = u1評論的電影集合<E:\知網文件\電腦\電腦01-02\電腦01\1xs201901\Image\image29.png>u2評論的電影集合
u_uPower = 0
k=0.5 #參數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
實驗結果數據如下:
由圖1、圖2可知,當鄰居數量較少時,基于用戶的鄰域算法準確度與新算法準確度基本相同,但當數據量增大,鄰居數量增多時,基于新算法的優勢就體現了出來,新算法的誤差小于基于近鄰推薦算法。由于新算法只考察用戶共同評論過的物品,所有當數據稀疏度增加時,算法耗時并未隨之增加。在數據稀疏時,新算法的效率高于鄰域算法。
3 結論
當k取不同值時,推薦算法給出的結果不盡相同。我們可以通過大量數據訓練算法,找出對應最適合系統的k值,以求算法在精度方面達到系統的要求。總體來說,新算法在準確性和時效性方面有所提升。同時,也存在一些問題,如當鄰居用戶大量提升時,公式3、4中的<E:\知網文件\電腦\電腦01-02\電腦01\1xs201901\Image\image32.png>項會快速增加,導致用戶相似度趨近于1。此時我們需要對<E:\知網文件\電腦\電腦01-02\電腦01\1xs201901\Image\image32.png>進行求導,以減小數據范圍對推薦精度的影響。
參考文獻:
[1] 中國互聯網信息中心.第42次《中國互聯網絡發展狀況統計報告》[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] 弗朗西斯科·里奇,等,李艷民.推薦系統[M].機械工業出版社,2015.
[7] 王國霞, 劉賀平. 個性化推薦系統綜述[J].計算機工程與應用,2012, 48(7):66-76.
[8] Harper F M, Konstan J A. The MovieLens Datasets: History and Context[M].ACM, 2015.
[9] 朱郁筱,呂琳媛.推薦系統評價指標綜述[J].電子科技大學學報,2012, 41(2):163-175.
[10] 百度百科. Python(計算機程序設計語言)[EB/OL]. https://baike.baidu.com/item/Python/407313.