奇異值分解(SVD)小結
目錄
陣的簡單理解
矩陣從我的理解來看,可以從兩個角度來看。一個是矩陣是作用於向量,一個是矩陣表達一個實體。
矩陣作用於向量
對於線性空間中,對向量的變換就是通過矩陣對向量的作用來實現的,矩陣本身就表示著一種變換。假設目前所討論的矩陣是非奇異的階方陣。對矩陣對向量的變換,可以從兩個不同的角度來看:一、從同一個座標系來看,矩陣對向量的變換就是伸縮或者旋轉。二、同一個向量,在不同座標系下的度量。比如:
1、從第一個角度來看就是,向量經過矩陣的作用變成了向量,矩陣表示一種執行方式。
2、從第二個角度來看就是,那麼矩陣就表示著一個座標系(因為非奇異,故矩陣是有個線性無關的向量組成),就是在座標系下的一個度量結果,只不過這裡的矩陣不一定是單位矩陣,所以座標軸上度量單位不一定是單位1。而向量是單位矩陣所表示的座標系下的度量結果。即:
由上式可以看的出,一個向量,他在座標系中的表示結果是向量,它在座標系中的表示結果是向量,這表明什麼?向量x和向量b,表示的是同一個向量,只不過是在不同的座標系下,每個向量的度量結果不一樣而已,即表現形式不同,但本質是一個東西。
我們知道一個向量在不同基下的座標是不一樣的,即向量在不同空間的測量結果是不一樣的。如果舉一個不恰當的例子,比如水,在零度以下是冰,在100度以上是水蒸氣,你可以這樣理解,水在0度的環境下的表現形式是冰,在100度的環境下的表現形式是水蒸氣,他們只不過存在形式不同,但都是。那麼矩陣是不是也可以看成向量所處的環境呢?(我們目前都是假設矩陣是非奇異的),我想是可以的。無論是把矩陣看成是向量所處環境也好,還是看成空間座標系也好,不可否認的是,矩陣包含著度量的能力,他可以表達一種空間資訊,此時矩陣表示一種度量方式。
由此矩陣作用於向量或者矩陣,可以把矩陣看成是動態的形式。
用矩陣的表達一個實體
一副影象在計算時,它是以一個矩陣的形式表達的;在NLP中,文字與詞的關係,也是以矩陣的形式存在的。此時矩陣表達一個具體的事物,此時矩陣就是一種靜態的表示結果。
囉裡囉嗦了那麼多,就是為了加深理解矩陣的意義,矩陣在不同的情況下,其作用是不一樣的。
特徵值和特徵向量
如果是n階方陣,如果存在一個非零的常數和一個n維的向量使得:,則稱是矩陣的特徵值,就是其對應的特徵向量。翻譯成白話就是:如果矩陣使得一個向量伸縮,那麼該向量就是矩陣 的一個特徵向量,伸縮的尺度就是特徵值。
如果你覺得矩陣表達運動時比較好理解,那麼特徵向量就是,各個分運動的方向,對應的特徵值,就是運動的距離。如果你覺得矩陣作為表達實體時比較好理解,那麼特徵向量,就是該實體的某一特徵,對應的特徵值就是該特徵的重要程度。
尤其是矩陣表達一個實體時,矩陣的特徵分解顯得尤為重要,因為此時的矩陣往往是稀疏的,維度比較大的,在儲存或者計算時會浪費很多資源,此時特徵值和特徵向量的作用就顯得尤為重要了,我們可以選擇幾個特徵值最大的向量,就可以表達該實體,這樣就可以對原來的矩陣起到了很好的降維作用,而且可以消除很多噪聲。可以參考這個例子 。
奇異值分解
之前說的方陣都是n階方陣,那麼對於機器學習中很多時候面對的矩陣都是的,這個時候,我們也想跟方陣一樣找出對應的特徵值和特徵向量,那麼有什麼方法?答案就是奇異值分解,此時的奇異值就是對應n階方陣的特徵值,只不過此時不再稱呼特徵值和特徵向量了,因為解法不同以及分解出來的矩陣表達的意義也不同。在說奇異值分解之前,先交代兩個概念。Hermitian矩陣和酉矩陣。
Hermitian矩陣
如果階複方陣是對稱的,且對稱單元互為共軛,即,矩陣的共軛轉置矩陣等於它本身,稱為Hermitian矩陣。例如:
共軛轉置
矩陣有實數矩陣和複數矩陣。轉置矩陣僅僅是將矩陣的行與列對換,而共軛轉置矩陣在將行與列對換後還要讓每個元素共軛一下。共軛,就是將形如a+bi的數變成a-bi,實數的共軛是它本身。
故,實數矩陣的共軛轉置矩陣就是轉置矩陣,複數矩陣的共軛轉置矩陣就是上面所說的行列互換後每個元素取共軛。
酉矩陣
我們說的正交矩陣是屬於的,是實數域上的。那麼推廣到複數域:
假設,為複數域,若:
則稱就是酉矩陣。
定理:令,則存在正交矩陣(或者酉矩陣)和,使得:
其中,且,其對角線元素是按照從大到小的順序排列的,即,,。
現在證明這個定理是怎麼來的,為了方便理解,先交代幾個引理。
引理一、Hermitian矩陣可酉對角化,且特徵值是非負的。
引理二、。
引理三、的充要條件是。
證明:
設,根據引理一和引理二,可知可以酉對角化,且,那麼存在一個階的酉矩陣使得:
即:,其中為的非負特徵根。
令,我們把酉矩陣拆分成兩個子矩陣和,有:
易知,,根據引理三可知。
則有
由於是對角矩陣,故,,由此可得:
令,則有:。我們構造一個酉矩陣,使得,也就是各向量之間是相互正交的,然拼接成和酉矩陣同等規模的酉矩陣。
則,證畢。
我們對酉矩陣進行奇異值分解,同理可以得出:
我們已經知道對的奇異值分解為:
如果矩陣的秩是,則有:
酉矩陣的前列組成矩陣的列空間的標準正交基。
酉矩陣的前列組成矩陣的行空間(或者的列空間)的標準正交基。
U的後列組成矩陣的零空間的標準正交基。
的後列組成矩陣A的零空間的標準正交基。
我們之前說過,奇異值分解,就是為了找到最重要的特徵,用這些特徵來表示原來的矩陣,這樣可以起到降維的作用,也可以起到消除噪聲的作用。那麼,當矩陣的秩時,由於奇異值,因此矩陣的奇異值分解就可以寫成:
這種情況就稱為矩陣的截尾奇異值分解。
但是大多數的時候,有些奇異值不為0對應的特徵向量我們也會捨棄,只會選取以少部分,就是大家常說的前10%甚至1%的奇異值會佔總的奇異值的99%。如下圖所示:
談談《數學之美》對SVD的理解
首先說明一下,吳軍老師在數學之美講解SVD的時候,有點是描述錯誤的,可能版本比較老,新版不知是否已經更正。在這裡敘述時,會更正。
假如對新聞進行分類,把詞和文字放到一個矩陣中,可以利用餘弦定理來計算相似性;還可以利用對矩陣直接進行SVD分解一次解決。
矩陣描述了詞和文章的關聯性,每一行代表一個詞,每一列代表一篇文章,如果有個詞,篇文章,那麼對應的矩陣如下:
其中第行第列的元素表示,字典中第個單詞出現在第篇文章中的加權詞頻(如TF-IDF),那麼被分解的三個小矩陣:
- 第一個矩陣,表示對詞進行分類的一個結果。矩陣是的特徵向量組成的矩陣,是的,詞詞的,表示的就是詞與詞之間的關係。是的一個基,它可以表示詞與詞之間的空間分佈,也就是語義相近與否,所以我們分解出來的第一個矩陣就是對詞進行的分類結果。它的每一行表示一個詞,每一列表示一個語義相近的詞類。每個非零元素表述該詞在相應語義中的相關性(重要性),數值越大越相關。
- 最後一個矩陣,表示是對文字的一個分類結果。矩陣是的特徵向量組成的空間,是的,文章文章,表示的是文章與文章之間的關係,它的每一列表示一篇文章,每一行表示一個主題,這一列中的每個元素表示在不同主題中的相關性。
- 第二個矩陣,表示詞的語義類和文章的主題之間的關係。如下面這個矩陣:
在矩陣中,每一行表示一個語義,每一列表示一個主題。每一行的每個元素,表示該語義與主題之間的關係。0.7表示第一個語義與第一個主題相關,0.21表示第一個語義與第二個主題不相關。同理,0.18表示第二個語義與第一個主題不相關,0.63表示第二個語義與第二個主題相關。
到此SVD講解完成,從理論到實際的物理意義,花了近兩天的複習和總結,囉裡囉嗦了這麼多,也不知道是否闡述的明白。如有錯誤,歡迎指正。
參考:
《理解矩陣》孟巖
《數學之美》吳軍
《矩陣分析》張賢達
相關文章
- SVD奇異值分解
- 如何讓奇異值分解(SVD)變得不“奇異”?
- 矩陣的奇異值分解(SVD)及其應用矩陣
- Python機器學習筆記:奇異值分解(SVD)演算法Python機器學習筆記演算法
- 這是我見過最通俗易懂的SVD(奇異值分解)演算法介紹演算法
- 奇異值分解以及matlab實現Matlab
- 奇異值分解在機器人學中的應用機器人
- 推薦系統與協同過濾、奇異值分解
- 6-7 奇數值結點連結串列 (20 分)
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- -RGB畫素值分解的含義-
- 奇異矩陣與非奇異矩陣的定義與區別矩陣
- Android Color 判斷色值小結Android
- Day39--自定義異常及小結
- 異常點檢測演算法小結演算法
- thinkphp奇聞異事網站PHP網站
- 陸奇的價值觀
- 奇異的enq: TX - row lock contentionENQ
- 微信小程式 傳值取值的方法總結微信小程式
- 【數值方法-Python實現】Crout分解+追趕法實現Python
- PHP 的異常處理之try和catch用法小結PHP
- Lyndon 分解
- 模式分解模式
- 分解jQueryjQuery
- 從布林值到異常
- 深入理解PCA與SVD的關係PCA
- 尤拉的奇異之旅·共赴開源時代
- AUTOCAD——分解命令
- 矩陣分解矩陣
- 帶有奇異性的黎曼流形上的Stokes定理
- [奇思異想]使用RabbitMQ實現定時任務MQ
- 軟體的分解-程式語言自帶分解功能
- “傳奇類”產品能否在小遊戲領域中再續傳奇?遊戲
- 【LiteApp系列】何為愛奇藝小程式?APP
- 愛奇藝小程式陪你嗨一夏
- 獲取input框輸入值異常
- 異或交換兩個數的值
- 芒果超媒市值超愛奇藝:長影片的異類?