SVD理论以及Python实现
生活随笔
收集整理的這篇文章主要介紹了
SVD理论以及Python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SVD
將一個矩陣分解為U,V(U,V均為列正交矩陣,即列向量直接內積為0),中間的矩陣為對角陣,元素為奇異值。
A[m?n]=U[m?r]?∑[r?r]?(V[n?r])TA_{[m*n]} = U_{[m*r]} * \sum_{[r*r]} *(V_{[n*r]})^T A[m?n]?=U[m?r]??[r?r]∑??(V[n?r]?)T
SVD計算方式
A=U?∑?VTAT=V?∑?UTAAT=U?∑?VT?V?∑?UTA = U * \sum * V^T \\ A^T = V * \sum * U ^T \\ AA^T = U * \sum * V^T * V * \sum * U^TA=U?∑?VTAT=V?∑?UTAAT=U?∑?VT?V?∑?UT
- 由于其為列正交向量,所以矩陣在非對角位置都為0, 因此當V的列向量是單位向量時,對角位為1,則為單位陣。
AAT=U∑2UTAATU=U∑2AA^T = U {\sum}^2U^T \\ AA^T U = U {\sum}^2AAT=U∑2UTAATU=U∑2
因此,U為AATAA^TAAT特征向量構成的矩陣,然后∑2{\sum}^2∑2的對角元為特征值。
同理,可知,ATAA^TAATA對應于V的計算。
Python實現
- 導入包
- 創建數據
- 實現
- 調用
非常近了,然后量化判斷下,用二范數來測量下:
np.linalg.norm(A_ - A)- 總共的誤差:1.8697717541841314e-14
- 非常的小了。
總結
以上是生活随笔為你收集整理的SVD理论以及Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PageRank算法以及Python实现
- 下一篇: CUR分解算法及Python实现