矩陣填充與矩陣分解的區別是什麼?
矩陣填充(Matrix Completion)與矩陣分解(matrix decomposition/factorization)應該是不同的概念。但是為什麼在協同過濾中只講矩陣分解呢,並且有的說協同過濾本質是矩陣填充。
謝邀,區別很簡單。
已知一個部分可觀察的矩陣M。
矩陣補全(Matrix Completion)目的是為了估計矩陣中缺失的部分(不可觀察的部分),可以看做是用矩陣X近似矩陣M,然後用X中的元素作為矩陣M中不可觀察部分的元素的估計。
矩陣分解(Matrix Factorization)是指用 A*B 來近似矩陣M,那麼 A*B 的元素就可以用於估計M中對應不可見位置的元素值,而A*B可以看做是M的分解,所以稱作Matrix Factorization。
顯然,通過以上描述可知,矩陣分解可以用於矩陣補全任務。此外,做矩陣分解也可以用於分解一個完全觀察的矩陣,比如通過分解來對一個完全觀察的矩陣做有損壓縮和低維表示等等。而且,矩陣補全也並不總是採用分解的方法。
題目中提到『但是為什麼在協同過濾中只講矩陣分解呢』,推薦中的協同過濾顯然也可以用非分解的矩陣補全方法。
注意:上面提到了『近似』,這個近似的方式是有多種的,有各種不同的loss和不同的表達『近似』的建模方法。矩陣填充是一個task,矩陣分解是一類operation。
在推薦系統里,如果有評分矩陣M,其中的每個元素(i, j)可存在可缺失,存在時代表用戶i對商品j的評分,那麼當我們基於協同過濾來推薦時,這個推薦問題可以較好地歸約到矩陣填充這個task上來。
這是因為協同過濾本質上是考慮大量用戶的偏好信息(協同),來對某一用戶的偏好做出預測(過濾),那麼當我們把這樣的偏好用評分矩陣M表達後,這即等價於用M其他行的已知值(每一行包含一個用戶對所有商品的已知評分),來估計並填充某一行的缺失值。若要對所有用戶進行預測,便是填充整個矩陣,這是所謂「協同過濾本質是矩陣填充」。
那麼,這裡的矩陣填充如何來做呢?矩陣分解是一種主流方法。這是因為,協同過濾有一個隱含的重要假設,可簡單表述為:如果用戶A和用戶B同時偏好商品X,那麼用戶A和用戶B對其他商品的偏好性有更大的幾率相似。這個假設反映在矩陣M上即是矩陣的低秩。極端情況之一是若所有用戶對不同商品的偏好保持一致,那麼填充完的M每行應兩兩相等,即秩為1。
所以這時我們可以對矩陣M進行低秩矩陣分解,用U*V來逼近M,以用於填充——對於用戶數為m,商品數為n的情況,M是m*n的矩陣,U是m*r,V是r*n,其中r是人工指定的參數。這裡利用M的低秩性,以秩為r的矩陣M"=U*V來近似M,用M"上的元素值來填充M上的缺失值,達到預測效果。
之所以說矩陣分解是一類operation,是因為上述的低秩矩陣分解只是矩陣分解的一種,為人熟知的矩陣分解還有LU-矩陣分解,QR-矩陣分解,特徵值分解等等。之所以在協同過濾中經常把重點放在矩陣分解上,是因為在如今推薦系統問題的龐大數據規模下,矩陣分解這樣的方法表現出了優秀的性能,是亮點。
才疏學淺,報道如有偏差還望指正。
矩陣分解是處理矩陣填充最為重要的一種方式,目前流行的演算法大多是基於矩陣分解得到的;
推薦閱讀: