機器學習Lesson 7 — 奇異值分解的計算及陷阱(上篇)

施威銘研究室
6 min readFeb 19, 2021

--

特徵工程中有一個常用的技巧為奇異值分解(Singular Value Decomposition, SVD),這個方法是一些進階資料分析技術的基礎,像是主成分分析(Principal Component Analysis, PCA)的後台運算也可以使用SVD,PCA的詳細操作過程,可以參考旗標出版的「跨領域學Python:資料科學基礎養成」。

認真的讀者想必看過一些資料介紹怎麼計算SVD,但是你曾經成功計算出一個任意矩陣的SVD嗎?今天我們就來展示一次SVD計算,以及可能會遇到的陷阱。

Photo by Antoine Dautry on Unsplash

一、SVD計算

我們用以下矩陣作為SVD計算的範例:

(1)、計算A乘以A的轉置:

(2)、計算Eigenvalue:

(3)、將步驟(2)的Eigenvalue開根號,從大到小放在一個跟A一樣大的矩陣的對角線上,其餘位置擺0:

(4)、計算Eigenvector:

(4–1)、Eigenvalue = 3 :

(4–2)、Eigenvalue = 2:

(4–3)、Eigenvalue = 0:

(5)、將步驟(4)的3個Eigenvector根據對應的Eigenvalue,由大到小以column的方式並排:

(6)、計算A的轉置乘以A :

(7)、計算Eigenvalue:

(8)、計算Eigenvector:

(8–1)、Eigenvalue = 3 :

(8–2)、Eigenvalue = 2 :

(9)、將步驟(8)的2個Eigenvector根據對應的Eigenvalue,由大到小以column的方式並排:

二、驗證SVD計算

哪裡錯了?

Photo by Tachina Lee on Unsplash

三、Eigenvector方向的任意性

仔細觀察一下,會導致矩陣A的第一行錯誤,是因為矩陣U的第二行怪怪的。我們回顧一下步驟(4–2),這裡我們要算的是Eigenvector:

接著我們維持Eigenvector的大小,但是修改Eigenvector的方向:

然後重新計算一次矩陣A:

這次對了!

四、SVD計算過程中,Eigenvector方向選擇問題

我們會發現:在計算Eigenvector的過程中,Eigenvector的方向可以任意選擇。但是計算重新組裝回矩陣A時,Eigenvector的方向是不能亂選!

此外,假設我們使用SVD的目標,是要萃取出矩陣U(或V),並且使用矩陣U(或V)做後續的計算。那麼矩陣U(或V)裡頭所有向量的正負號,會不會影響後續的資料分析呢?如果我們的分析不是只看向量的絕對值,那是有可能會造成影響。

更麻煩的問題是,當我們計算Eigenvector的時候,怎麼知道如何選向量的方向?此外,實務上我們都是使用一些程式語言的函式庫來算SVD,我們又怎麼知道這些函式算出來的矩陣U(或V),其向量的方向是我們想要的?

關於方向選擇這個問題,我們在下篇時會提供一個大略的判斷方式,屆時會基於今天的結果做其他(大量)的運算。這篇貼文到目前為止,已經有很多矩陣運算的內容了,我們就在這裡下課休息,請讀者先練習、熟悉SVD的計算過程喔。

重點整理

1、SVD計算過程中,如果Eigenvector方向選擇錯誤,會造成無法正確組合回原矩陣。

2、Eigenvector的方向選擇,可能會造成後續分析的結果不同。

參考資料

1、Brunton S. and Kutz J. N. (2019). Data-Driven Science and Engineering: Machine Learning, Dynamic Systems, and Control. Cambridge: Cambridge University Press.

2、Freidberg S. H., Insel A. J., and Spence L. E. (2003). Linear Algebra. 4th ed., New Jersey: Pearson Education, Inc.

關於作者

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.

--

--

施威銘研究室

致力開發AI領域的圖書、創客、教具,希望培養更多的AI人才。整合各種人才,投入創客產品的開發,推廣「實作學習」,希望實踐學以致用的理想。