1. 程式人生 > >推薦系統——基於降維的近鄰協同

推薦系統——基於降維的近鄰協同

降維方法能夠同時提高近鄰方法的質量和效率。尤其是在稀疏矩陣中,即當兩個使用者共同評價過的物品很少,也能夠計算其低維潛在向量之間的距離。由於降維能夠根據潛在因子提供稠密的低維表示。因此,這種模型被稱為潛在因子模型。包括:

(1)建立資料的降維表示可以基於行的潛在因子也可以基於列的潛在因子。換句話說,對資料的降維表示是將物品的維度或使用者的維度壓縮成潛在因子。這種降維表示能夠緩解基於近鄰模型中由於稀疏性帶來的問題。依據被壓縮因子的不同維度,降維表示既能用於基於使用者的近鄰演算法,也能用於基於物品的近鄰演算法。

(2)對行空間和列空間的潛在表示是同時確定的。在不使用基於近鄰的方法時,這種潛在表示被用於重建整個評分矩陣。

為了便於討論,以基於使用者的協同過濾方法為例。基於使用者的協同過濾方法的基本思想是利用主成分分析法將m×nm\times n的矩陣R\mathbf R轉化到更低維的空間中。得到的矩陣R\mathbf R'

是一個m×dm\times d的矩陣,且dnd\ll n。因此,代表使用者評分的每一個(稀疏的)nn維向量被轉化為低維的dd維向量。而且,在原始評分向量不同,每一個dd維向量都是完全確定的。當表示每位使用者的dd維向量都確定之後,我們就用降維後的向量來計算目標使用者和其他使用者的相似度。在降維表示上的相似度計算更具有健壯性,因為新的低維向量是完全確定的。而且由於低維向量維度較低,相似度的計算也更加高效。在低維空間中,簡單的餘弦或點積就足以計算相似度。

問題: 如何計算每個資料的低維表示? (1)類SVD方法;(2)類PCA方法

這裡以類SVD方法為例,做出解釋說明。

第一步

,填充m×nm\times n不完全矩陣R\mathbf R中的未知項。方法:(1)以對應行的平均值(即對應使用者的平均評分)作為未知項的估值。(2)用列的平均值(即對應物品的平均評分)作為估值。結果表示為Rf\mathbf R_f.

第二步,計算n×nn\times n的物品相似度矩陣S\mathbf SS=RfTRf\mathbf S=\mathbf R_f^T\cdot\mathbf R_fS\mathbf S為半正定的。

為了確定SVD的控制基向量,我們對相似度舉證S\mathbf S施行如下的對角化:S=PΔPT\mathbf S=\mathbf{P\Delta P^T}

這裡,P\mathbf P是一個n×nn\times n的矩陣,其列包含S\mathbf S的正交特徵向量。Δ\mathbf\Delta是一個對角矩陣,其對角線上是S\mathbf S的非負特徵向量。令Pd\mathbf P_dn×dn\times d的矩陣,僅包含P\mathbf P的最大的dd個特徵向量對應的列。那麼,矩陣之積RfRd\mathbf R_f\mathbf R_d就是Rf\mathbf R_f的低維表示。注意,由於Rf\mathbf R_fm×nm\times n的矩陣,Pd\mathbf P_dn×dn\times d的矩陣,所以降維表示RfRd\mathbf R_f\mathbf R_d的維度為m×dm\times d。因此這時mm個使用者每個都能夠在dd維空間內表示。這樣的表示被用於決定每位使用者的同組群體。

處理偏差

注意,矩陣Rf\mathbf R_f是由不完全矩陣R\mathbf R以行或列的均值填入未知項得到的。此方法會引起偏差的。

下表為12個使用者對3部電影的評分(1~7),假設使用PCA降維,需要估計協方差矩陣。假設未知值用列的均值代替。

使用者索引 Godfather Gladiator Nero
1 1 1 1
2 7 7 7
3 3 1 1
4 5 7 7
5 3 1
6 5 7
7 3 1
8 5 7
9 3 1
10 5 7
11 3 1
12 5 7

顯然,《Gladiator》和《Nero》之間的關聯度非常高,因為在已有的使用者評分中,它們的評分結果非常相似。《Godfather》和《Gladiator》之間的關聯似乎不是很明顯。但是,有很多使用者沒有對《Nero》做出評分。由於《Nero》的平均得分為(1+7+1+7)/4=4,所以這些未知評分被4給代替。這些新項的加入明顯降低了《Gladiator》和《Nero》之間的協方差。然而新新增的項對《Godfather》和《Gladiator》之間的協方差沒有影響。填上未知評分後,3部電影中每對電影的協方差估計如下:

Godfather Gladiator Nero
Godfather 2.55 4.36 2.18
Gladiator 4.36 9.82 3.27
Nero 2.18 3.27 3.27

根據上面的統計,《Godfather》和《Gladiator》之間的協方差大於《Gladiator》和《Nero》之間的協方差。這看上去貌似不怎麼對,因為在原始表中,《Gladiator》和《Nero》的評分在兩者都已知的評價中是一樣的。因此,《Gladiator》和《Nero》之間的協方差應該更高。這個偏差可能是因為平均值填充未知項導致的。矩陣中未知項的比例越大,平均填充技術的偏差越大。

(1) 極大似然估計

概念重構法提出使用概率技術,比如EM演算法來估計協方差矩陣。假設資料符合生成模型,即把已知項看成是生成模型的輸出。對協方差矩陣的估計可以看作是生成模型引數估計的一部分。

方法:計算協方差矩陣的最大似然估計。每對物品之間的協方差僅使用已知項進行估計。也就是,使用者在某對物品上做出評價,其協方差可計算,但當沒有使用者在一對物品上做出共同評價時,協方差被估計為0。使用這種方法,得到的協方差矩陣為:

Godfather Gladiator Nero
Godfather 2.55 4.36 8
Gladiator 4.36 9.82 12
Nero 8 12 12

這種情況下,立刻可以看出《Gladiator》和《Nero》之間的協方差幾乎是《Godfather》和《Gladiator》之間的協方差的3倍。而且,《Nero》的方差幾乎是原始估計的3倍,並是所有電影中最大的。這個例子說明修正偏差在某些情況中可以有非常明顯的效果。矩陣中未知項的比例越大,平均填充技術的偏差就越大。因此,改良的方法只利用已知項計算協方差。雖然這種方法並不總是有效,但是它比平均填充更加高階。降維後的n×dn\times d的基矩陣Pd\mathbf P_d通過選擇協方差矩陣的前dd個特徵向量計算得到。

(2) 不完全資料的直接矩陣分解

上面所提方法的不足:無法解決評分矩陣過度稀疏的問題。

方法:矩陣分解法

未完待續。。。

參考文獻: Charu C. Aggarwal 著, 推薦系統原理與實踐