張柏林
摘要:數據爆炸時代,信息過載已成為社會性問題。基于物品的協同過濾算法設計并實現一款Python軟件包ItemCollab,可有效解決這一問題。ItemCollab包括數據處理、物品推薦和質量評價3個模塊。數據處理模塊實現數據導入、稀疏度分析和訓練集劃分功能;物品推薦模塊實現了目前主流的幾種推薦算法,質量評價模塊實現對推薦質量的圖表展示功能。ItemCollab擴展性好,便于調用,可幫助用戶構建自己的個性化推薦系統。
關鍵詞:協同過濾;個性化推薦;Python;軟件包;數據挖掘
0引言
互聯網數據呈指數級爆炸式增長,信息過載問題隨之而來。推薦系統是解決信息過載的有效途徑之一,它依據用戶興趣從低價值密度的龐大數據中甄別出有效信息,從而提供個性化推薦服務。利用一類常見的推薦方法——基于物品的協同過濾,實現一個Python軟件包,使系統開發者不必過多關注算法實現細節,僅通過接口調用就可方便簡潔地構建自己的個性化推薦系統。
1數據處理模塊
此模塊主要有數據集導入、稀疏度分析和訓練集測試集合劃分3個主要功能,以ItemCollab內置的數據集MovieLens為例,運行效果如圖1所示。
1.1數據導入
MovieLens(https://grouplens.org/)是明尼蘇達大學GroupLens研究項目提供的具有多種規模的數據集。其中最小規模包含943個用戶對1 682部影片的10萬評分數據,評分區間在1~5分之間,ItemCollab選擇這一規模數據作為內置示例數據集。
ItemCollab通過loadMovieLens(path)來導入內置數據集,同時對外提供接口loadDatasets(path),參數path指定數據所在路徑,使用戶導入CSV格式的自身數據集。
1.2稀疏度分析
數據稀疏度通常用式(1)進行計算。數據集的稀疏度可作為下一步選擇合適的推薦算法的依據。
1.3訓練集劃分
對同一用戶所評分的所有物品按原始數據中的順序,前80%作為訓練集,余下20%作為測試集。訓練集和測試集的劃分是質量評價模塊功能實現的前提。
2物品推薦模塊
此模塊利用幾種常見的基于物品的協同過濾算法來生成推薦,這些算法包括調整后的余弦相似度;基于Slope One的各種改進算法,如加權Slope One、雙極Slope One以及SVDSlope One。
在實際應用中,系統的用戶和資源分布情況不同,不同的推薦算法表現也不同。調整后的余弦相似度算法在評分結果中減去每個用戶給出的平均評分,可以很好地處理不同用戶的評分尺度問題。Lemire和Maclachlan提出的標準Slope One算法根據已有評分和兩兩物品評分偏差的平均值來預測用戶對新物品的評分,在物品評分矩陣較為稠密時表現良好。其主要優點是簡潔,易于實現且運算效率高,但沒有考慮矩陣的稀疏性,推薦結果易受用戶數量、用戶偏好的影響。加權SlopeOne算法將用戶數量作為權重,平衡了其他物品對目標物品的影響。雙極Slope One算法考慮用戶偏好問題,將用戶對物品的厭惡程度也加入評價體系H。SVD Slope One算法通過矩陣奇異值分解,降低評分矩陣的稀疏度,從而得到更準確的推薦結果。
總的來說,這些算法各有利弊,在不同的數據集上有不同的性能和準確度表現,用戶應根據數據處理模塊得到的數據集性質,選擇合適的算法。下面以調整后的余弦相似度為例,敘述該算法的數學理論、算法流程及運行效果。
2.1數學理論
調整后的余弦相似度引入了歸一化的思想,它主要包括用于衡量兩兩物品間相似程度的相似度計算式(2),用于對評分結果數值變換的歸一化式(3),以及用于預測用戶對某一物品評分結果的評分預測式(4)。式中,s(ij)表示物品i和物品j的相似度;u表示所有同時對j和f進行過評分的用戶組成的集合;R表示用戶u對i的評分;R表示u對所有物品評分的平均值。在分子中,對于每個同時對2個物品評分的用戶,將2個物品歸一化評分結果相乘,然后對結果求和。在分母中,對i的歸一化評分結果的平方求和,然后對j進行相同處理,最后求它們乘積的平方根。式中,MaxR,/Ming分別表示當前評分體系中的最大值和最小值;R表示某—物品的評分結果;NR表示R的歸一化結果。R原本的取值范圍為,經過式(3)處理后,R的歸一化結果NR的取值范圍變為[-1,1]。式中,p(u,i)表示預測出的用戶u對物品i的評分;M表示u的所有評分物品中每個和j得分相似的某—物品,這里“相似”指的是在根據式(2)求出的相似度矩陣中存在M和i的一個得分值,sinilae(i)表示所有這些物品組成的集合。s表示i與M的相似度,可由式(2)計算出,NR表示u對M的歸一化評分結果,由式(4)計算出。
2.2算法流程
輸入:待預測用戶u,目標物品i,評分結果數據集,當前評分體系最值;
輸出:用戶u對目標物品j的預測值p(u,i)。
①利用s(i,j)計算每2個物品之間的余弦相似度,得到物品的相似度矩陣;
②利用NR式對評分結果數據集進行歸一化處理,得到物品的歸一化評分矩陣;
③根據式(2)和式(3)得到的矩陣,利用p(ui)求出u對j的歸一化預測評分;
④逆向使用NR式,將式(4)得到的評分轉化為正常評分區間內的數據,即為最終結果。
2.3運行效果
假設—個評分結果數據集如表1所示,第一行表示userl對物品2,3,4,5的評分別是3,5,4,1,null表示userl沒有對物品1評分。考察user1對物品1的預測評分,ItemCollab的運行效果如圖2所示。
3質量評價模塊
此模塊實現對物品推薦模塊所選算法的質量評價,將測試集視為未知,利用訓練集的數據預測測試集中物品的評分,然后將預測評分集合與測試集實際評分集合按統計精度度量方法進行評價。用戶可依據此模塊的度量結果作為物品推薦模塊算法選擇的依據。
3.1度量方法
統計精度度量方法的平均絕對誤差(Means AbsoluteError,MAE)由于更易于理解并且能夠更直觀地對推薦算法進行度量,因此選用這一指標作為度量標準。假設對于物品i,其預測評分為p,實際評分為q共n個物品,則MAE定義如式(5)。MAE值越小,推薦質量越高。
3.2運行效果
對軟件包內置數據集MovieLens,將物品推薦模塊提供的所有算法均進行一次質量評價,結果如圖3所示,可以看出當數據集較為稀疏(SP=6.30%)時,SVD Slope One表現最好。
4結束語
協同過濾在推薦系統中最為常用,它的根本思想是根據相似的用戶群體或物品群體來向目標用戶推薦其可能感興趣的物品資源。ItemCollab通過實現幾種常用的基于物品的協同過濾算法,根據相似物品群體完成個性化推薦任務,幫助系統開發者構建自己的個性化推薦系統。未來ItemCollab還要繼續擴展,將更多的推薦算法加入其中,從而適應不同類型的數據集,使推薦效果更好。