魏浩, 張偉, 郭新明
(咸陽師范學(xué)院 計算機學(xué)院, 陜西 咸陽 712000)
隨著電子商務(wù)的快速成長和網(wǎng)絡(luò)購物的迅速普及,如何使用戶在數(shù)量龐大的商品中快速、高效地找到他們感興趣的商品,是電子商務(wù)網(wǎng)站面臨的一個重大挑戰(zhàn)。推薦系統(tǒng)不需要用戶主動參與,能根據(jù)用戶以往的商品購買記錄,獲得用戶興趣,把用戶可能感興趣的商品進行推薦,滿足用戶的個性化需求[1-2]。
目前應(yīng)用最廣泛的推薦算法包括基于內(nèi)容的推薦算法和協(xié)同過濾(Collaborative Filtering,CF)算法,協(xié)同過濾算法使用用戶與商品的歷史交互數(shù)據(jù),并通過分析其他人的興趣偏好,建立當前用戶偏好模型,這就是“協(xié)同”的體現(xiàn),它基于存在一組興趣偏好相似的用戶群的假設(shè)。相比較基于內(nèi)容的推薦算法,協(xié)同過濾算法對音頻、圖像等難以提取特征的非結(jié)構(gòu)化對象有較好的推薦效果[3-4]。
協(xié)同過濾算法根據(jù)用戶群體社會化的特點,具有高度自動化、新興趣發(fā)現(xiàn)等優(yōu)勢,并且能夠?qū)Ψ墙Y(jié)構(gòu)化對象進行推薦,因此在推薦系統(tǒng)中被廣泛使用,但它存在稀疏性、冷啟動和擴展性等問題[5-7]。在電子商務(wù)系統(tǒng)中,由于用戶和商品數(shù)量的急劇增加,加之用戶缺乏對商品評分的主動性,使得用戶評分的商品數(shù)量只占很少的一部分,用戶—商品評分矩陣(表)非常稀疏,用戶—商品矩陣的高度稀疏將造成相似計算的很大誤差,進而影響推薦系統(tǒng)的推薦質(zhì)量和推薦性能[8-10]。
解決數(shù)據(jù)稀疏性問題的主要方法有:降維技術(shù)、評分矩陣預(yù)填充、多種特征融合、數(shù)據(jù)聚類和相似度改進算法[11-14]。文獻[15]采用奇異值分解技術(shù)和隨機梯度下降法填充稀疏矩陣,優(yōu)化用戶相似度,提高了推薦算法的有效性。文獻[16]首先提取項目屬性特征,并利用余弦相似度對評分矩陣的缺失值進行填充,然后通過對填充的矩陣執(zhí)行奇異值分解 (Singular Value Decomposition,SVD)算法,尋找隱性特征,建立隱語義模型。文獻[17]針對數(shù)據(jù)稀疏問題,選擇非精確拉格朗日乘子法對稀疏矩陣填充,對填充的矩陣使用SVD協(xié)同過濾算法進行推薦,提高了推薦質(zhì)量。
大多數(shù)推薦系統(tǒng)中,用戶評過分的項目很少,項目之間的共同評分更少,會使得計算項目間的相似度誤差較大,得到的項目近鄰集合也有偏差[18-19],SVD算法一般使用項目評分的平均值填充評分矩陣,平均值填充未考慮不同類別用戶對項目評分的差異性,因此會產(chǎn)生較大的誤差。針對這種情況本文提出了一種基于聚類預(yù)填充的SVD算法(Cluster Pre-filling SVD,CP-SVD),算法基于聚類的稀疏數(shù)據(jù)預(yù)處理方法,首先由用戶歷史評分和項目特征生成用戶—項目興趣矩陣,再聚類用戶并填充用戶—評分矩陣,通過填充后的用戶-評分矩陣,再使用SVD算法預(yù)測用戶對未評分項目的評分,提高預(yù)測的精度和推薦的準確度。
在一個推薦系統(tǒng)中,一般包含的項目數(shù)量十分巨大,而項目特征的個數(shù)要遠遠小于項目數(shù),例如Movielens-100k數(shù)據(jù)集,電影的數(shù)目有1 682部,而電影的類型只有19種,一部電影可以屬于一個或多個不同的類型,用戶—電影評分矩陣(用戶—項目評分矩陣)的數(shù)據(jù)稀疏度為0.937。改進的基于聚類的協(xié)同過濾推薦算法通過將用戶—電影評分矩陣轉(zhuǎn)化為用戶—電影類型興趣矩陣(用戶—項目特征興趣矩陣),使用用戶—電影類型興趣矩陣聚類用戶,并填充用戶—電影評分矩陣,大幅降低用戶—電影評分矩陣稀疏度。假設(shè)一個推薦系統(tǒng)中,包括N個用戶和M個項目,R為用戶—項目評分矩陣記作[ru,i]N×M,其中ru,i表示用戶u對項目i的評分;M個項目、Q個項目特征以及項目—項目特征矩陣V=[vi,f]M×Q,算法生成N個用戶對Q個項目特征的用戶—項目特征興趣矩陣T=[tu,f]N×Q。以Movielens-100k數(shù)據(jù)集為例,算法步驟描述如下。
(1) 數(shù)據(jù)讀入和預(yù)處理:讀入用戶對電影的評分集合,把用戶對電影的評分集合分成訓(xùn)練集train和測試集test兩部分,使用訓(xùn)練集部分生成用戶—電影評分矩陣R=[ru,i]N×M,讀入電影的類型描述集合,生成電影—電影類型矩陣(項目—項目特征矩陣)V=[vi,f]M×Q。
(4) 使用用戶—電影類型興趣矩陣T對用戶聚類:將矩陣T的每一行作為一個用戶—電影類型興趣向量,選擇K-均值聚類,設(shè)定聚類的個數(shù)k,進行聚類運算。
(7) 計算推薦準確率和召回率:依據(jù)給定TOP-N的N值生成推薦給用戶的電影集合top-N,計算推薦準確率和召回率。
實驗使用的編程語言是Python3.7,開發(fā)工具為Jupyter notebook,實驗程序還使用了兩個擴展程序庫NumPy和Pandas。NumPy是一個基礎(chǔ)性的Python科學(xué)計算庫,提供高維度數(shù)組與矩陣的計算能力,并提供大量方便用戶調(diào)用的函數(shù)庫[20]。Pandas是一個數(shù)據(jù)分析包,通過提供的標準數(shù)據(jù)結(jié)構(gòu)以及快速、靈活的操作,成為了Python環(huán)境下高效而強大的數(shù)據(jù)分析工具[21]。
實驗所使用的數(shù)據(jù)集是Movielens-100k,由943名線上電影觀眾針對1 682部電影共10萬條評分記錄組成。該數(shù)據(jù)集包含電影的類型描述、用戶信息和用戶對電影的評分3個數(shù)據(jù)集文件,電影類型有19種,用戶對電影的評分是1到5的整數(shù),每部電影至少被評價1次,每個用戶至少給20部電影評過分。原始數(shù)據(jù)隨機分成5份,每次將其中4份數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),另一份作為測試數(shù)據(jù),運行5次并將5次實驗結(jié)果的平均值作為最終的評測值。
實驗選擇3個推薦算法評價指標包括推薦精度(MAE)、準確率(Precision)以及召回率(Recall),使用這3個評價指標,將改進的基于聚類預(yù)填充的SVD算法(CP-SVD)與SVD算法以及傳統(tǒng)的基于項目的協(xié)同過濾推薦算法(Item-based CF,ICF)進行比較。ICF算法需要確定的參數(shù)是用戶K最近鄰的K值,SVD和CP-SVD算法共同的參數(shù)是保留的信息量δ,CP-SVD算法還需要確定聚類的個數(shù)k。
(1) CP-SVD算法聚類的個數(shù)k值取5、10、20、30、40,保留的信息量δ取值由0.8至1.0,CP-SVD算法的MAE在k值一定的情況下,隨δ值變化趨勢如圖1所示。
圖1 K取值從5到40時CP-SVD算法MAE比較
當k=5時,MAE值隨K值的變化曲線位于k等于10、20、30、40四個曲線的下方,說明CP-SVD算法的聚類個數(shù)k取值在5附近時,預(yù)測精度較高。
(2) 保留的信息量δ取值由0.8至1.0,CP-SVD算法聚類的個數(shù)k值取2至6生成的5條MAE值變化曲線及SVD算法的MAE值變化曲線,如圖2所示。
圖2 在K取值從2到6時CP-SVD算法MAE比較
從總體來看,k等于5時的曲線位于k等于其他值的曲線下方,說明CP-SVD算法聚類的個數(shù)k值取5時,算法預(yù)測精度高。
(3) 最近鄰數(shù)目K值由10到200,且為10的整數(shù)倍,ICF算法的MAE值隨用戶最近鄰數(shù)目K變化曲線,如圖3所示。
圖3 ICF算法MAE隨N值變化曲線
當K=30時,MAE值最小,MAE=2.716。
(4) TOP-N推薦的N值取值由10到200,且為10的整數(shù)倍,ICF最近鄰數(shù)K值取30,SVD和CP-SVD算法保留的信息量(δ)為0.99,且CP-SVD聚類個數(shù)K等于5,ICF、SVD和CP-SVD三種算法的預(yù)測準確率曲線和預(yù)測召回率曲線,如圖4、圖5所示。
圖4 三種算法準確率比較
圖5 三種算法召回率比較
CP-SVD算法的推薦準確率和召回率遠高于CFAASP算法;CP-SVD準確率和召回率隨N值變化曲線始終位于ICF算法曲線的上方,在N取值相同時,CP-SVD算法的準確率和召回率高于ICF算法。
本文使用Movielens-100k數(shù)據(jù)集,選擇了3個推薦算法評價指標,將改進的基于聚類預(yù)填充的SVD算法(CP-SVD)與SVD算法以及傳統(tǒng)的基于項目的協(xié)同過濾推薦算法(ICF)進行比較。由實驗得出聚類個數(shù)k=5時的CP-SVD算法的MAE值最小,且小于SVD算法;最近鄰K等于30時,ICF算法的MAE值最??;聚類個數(shù)k等于5、保留信息量(δ)等于0.99的CP-SVD算法的準確率和召回率,大于保留信息量(δ)等于0.99的SVD算法值及最近鄰K等于30的ICF算法。從總體來看,改進的基于聚類預(yù)填充的SVD算法(CP-SVD)預(yù)測精度、推薦準確率和召回率高于SVD算法以及傳統(tǒng)的基于項目的協(xié)同過濾推薦算法(ICF)。