亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1834 0

SVD

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

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計(jì)算方式

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

  • 由于其為列正交向量,所以矩陣在非對(duì)角位置都為0, 因此當(dāng)V的列向量是單位向量時(shí),對(duì)角位為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 的對(duì)角元為特征值。

同理,可知, A T A A^TA A T A 對(duì)應(yīng)于V的計(jì)算。

Python實(shí)現(xiàn)

  • 導(dǎo)入包
            
              
                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
              
              
                .
              
              
                ]
              
              
                ]
              
              
                )
              
            
          
  • 實(shí)現(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ù)來(lái)測(cè)量下:

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

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 一本久久a久久精品vr综合 | 四虎最新免费观看网址 | 国产成人精品一区二区仙踪林 | 色综七七久久成人影 | 亚洲线精品久久一区二区三区 | www性| 日本视频在线观看不卡高清免费 | 夜夜精品视频 | 欧美兽皇另类 | 男人的天堂免费在线观看 | 99pao在线视频精品免费 | 日韩亚洲一区中文字幕在线 | 久久精品国产99久久 | 久久色吧 | 国产福利精品在线观看 | 欧美成人高清视频 | 深夜影院在线视频观看 | 久久精品中文字幕一区 | 99视频在线精品免费 | 国产成人免费高清在线观看 | 免费xxxx美国18| 亚洲国产精品a一区二区三区 | 国产精品毛片久久久久久久 | 在线播放国产一区二区三区 | 九九热精品 | 国产精品每日更新在线观看 | 999久久久国产精品 999久久久精品视频在线观看 | 国产一级视频久久 | 欧美日韩亚洲第一页 | 日本一区二区三区在线播放 | 亚洲国产欧美在线人成 | 精品图区 | 久久96精品国产 | 男人在线影院 | 激情四房 | 狠狠狠色丁香婷婷综合久久五月 | 久久99精品久久久久久青青日本 | 天天做夜夜操 | a毛片在线观看 | 亚洲swag精品自拍一区 | 最刺激黄a大片免费观看下截 |