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

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)論
主站蜘蛛池模板: 在线欧美精品一区二区三区 | 久久天天躁狠狠躁夜夜中文字幕 | 国产片欧美片亚洲片久久综合 | 欧美一区精品二区三区 | 国外成人在线视频 | 久久精品中文字幕久久 | 国产精品香蕉在线观看首页 | 四虎永久在线观看 | 免费看欧美日韩一区二区三区 | 久久久噜久噜久久综合 | 伊人天天躁夜夜躁狠狠 | 国产中文字幕在线观看 | 伊人色播 | 久草在现 | 午夜婷婷| 国产成人精品福利色多多 | 九九免费视频 | 亚洲精品国产成人中文 | 99亚洲乱人伦精品 | 中文字幕在线精品视频万部 | 波多野结衣久久 | 日韩精品亚洲人成在线播放 | 亚洲精品在线观看91 | 香蕉视频在线观看黄 | 新香蕉视频在线 | 四虎影视大全 | 国产成人综合一区精品 | 欧美一级aa免费毛片 | 亚洲综合第一欧美日韩中文 | 丝袜亚洲精品中文字幕一区 | 99精品久久久久中文字幕 | 精品久草 | 国产精品亚洲一区二区麻豆 | 99re热久久精品这里都是精品 | 伊人色综合琪琪久久社区 | 国产精品久久自在自2021 | 国产成人mv在线观看入口视频 | 久久成人综合 | 青青青免费手机版视频在线观看 | 久久久久久全国免费观看 | 日本黄色绿像 |