SVD矩陣分解考慮時間因素

shuaishuai3409發表於2016-04-29

推薦系統種矩陣分解有著不錯的效果,其中SVD(Singular Value Decomposition)奇異值矩陣分解也是常用的一種方法,通過對原始矩陣進行SVD分解後,可以將原始高緯資料對映到低維空間,在降維過程中,其關注的是如何去除噪聲和保留更多有效資訊

其優點:簡化資料,去除噪聲,提高演算法結果
缺點:分解過程和實際業務執行過程匹配不上
適用資料型別:數值型


SVD的原理文章有很多,這裡主要談加入時間因素的矩陣如何做分解。以我正在研究的雲平臺下虛擬機器效能預測為背景,利用TSVD(time)預測除下一時刻虛擬機器效能的實用情況。這裡效能是指:CPU、記憶體、I/O負載和頻寬。


步驟如下:

● 建立負載資訊矩陣S
考慮四種資源資料:CPU、記憶體、I/O負載和頻寬,儲存過去一段時間T的四種資源資料,建立負載資訊矩陣S,其中行表示每個時刻(或每個小週期)四種資源的監測量,列表示四種資源在時間T內的使用情況。
這裡寫圖片描述
● SVD分解
然後,根據SVD分解原理,將負載資訊矩陣S分解為U、E、V。其中U為時間資訊矩陣,E為奇異值對角矩陣(矩陣S和其轉置乘積的特徵值的平方根),V為資源資訊矩陣。(U和V都是正交矩陣,E的對角元素從大到小排列)
這裡寫圖片描述
● 時間向量相似性計算
假設當前時刻為t0,要預測下一時刻tf的負載。方法是在U中,找t0之前的所有時刻中找和t0最相似的時間向量(行向量)tc,通過點積運算(由於)找最相似,由於U是正交陣,故t0和tc的模為1,故只需找夾角即可,越小,相似度越高。
這裡寫圖片描述

● 將來時刻tf的負載預測

tc找到後,tc的下一刻tc-1和當前時刻ti是影響tf時刻的關鍵向量。取兩者線性組合。(本質就是認為將來時刻的負載和當前和歷史最相似向量兩者有關。)
這裡寫圖片描述
● 奇異值對角矩陣E重要特徵選取
並不是所有的奇異值都可以表示資料的重要特徵,對於排名靠後的奇異值要剔除(干擾因子),本文只刪除了最後一個。其實,常用方法是選取矩陣E中總能量的90%的資訊。
總能量:所有奇異值平方和
90%資訊:從大往後依次取奇異值平方相加,直到第一次大於90%為止。則取前幾個奇異值。
● 下一時刻預測出的負載使用量為:
這裡寫圖片描述
注意:V’是根據E’的變化而變化的,最終目的是保證矩陣大小和原始一樣。
SVD也是通過將|S-Sf|作為目標函式,通過SGD等方法求得U(tf)、E、V。
這篇論文作為一種效能預測的思路,其實挺簡單的,而且實現起來也很容易。但是它也只是在單個虛擬機器上進行預測,沒有考慮分散式的需求。

相關文章