欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

SVD理論以及Python實現(xiàn)

系統(tǒng) 1935 0

SVD

將一個矩陣分解為U,V(U,V均為列正交矩陣,即列向量直接內(nèi)積為0),中間的矩陣為對角陣,元素為奇異值。

A [ m ? n ] = U [ m ? r ] ? ∑ [ r ? r ] ? ( V [ n ? r ] ) T A_{[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 ? ∑ ? V T A T = V ? ∑ ? U T A A T = U ? ∑ ? V T ? V ? ∑ ? U T A = U * \sum * V^T \\ A^T = V * \sum * U ^T \\ AA^T = U * \sum * V^T * V * \sum * U^T A = U ? ? V T A T = V ? ? U T A A T = U ? ? V T ? V ? ? U T

  • 由于其為列正交向量,所以矩陣在非對角位置都為0, 因此當V的列向量是單位向量時,對角位為1,則為單位陣。

A A T = U ∑ 2 U T A A T U = U ∑ 2 AA^T = U {\sum}^2U^T \\ AA^T U = U {\sum}^2 A A T = U 2 U T A A T U = U 2
因此,U為 A A T AA^T A A T 特征向量構(gòu)成的矩陣,然后 ∑ 2 {\sum}^2 2 的對角元為特征值。

同理,可知, A T A A^TA A T A 對應于V的計算。

Python實現(xiàn)

  • 導入包
            
              
                import
              
               numpy 
              
                as
              
               np

            
          
  • 創(chuàng)建數(shù)據(jù)
            
              A 
              
                =
              
               np
              
                .
              
              linspace
              
                (
              
              
                0
              
              
                ,
              
              
                14
              
              
                ,
              
              
                15
              
              
                )
              
              
                .
              
              reshape
              
                (
              
              
                (
              
              
                3
              
              
                ,
              
              
                -
              
              
                1
              
              
                )
              
              
                )
              
              
A

            
          
            
              array
              
                (
              
              
                [
              
              
                [
              
              
                0
              
              
                .
              
              
                ,
              
              
                1
              
              
                .
              
              
                ,
              
              
                2
              
              
                .
              
              
                ,
              
              
                3
              
              
                .
              
              
                ,
              
              
                4
              
              
                .
              
              
                ]
              
              
                ,
              
              
                [
              
              
                5
              
              
                .
              
              
                ,
              
              
                6
              
              
                .
              
              
                ,
              
              
                7
              
              
                .
              
              
                ,
              
              
                8
              
              
                .
              
              
                ,
              
              
                9
              
              
                .
              
              
                ]
              
              
                ,
              
              
                [
              
              
                10
              
              
                .
              
              
                ,
              
              
                11
              
              
                .
              
              
                ,
              
              
                12
              
              
                .
              
              
                ,
              
              
                13
              
              
                .
              
              
                ,
              
              
                14
              
              
                .
              
              
                ]
              
              
                ]
              
              
                )
              
            
          
  • 實現(xiàn)
            
              
                def
              
              
                SVD
              
              
                (
              
              A
              
                ,
              
               n
              
                )
              
              
                :
              
              
    M 
              
                =
              
               np
              
                .
              
              dot
              
                (
              
              A
              
                ,
              
               A
              
                .
              
              T
              
                )
              
              
    eigval
              
                ,
              
               eigvec 
              
                =
              
               np
              
                .
              
              linalg
              
                .
              
              eig
              
                (
              
              M
              
                )
              
              
    indexes 
              
                =
              
               np
              
                .
              
              argsort
              
                (
              
              
                -
              
              eigval
              
                )
              
              
                [
              
              
                :
              
              n
              
                ]
              
              
    U 
              
                =
              
               eigvec
              
                [
              
              
                :
              
              
                ,
              
               indexes
              
                ]
              
              
    sigma_sq 
              
                =
              
               eigval
              
                [
              
              indexes
              
                ]
              
              
    M 
              
                =
              
               np
              
                .
              
              dot
              
                (
              
              A
              
                .
              
              T
              
                ,
              
               A
              
                )
              
              
    eigval
              
                ,
              
               eigvec 
              
                =
              
               np
              
                .
              
              linalg
              
                .
              
              eig
              
                (
              
              M
              
                )
              
              
    indexes 
              
                =
              
               np
              
                .
              
              argsort
              
                (
              
              
                -
              
              eigval
              
                )
              
              
                [
              
              
                :
              
              n
              
                ]
              
              
    V 
              
                =
              
               eigvec
              
                [
              
              
                :
              
              
                ,
              
               indexes
              
                ]
              
              
    sigma 
              
                =
              
               np
              
                .
              
              diag
              
                (
              
              np
              
                .
              
              sqrt
              
                (
              
              sigma_sq
              
                )
              
              
                )
              
              
                #     print(sigma)
              
              
                return
              
               np
              
                .
              
              dot
              
                (
              
              np
              
                .
              
              dot
              
                (
              
              U
              
                ,
              
               sigma
              
                )
              
              
                ,
              
               V
              
                .
              
              T
              
                )
              
            
          
  • 調(diào)用
            
              A_ 
              
                =
              
               SVD
              
                (
              
              A
              
                ,
              
              
                2
              
              
                )
              
              
A_

            
          
            
              array
              
                (
              
              
                [
              
              
                [
              
              
                2.01625019e-16
              
              
                ,
              
              
                1.00000000e+00
              
              
                ,
              
              
                2.00000000e+00
              
              
                ,
              
              
                3.00000000e+00
              
              
                ,
              
              
                4.00000000e+00
              
              
                ]
              
              
                ,
              
              
                [
              
              
                5.00000000e+00
              
              
                ,
              
              
                6.00000000e+00
              
              
                ,
              
              
                7.00000000e+00
              
              
                ,
              
              
                8.00000000e+00
              
              
                ,
              
              
                9.00000000e+00
              
              
                ]
              
              
                ,
              
              
                [
              
              
                1.00000000e+01
              
              
                ,
              
              
                1.10000000e+01
              
              
                ,
              
              
                1.20000000e+01
              
              
                ,
              
              
                1.30000000e+01
              
              
                ,
              
              
                1.40000000e+01
              
              
                ]
              
              
                ]
              
              
                )
              
            
          

非常近了,然后量化判斷下,用二范數(shù)來測量下:

            
              np
              
                .
              
              linalg
              
                .
              
              norm
              
                (
              
              A_ 
              
                -
              
               A
              
                )
              
            
          
  • 總共的誤差: 1.8697717541841314e-14
  • 非常的小了。

更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区在线看 | 欧美激情刺激爽免费视频观看 | 午夜激情影院 | 欧美性xx | 9色在线| 欧美视频三区 | 日韩在线免费 | 国产一区二区精品久久91 | 精品国产第一国产综合精品gif | 欧美日韩精品一区二区三区四区 | 国产午夜精品久久久久小说 | 亚洲综合亚洲综合网成人 | 在线观看成人 | 中国一级黄色片 | 不卡国产一区二区三区四区 | 在线观看亚洲精品 | 日本黄 色 成 年 人免费观看 | 成人欧美日韩一区二区三区 | 久久久久久国产精品久久 | 99精品久久秒播无毒不卡 | 国产高清视频a在线大全 | 国产乱肥老妇国产一区二 | 成人午夜精品一区二区三区 | dy天堂 | 婷婷色综合久久 | 丝袜偷窥亚洲综合 | 美女下面直流白浆视频 | 久久亚洲精品中文字幕二区 | 成人瑟瑟| 成人精品鲁一区一区二区 | 亚洲精品久久午夜无码一区二区 | 在线播放国产一区二区三区 | 欧美成人a∨高清免费观看 久久亚洲欧美日韩精品专区 | 精彩视频一区 | 久久亚洲一级α片 | 成人激情视频在线观看 | 韩国一级免费视频 | 久久久久国产精品www | 亚洲欧美第一页 | 99久久精品国产一区二区三区 | 久久久久国产一区二区三区 |