奇異值分解(Singular Value Decomposition, SVD)是構成主成分分析(Principal Component Analysis, PCA)的重要運算,這種透過將高維的資料降成低維的資料,在人工智慧的世界裡已經廣泛利用。其他類似的技術像是UMAP等等,詳細可以參考旗標出版的「Kaggle競賽攻頂秘笈 — 揭開Grandmaster的特徵工程心法,掌握制勝的關鍵技術」。
上次我們已經知道Eigenvector方向選擇,會影響SVD的結果,今天要介紹一個簡單的方法,可以協助大家選擇Eigenvector的方向。
一、SVD計算回顧
上次,我們一開始計算SVD時候失敗了:
接著,我們調整了其中一個Eigenvector的方向,問題也就解決:
二、Economy Sized SVD
解決Eigenvector方向之前,我們先來看一下SVD的一個特性,現在大家仔細觀察重組運算中,藍色這些元素對整個運算的貢獻是什麼:
答案是…完全沒貢獻!
既然完全沒貢獻,那就不要理它,因此我們其實可以簡化SVD之後的矩陣:
這樣的作法,不但可以完美重建矩陣A,而且儲存矩陣元素的總個數變少了。我們稱此為Economy Sized SVD。
三、Eigenvector的方向選擇
通常我們希望Eigenvector可以包含原始矩陣A的一些特性(Bro et al., 2008),如果讀者認同這樣的想法,那麼應該可以接受「若將原始矩陣內的每一行(列)視為一個向量,Eigenvector的方向,應該要與這些行(列)向量類似」,用數學來表示,即為「每一個Eigenvector跟原始矩陣的行(列)向量內積的總和,應該要越大越好」。
所以,我們可以嘗試找一個方向,可以最大化「每一個Eigenvector跟原始矩陣的行(列)向量內積的總和」。現在,使用Economy Sized SVD試試看吧:我們將U矩陣的每一個Eigenvector,跟A矩陣的每一個行向量,作內積並且平方,再加上內積後的正負號,最後加總。
計算U的第一個Eigenvector應該選什麼方向:
計算U的第二個Eigenvector應該選什麼方向:
接下來輪到V矩陣!我們將V矩陣的每一個Eigenvector,跟A矩陣的每一個列向量,作內積並且平方,再加上內積後的正負號,最後加總。
計算V的第一個Eigenvector應該選什麼方向:
計算V的第二個Eigenvector應該選什麼方向:
上述紅色的部分是最終我們選擇的Eigenvector,會發現V的第二個Eigenvector還是沒辦法用這個方法判斷的。因此這個方法並不是萬能,但至少可以幫我們解決大部分的問題。
重點整理
1、我們可以使用Economy Sized SVD來節省矩陣元素的儲存數量。
2、最大化Eigenvector跟原始矩陣蒐集的行(列)向量內積之總和,有機會幫我們判斷出Eigenvector的方向。
參考資料
1、Brunton S. and Kutz J. N. (2019). Data-Driven Science and Engineering: Machine Learning, Dynamic Systems, and Control. 1st ed. Cambridge: Cambridge University Press.
2、Bro R., Acar E., and Kolda T. G. (2008). Resolving the sign ambiguity in the singular value decomposition. Journal of Chemometrics, 22(2), pp. 135–140.
關於作者
Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.