葉 飛 邊 琳 楊林楠
(1.云南農業大學大數據學院云南省高校農業信息技術重點實驗室 昆明 650201)(2.云南農業大學水利學院云南省高校農業遙感與精準農業工程研究中心 昆明 650201)
近年來,隨著互聯網規模的擴大,信息技術與應用的快速發展,如何從過載的信息中篩選用戶喜好和興趣數據成為了影視、音樂、新聞、書籍、電商平臺亟待解決的難題?;趨f同過濾算法的個性化推薦技術具有高效性、簡單性、準確性特點,協同過濾算法是當前個性化推薦系統應用中效果做好的推薦算法[1]。推薦系統在應用過程中,由于大部分用戶僅對部分項目進行評分,導致評分矩陣十分稀疏[2],推薦算法的準確度較低。為解決數據稀疏性問題,SVD 算法[3](Singular Value Decomposition,奇異值分解)用于解決用戶-項目矩陣中的數據稀疏性問題,通過將高維的稀疏評分矩陣降維,挖掘矩陣中特征值,補全矩陣中的缺失值,用預測值對未評分項目進行填充。SVD++[4]算法將用戶的歷史評分行為矩陣加入到SVD算法中,提高了算法的準確度。在SVD++算法對稀疏的評分矩陣進行填充后,再通過改進的 Slope One[5~6]算法對缺失值進行二次預測,再次提高預測的準確度。
因此,本文提出SVD++算法和融合項目相似度Slope One 算法結合的混合推薦算法通過調整預測評分,從而進一步提高推薦的準確度。實驗結果表明,與原始的Slope One算法和SVD 算法相比,混合算法的推薦誤差較小。
協同過濾(Collaborative filtering)[7]推薦算法是目前學者們研究較多的推薦算法之一,協同過濾分為兩類,一類為基于內存的協同過濾另一類為基于模型的協同過濾?;趦却娴膮f同過濾需要在內存中存儲較大的相似度矩陣,經過算法處理提供推薦。它包含基于項目(item-based collaborative filtering,IBCF)和基于用戶(user-based collaborative filtering,UBCF)?;谀P停?]的協同過濾及為機器學習和數據挖掘的模型,它包括極大熵模型、馬爾科夫模型、概率相關模型、關聯規則模型、回歸模型、貝葉斯網絡模型和奇異值分解(SVD)聚類模型。協同過濾算法的原理是通過計算“用戶-項目”評分矩陣相似度對目標用戶做推薦。
SVD 可以將高維用戶項目評分矩陣通過奇異值分解降維成低維用戶、項目的特征向量矩陣,它是線性代數中的矩陣分解方法。用SVD 方法對評分矩陣進行分解,通過奇異值挖掘潛在語義特征值進行推薦。傳統的SVD算法[9]將評分矩陣分解為3個低維矩陣,為

式(1)中,A 為m×n 的原始評分矩陣,U 為m×m 的正交矩陣;V 為 n×n 的正交矩陣;Σ為 m×n 的對角矩陣。該公式表示矩陣A 的向量從V 按照Σ在各方向上的A的奇異值倍數進行伸縮旋轉到U。
根據推薦系統的預測評分的實際需求,對式(1)進行簡化:


根據式(2)、(3)可以將矩陣A轉換為

根據用戶項目的評分數據集可以構建評分矩陣R,其中矩陣中的行為用戶,列為項目,矩陣中的值代表評分值。將評分矩陣R進行奇異值分解,為

式(5)中u 表示用戶數量,i 代表項目數量,k 代表選取的隱形特征值數。SVD 算法通過矩陣R中過已有數據對P、Q矩陣進行訓練,然后使用訓練好的p、q矩陣對R矩陣進行擬合從而實現對未評分項進行評分預測,計算公式為

式(6)中表示矩陣P的某一行數據,qi表示矩陣Q的某一列數據,r^ui表示用戶u 對項目i的評分預測。
在實際模型中,用戶評分和商品得到的評分標準各不相同,用戶、項目各自本身包含特有屬性[10]。引入參數u表示在訓練集中所有已有評分數據平均數;參數bu表示用戶特有屬性,意義為特殊用戶的評分習慣與項目本身關聯性較小。綜合以上實際背景,對SVD公式進行改進為以下形式:

為進一步優化評分預測的準確度,SVD模型將用戶的歷史行為記錄擴展到用戶的特征矩陣中,構建成為 SVD++[11]模型。
根據項目的協同過濾算法(IBCF)[12]關于用戶歷史行為數據對評分預測的計算公式:

式(8)中N(u)表示用戶u 的歷史行為數據,它包含用戶評分項目和歷史瀏覽記錄的項目集。N(u)的次方是一個經驗值。fm,n表示項目間的相似度矩陣,它可以分解成向量積的形式,即因此公式可以轉化為

將歷史用戶行為記錄模型和SVD模型相結合,從而得到SVD++模型,該模型表示為

為避免參數對SVD++模型的過擬合,可以將式(9)進行qi對xi的置換處理,經過整合式(10)可得:

本文采用隨機梯度下降算法更新SVD++模型中相關參數,隨機梯度下降法通用的表達
式為:y(x+1)←y(x)+?*h(x) ,其中 ? 為學習速率,可以是較小的常數,也可以是一個函數表達式;h(x)是y(x)的梯度;x為迭代次數。為保留原始評分矩陣數據的真實性設定奇異闕值γ[13],通常γ值取成0.99。
SVD++算法
輸入:訓練數據集R′,測試數據集R″,閾值γ,迭代次數n,學習速率?,隱特征數k,正則化系數λ。
輸出:預測填充結果數據集。
1)初始化特征矩陣P和Q,使向量pu,qi的值為random(0,1)/sqrt(k),并把偏置項bu,bi和向量yj中的值初始化為0。
2)根 據 預 測 評 分和 實 際 評 分ru,i通 過 公 式計算誤差值。
3)梯度下降法的最小化損失函數為

式(12)中前半部分表示部分,后半部分表示防止訓練出現過擬合的正則化部分。最小化損失函數通過對特征變量bu,bi,pu,qi和yj求偏導,得到特征變量的梯度向量,沿著梯度方向更新特征變量,直到梯度向量趨向于零。特征變量的迭代更新公式為

通過更新得到上述特征參數,執行步驟2)判斷誤差eu,i是否小于閾值γ,若小于γ則停止訓練,否則跳到步驟2)。
通過訓練得到的參數,對測試數據集R″中未評分項進行預測評分,然后進行填充,輸出填充預測結果的評分矩陣。
通過重復大量實驗調整參數n,?,k,λ使得算法最優,SVD++預測的精準度達到最高。
本文采用項目相似度,常用的相似度算法為歐式距離相似度、余弦相似度、修正余弦相似度[14]、Pearson相似度[15]和Jaccard相似度。SVD++算法對評分矩陣做了初步的數據填充,數據稀疏性大大降低,采用修正余弦相似度和Pearson 相似度的權重計算融合相似度,該融合相似度的值即為改進Slope One算法中的權值。
余弦相似度通過改進用戶沒有考慮評分尺度問題,計算相似度時減去用戶對項目的平均評分,從而達到去中心化的目的。

式(14)中ru,i,ru,j分別表示用戶u對項目i,j的評分,分別表示所有用戶對項目i,j評分的平均值。
Pearson 相似度是基于Pearson 相關系數計算項目間的相似度,Pearson 相關系數反映變量間的線性相關性程度,當兩個變量線性關系增強時相關系數趨向于1 或者-1。Pearson 相關系數大于0 時變量正相關,小于0時負相關。

式(15)中ru,i,ru,j分別表示用戶u對項目i,j的評分,表示同時對項目i和j都評分的用戶集合Ui,j對項目i的評分平均值,表示同時對項目i和j都評分的用戶集合Ui,j對項目j的平均值。
針對上述提到的修正余弦相似度和Pearson 相似度可以通過引入權重的方式進行融合,計算出最終的項目相似度。

θ的取值范圍為[0,1],調整θ參數即為設置相似度的權重,通過測試數據集試驗選取適當的值,使得提高推薦的準確度。
Slope One 算法是一種基于線性回歸的項目評分的算法,應用公式f(x)=x+b來預測評分,x表示評分值,b為項目間的評分偏差。計算項目i和j之間的偏差公式為

ru,i,ru,j表示用戶u對項目i,j的評分,Si,j表示同時對項目i,j評分的用戶集合,| |Si,j表示集合Si,j中用戶數。
根據偏差式(17)可以轉化為用戶u對項目i的評分預測公式為

S(u)表示用戶u評分的項目集合,S(u)-{i} 表示用戶u與項目i同時評分的項目集合。
加權Slope One 算法[16]對評分矩陣中缺失值進行二次預測,進一步提升推薦的準確性,計算得到最終的評分矩陣。進行Slope One 算法改進時使用的評分矩陣為填充完整的評分矩陣,Si,j就是完整的用戶集U。將融合相似度sim(i,j)加入到Slope One算法中,得到改進Slope One公式為

本文S(u)-{i} 集合選取相似度鄰近集合中N個最大的項目集合。
改進Slope One算法
輸出:預測評分pre(u,i)和最終填充矩陣Ri,j。
1)設定大小合適的w組成S(u)-{i} 項目集合;
3)根據式(19)使用相似度鄰近集合最大值集合S(u)-{i} 、項目相似矩陣Kn,n中項目相似度值和項目偏差值deνi,j求得pre(u,i);
4)輸出pre(u,i),并使用pre(u,i)更新評分矩陣,輸出最終評分矩陣Ri,j。
實驗數據采用美國Minnesota大學公開的MovieLens數據集,本文選用100K 數據集包含943個用戶,1682 個項目,100000 條評分記錄,數據稀疏度為0.937。實驗過程中為避免隨機性對實驗結果產生影響采用五折交叉法,80%的評分數據集作為訓練集,另外20%的評分數據集作為測試集。
實驗使用均方根誤差(Root Mean Squared Error,RMSE)和平均絕對誤差(Mean Absolute Error,MAE)作為預測評分精準度評價指標。
1)平均絕對誤差(Mean Absolute Error,MAE)
MAE 用來衡量所有用戶對于項目的預測值和真實值差的平均值,MAE 值越小,預測精度就越高。

式(20)中,ru,i表示用戶u對項目i的實際評分,表示用戶u對項目i的預測評分,N表示項目集,|N|表示項目集的大小。
2)均 方 根 誤 差(Root Mean Squared Error,RMSE)
RMSE 作為預測值精準度的評價指標,RMSE值越小,預測值精準度越高。

6.3.1 SVD++模型中訓練迭代次數實驗
通過實驗研究SVD++模型中訓練迭代次數n的大小對評分矩陣預測準確率的影響,實驗結果如圖1所示。

圖1 不同訓練迭代次數下RMSE的值
圖中橫坐標為訓練的迭代次數,縱坐標為RMSE 的值。分析本圖發現訓練迭代次數在25 時趨向穩定,所以本文SVD++模型訓練迭代次數n 選用25。
6.3.2 SVD++模型中隱形特征數實驗
本文實驗研究SVD++模型中隱形特征數k 的大小對評分矩陣預測準確率的影響,并確定效果最好的隱形特征數。實驗結果如圖2所示。

圖2 不同隱形特征數下RMSE的值
圖中橫坐標為隱含特征數,縱坐標為RMSE 的值。分析發現隱形特征數在80 時趨向穩定,所以本文SVD++模型隱形特征值k選用80。
6.3.3 相關算法對比試驗
為驗證SVD++與改進Slope One 混合算法的精準性,本文選取SVD Slope One算法、加權Slope One算法兩組組模型進行對比,分別測試評分矩陣測試集的MAE 的值??紤]到項目的相似度鄰近集合最大值W對推薦精準度的影響,本文將三組模型結合鄰近集合最大值W進行實驗,結果如圖3所示。

圖3 不同鄰近集合最大值W與三種算法MAE值
實驗結果表明,本文提出的SVD++與改進Slope One 混合算法模型推薦效果最佳,MAE 值最小。鄰近集合最大值W 在到100時,MAE值趨向穩定,推薦效果較好。SVD++與改進Slope One 混合算法較SVD Slope One 算法、加權Slope One 算法的MAE值提升了2.89%和6.87%。
本文針對傳統協同過濾算法存在評分矩陣數據稀疏性問題提出SVD++算法對缺失評分數據進行預測評分并進行填充,針對稀疏矩陣填補空值過于單一提出在初步填充后使用改進Slope One 算法進行二次預測,項目間的相似度計算本文提出融合相似度方法,提高推薦的精準度。下一步研究的方向為解決冷啟動問題和有效地減少算法計算時間以及有效節約系統計算資源。