机器学习相关——SVD分解
前面寫了個簡單的線性代數系列文章,目的就是讓大家在接觸SVD分解前,先了解回憶一下線性代數的基本知識,有助于大家理解SVD分解。不至于一下被大量的線性代數操作搞暈。這次終于開始正題——SVD的介紹了。
所謂SVD,就是要把矩陣進行如下轉換:A = USVT
the columns of?U?are the eigenvectors of the?AAT?matrix and the columns of?V?are the eigenvectors of the?ATA?matrix.?VT?is the transpose of?V?and?S?is a diagonal matrix. By definition the nondiagonal elements of diagonal matrices are zero. The diagonal elements of?S?are a special kind of values of the original matrix. These are termed the?singular values?of?A.
1?The Frobenius Norm
一個矩陣所有元素的平方和再開方稱為這個矩陣的Frobenius Norm。特殊情況下,行矩陣的Frobenius Norm為該向量的長度
2 計算A轉置 A*At At*A
?
3 計算S
在SVD中,將AAt的特征值從大到小排列,并開方,得到的就是奇異值。
比如上圖中,特征值為40,10.因此奇異值為6.32,3.16。矩陣的奇異值有如下特性:
a 矩陣的奇異值乘積等于矩陣行列式的值 6.32*3.16 = 20 = |A|
b 矩陣A的?Frobenius Norm等于奇異值的平方和的開方
總結一下計算S的步驟:1 計算AT?和ATA;2?計算ATA的特征值,排序并開方。
由此可以得到S,下面來看如何計算?U,VT
4? 計算V和VT
利用ATA的特征值來計算特征向量
?
既然剛才提到V就是特征向量的組合,那么
5 計算U
A = USVT
AV = USVTV = US
AVS-1?= USS-1
U = AVS-1
6 計算SVD
可以看出,SVD可以對矩陣進行分解重建。
7 降維的SVD
如果我們只保留前k個最大的奇異值,前k列個U,前k行個V,相當于將數據中占比不大的噪音進行過濾,這樣既可以有效地對數據進行泛化,又起到了降維減少運算量的目的。是不是很奇妙?
8 實際用途
我們實際的工作中,經常會用到這種降維方法。包括現在非常火的推薦問題,以及LSI問題都對SVD有著廣泛的應用。
舉個最常用的例子,在文本挖掘中:A就是 t (term) 行 d (document) 列的矩陣,每列是一篇文章,每行是一個單詞,每個單元格的當前單詞在當前文章里的出現次數。 U 是一個 t?行 r?列 的矩陣, V 是一個 r?行 d 列 的矩陣, S 是一個 r?行 r?列的對角矩陣。這里 r 的大小是 A的秩。那么U和V中分別是A的奇異向量,而S是A的奇異值。AA'的正交單位特征向量組成U,特征值組成S'S,A'A的正交單位特征向量組成V,特征值(與AA'相同)組成SS'。
希望大家細細體會,多多交流,一起進步。
轉載于:https://www.cnblogs.com/luchen927/archive/2012/01/19/2321934.html
總結
以上是生活随笔為你收集整理的机器学习相关——SVD分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通用权限管理系统组件 (GPM - Ge
- 下一篇: Windows 7可以体验IE10了