李瑤
(天津大學數學學院,天津300350)
隨著社會的發展,高度信息化,推薦系統已經成為了一個很重要的研究領域,是一個預測用戶興趣的模型.平時生活中推薦系統有很多應用,比如電子商務網站可以利用推薦系統向用戶推薦可能想買的物品,視頻電影網站可以向用戶推薦其可能感興趣的電影視頻等[1].推薦算法其中有協同過濾、矩陣分解等等,矩陣分解基于評分矩陣來進行處理,為此在基于用戶的協同過濾模型基礎上,引進SVD分解后的svdprediction矩陣作為user-item-matrix應用于協同過濾模型,比單獨的SVD優化快速且簡便.所以本文在協同過濾算法的基礎上,引入奇異值分解優化特征,利用SVD分解后SVD-prediction矩陣作為user-item-matrix應用于協同過濾模型進一步利用模型,來提高準確性.
而且考慮到用戶不一定會評分,因為麻煩或其他因素,所以后期會對item本身所屬的類別賦以較大的權重,最后使模型更貼合實際生活.
協同過濾(Collaboration Filtering)算法[2]是推薦系統中最常用的一種算法,本文采用的是依據相似用戶的愛好對活動用戶進行推薦的思想,也被稱為基于用戶的協同過濾,其中如果根據用戶的評分數據尋找到與其相似的用戶,并以此借助相似用戶的愛好對其余用戶進行推薦的思想被稱為基于用戶的協同過濾.本質上是尋找數據集中的相似用戶來完成推薦[3],其原理類似于朋友推薦,簡單來說是利用某興趣相投、擁有共同經驗之群體的喜好來推薦用戶感興趣的信息,通過信息程度的回應(如評分),記錄下來以達到過濾的目的進而幫助別人篩選信息[3-4],比如通過對用戶喜歡的item進行分析,發現用戶A和用戶B很相似,用戶B喜歡了某個item,而用戶A沒有評價,那么就可以把這個item推薦給用戶A.依據用戶對物品的評分建立用戶評分矩陣(協同過濾需要使用到的用戶評價信息會被存儲在一個數據表中,該表可以被稱為用戶評分矩陣),矩陣的行數為系統中用戶的數量,列數為系統中物品的數量,沒有評分數據的默認為零;然后依據用戶評分矩陣計算相似度,用偏好等來進行運算[5].
整體流程構建如下:
1)收集用戶評分信息
首先下載需要的數據,進行預處理,例如電影的編號重新映射到從1開始,會便于后續的評分矩陣處理.
2)定于相似度指標并計算
歐式距離分數計算,提取搜尋用戶都評價過的電影的評分。
If:無共同評分的電影(Score=0)
Else:計算(rate1-rate2)的平方和的平方根皮爾遜系數(Pearson Correlation Coefficient).
同樣提取搜尋用戶都評價過的電影的評分,然后計算,其中計算公式

COV(X,Y)表示X,Y的協方差,構建useritemmatrix作為特征輸入,最后計算RMSE.
3)得出相似用戶和推薦列表
按照得分進行排序,把得分降序排列,可以得到k個相似用戶,本文設置的k為5,k可以按照需求來選取,然后去掉本身用戶評分過的電影,其余為推薦條目.
SVD分解(Singularly Valuable Decomposition)也為奇異值分解,奇異值是矩陣里的概念,一般通過奇異值分解定理求得.
奇異值分解定理:一個向量v是方陣A的特征向量,可以表示成下面的形式:Av=kv,這時候k被稱為特征向量v對應的特征值,一個矩陣的一組特征向量是一組正交向量.特征值分解是將一個矩陣分解成以下形式:A=USU-1,U是這個矩陣a的特征向量組成的矩陣,S是一個對角陣,每個對角線上的元素就是一個特征值.
設a為(m×n)階矩陣,記為Am×n,如若m≠n時,不能直接按照上面的來計算,此時令q=min(m,n).A×AT的q個非負特征值的算術平方根叫作A矩陣的奇異值.
對于一個實矩陣Am×n,如果可以分解為A=USVT,其中,U為(m×m)的正交陣,V為(n×n)的正交陣,S為(m×n)階矩陣.記S的前r×r階為S*,它為半正定對角矩陣,簡寫為

其中的a1,a2,…,ar稱為矩陣A的奇異值.對于實際的運用A=USVT.舉一個實際例子A6×3,來進行直觀說明

個矩陣U,S,如下

其中S=diag(4.679 2,2.199 7,2.065 6).
后期維度增多后,本文會對SVD進行改進為HOSVD,簡單介紹一下最簡單的矩陣展開,例如將一個N維張量展開成為一個矩陣,按照不同的維度重新排列成一個矩陣,例如一個2×3×3的張量可以被展開為3×6或者2×9的矩陣.就是將張量按照不同的維度重新排列成一個矩陣,將這一過程稱作張量的n—模矩陣展開,暫時不做過多說明.
分別在一組自行構建的數據上進行模擬訓練,進行說明,后面在MovieLens數據集基礎上,再選取一小部分不完全數據,進行驗證(可以用在網站初期,或者新用戶信息很少的情況下,在不完善的信息下,對幾個算法進行比較評估,可以把大數據應用到比較好的算法模型上,得到推廣),見表1.

表1模擬數據Tab.1 Analog data
主要的實驗數據示意圖如表2所示.

表2小數據數據情況Tab.2 Small data sets
對自行構建的數據集進行聚合,可以看到選取的數據的關聯度,沒有完全的離散,關聯度也不是特別高,符合新用戶初期的使用情況:Number of clusters in input data=7,聚合后數據中心集合還不算太分散.同時給出統計后的小數據集數目,如圖1和圖2.

圖1小數據集的分布示意圖Fig 1 Distribution of small data sets

圖2小數據集的聚合情況示意圖Fig.2 Aggregation of small datasets
首先對數據進行預處理,在計算過程中,把數據分成訓練集和測試集(不適用于虛擬數據集上,因為一方面只是為了構建流程,另一方面是數據很少,沒有這個必要,所以用在MovieLens小數據集及之后的驗證數據集),利用train_test_split中參數test_size設置為0.3,表示把70%劃分為訓練數據,30%劃分為測試數據(train,test=train_test_split(data,test_size=0.3)),利用測試集進行最后的評估,衡量其結果的好壞.
其次分別進行上面提到的相似度指標計算,構建出傳統的協同過濾模型,最后得到的相似用戶.
對排在前面用戶中的電影來進行推薦,記錄此時的結果,并計算傳統協同過濾模型下的RMSE.
經過SVD處理后,重新作為user-item-matrix data輸入協同模型處理.
1數據預處理
item編號重新映射到從1開始的序列,與上面的協同過濾模型處理方式相同.
2隨機劃分數據集
依然利用train_test_split中參數test_size設置為0.3,70%劃分為訓練數據,30%劃分為測試數據.
3構建user_item_matrix
該矩陣每一行代表一個user,每一列代表一個item,矩陣中的數字代表評分.
4對user_item_matrix矩陣進行SVD分解
得到SVD_prediction矩陣,作為新的user_item_matrix矩陣.
5然后繼續進行協同過濾模型的步驟,最后計算模型的RMSE,進行評估.
對虛擬數據集,根據流程里的公式,來計算相關性,以編號為1的用戶為例:

按照相似性排序,并構造user-item-matrix,同時打亂順序,進行處理,如表3.

表3對虛擬數據集構建user-item-matrixTab.3 Building user item matrix for virtual datasetsuser-item-matrix
對原始數據來說,對比一下SVD-prediction(表4)和CF-prediction(表5)的預測,結果分別如下.

表4對虛擬數據集進行SVD-prediction處理結果Tab.4 SVD-prediction result of virtual data set

表5對虛擬數據集進行CF-prediction處理結果Tab.5 CF-prediction result of virtual data set
接下來對MovieLens小數據集進行驗證并評估結果的好壞.針對此數據集,同樣以編號為1的用戶為例,計算出來的相似用戶6,5,4,8,2,推薦的電影列表如表6.

表6相似用戶列表Tab.6 List of similar users
對排在前面用戶中的電影來進行推薦,在這里選取前五個進行列舉,推薦電影列表如表7.

表7推薦電影名單Tab.7 List of recommended movies
對推薦系統的研究一個重要的環節是如何評價一個推薦算法的好壞[6].本文以RMSE(Root Mean Squared Error)為評估指標將張量分解算法與傳統協同過濾算法進行實驗比較.在有限測量次數中,均方根誤差常用式(1)表示,

RMSE評估指標見圖3.

圖3 RMSE指標評估結果Fig.3 RMSE index evaluation results
對比傳統純協同過濾或單獨的SVD分解,RMSE值有了明顯的降低
為了進一步驗證其誤差有明顯降低,把數據量擴大,因為當數據集規模很大時,SVD分解會降低程序的速度,對后臺離線運行了結果.數據的示意圖見圖4.

圖4數據的分布示意圖Fig.4 Distribution of data
同時給出統計后的數據集數目,見表8.
同樣得出推薦列表,因為重點是要驗證誤差是否有降低,所以針對數據集,同樣以編號為1的用戶為例列表直接簡單列出,見表9.

表8數據集數據Tab.8 Data sets

表9相似用戶列表Tab.9 List of similar users
電影推薦結果為,[(Meet the Parents(2000)(Clockwork Orange,A(1971)(Wild Tales(2014)),(Horrible Bosses(2011)),(Cast Away(2000)),(Beethoven(1992)),(Along Came Polly(2004)),(50 First Dates(2004)),(Shining,The(1980)),(Stand byMe(1986)]
評估結果,見圖5.

圖5 RMSE評估指標結果Fig.5 RMSE evaluation index results
兩次驗證的結果表明,從實驗數據來說,隨著數據的增多,集中填充數據的增多,推薦的誤差有一定減少,而且隨著數據增多,誤差減小量也增大,說明在傳統協同過濾模型的基礎上,對useritem-matrix進行SVD分解處理,再作為訓練數據,輸入協同過濾模型,會顯著降低誤差.
本文通過驗證的結果得出,在協同過濾算法的基礎上,引入奇異值分解優化特征,利用SVD分解后svdprediction矩陣作為user-item-matrix應用于協同過濾模型進一步利用訓練模型,這個改動會顯著降低誤差.協同過濾推薦算法作為是推薦系統中使用較廣泛的算法之一,因此一點點改進都是有必要的.由于推薦系統存在冷啟動問題,例如在初期新用戶信息很少的情況下,或者在不完善的信息下,考慮到用戶不一定會評分,也不一定愿意花時間留下太多信息,現實中用戶很多時候并不能精確描述自己的需求信息,這就要用到需要推薦物品的屬性,所以后期會對item本身所屬的類別,屬性賦以較大的權重,最后使模型更貼合實際生活[7].而且之后數據量也會增大,可以考慮是否利用聚類處理數據量的增大所以接下來打算引入時間序列、類別、標簽等維度,利用張量分解[8-9],來建立用戶、物品、評分,時間,類別,標簽等多維度的推薦系統[10-11].