目录

  • 1.谱分解
    • (1)特征值和特征向量
    • (2)特征值分解
    • (3)numpy实现特征值分解
  • 2.奇异值分解(SVD)
    • (1)简介
    • (2)SVD和PCA
    • (3)numpy实现SVD

1.谱分解

谱分解又称为特征值分解,只有方阵才能进行谱分解。

(1)特征值和特征向量

方阵A\mathbf{A}A,如果存在非零向量x\mathbf{x}x和实数λ\lambdaλ,满足:
Ax=λx\mathbf{Ax}=\lambda \textbf{x} Ax=λx
则称λ\lambdaλ为A\mathbf{A}A的特征值,x\mathbf{x}x为λ\lambdaλ对应A\mathbf{A}A的特征向量。

(2)特征值分解

方阵A\mathbf{A}A可以分解为:
A=WΣW−1\mathbf{A}=\mathbf{W}\Sigma \mathbf{W}^{-1} A=WΣW−1
其中,W\mathbf{W}W为特征值对应的特征向量组成的矩阵,Σ\SigmaΣ为特征值组成的对角矩阵。
当特征向量为单位正交向量,即:
wiTwi=1,wiTwj=0\mathbf{w}_{i}^{T}\mathbf{w}_{i}=1,\mathbf{w}_{i}^{T}\mathbf{w}_{j}=0 wiT​wi​=1,wiT​wj​=0
则特征向量组成的矩阵W\mathbf{W}W满足:
WTW=E,WT=W−1\mathbf{W}^{T}\mathbf{W}=E,\mathbf{W}^{T}=\mathbf{W}^{-1} WTW=E,WT=W−1
此时,方阵A\mathbf{A}A的特征值分解可以写为:
A=WΣWT\mathbf{A}=\mathbf{W}\Sigma \mathbf{W}^{T} A=WΣWT

(3)numpy实现特征值分解

生成3*3矩阵

import numpy as np
a = np.random.randn(3,3)
print(a)

输出:

[[-0.55834527 -0.43532198 -1.7491549 ][-0.77599428  0.31747145 -0.14348623][ 0.82501312 -0.42363183 -0.24466913]]

求出特征值和特征向量

e_vals,e_vecs = np.linalg.eig(a)
print('特征值:')
print(e_vals)
print('特征向量矩阵:')
print(e_vecs)

输出:

特征值:
[-0.29093722+0.94740018j -0.29093722-0.94740018j  0.09633149+0.j        ]
特征向量矩阵:
[[-0.71600646+0.j         -0.71600646-0.j          0.31525619+0.j        ][-0.30514196-0.3624265j  -0.30514196+0.3624265j   0.88653391+0.j        ][ 0.18540433+0.47801191j  0.18540433-0.47801191j -0.3386313 +0.j        ]]

特征值组成对角矩阵

e_vals_matrix = np.diag(e_vals)
print(e_vals_matrix )

输出:

[[-0.29093722+0.94740018j  0.        +0.j          0.        +0.j        ][ 0.        +0.j         -0.29093722-0.94740018j  0.        +0.j        ][ 0.        +0.j          0.        +0.j          0.09633149+0.j        ]]

求特征向量组成的矩阵的逆矩阵

e_vecs_inv = np.linalg.inv(e_vecs)
print(e_vecs_inv)

输出:

[[-0.78910799-1.59991045e-01j  0.39500959-4.82338840e-01j0.29949451-1.41170619e+00j][-0.78910799+1.59991045e-01j  0.39500959+4.82338840e-01j0.29949451+1.41170619e+00j][-0.41240378+0.00000000e+00j  1.79428304+0.00000000e+00j1.36041741-6.46882927e-17j]]

验证矩阵分解是否成功

np.allclose( a, np.dot(e_vecs, np.dot(e_vals_matrix, np.linalg.inv(e_vecs))))

输出:

True

2.奇异值分解(SVD)

(1)简介

奇异值分解可以对任意形状的矩阵进行。
对矩阵A∈Rm×n\textbf{A}\in R^{m\times n}A∈Rm×n进行奇异值分解:
A=UΣV−1\textbf{A}=\mathbf{U\Sigma V^{-1}} A=UΣV−1
其中,U∈Rm×m\mathbf{U}\in R^{m\times m}U∈Rm×m为左奇异矩阵,是由AAT\mathbf{AA^{T}}AAT的mmm个特征向量组成的矩阵;V∈Rn×n\mathbf{V}\in R^{n\times n}V∈Rn×n为右奇异矩阵,是由ATA\mathbf{A^{T}A}ATA的nnn个特征向量组成的矩阵;Σ∈Rm×n\mathbf{\Sigma }\in R^{m\times n}Σ∈Rm×n是由奇异值σ\sigmaσ组成的对角矩阵,奇异值和特征值的关系为σ=λ\sigma=\sqrt{\lambda }σ=λ​。

(2)SVD和PCA

PCA需要求协方差矩阵XTX\mathbf{X^{T}X}XTX,计算量大。而有些求SVD的方法可以不通过协方差矩阵直接求出左奇异矩阵和右奇异矩阵。
左奇异矩阵可以对矩阵进行行压缩,右奇异矩阵可以进行列压缩。

(3)numpy实现SVD

生成3*4矩阵

import numpy as np
a = np.random.randn(3,4)
print(a)

输出:

[[ 0.62792926 -0.37274349  0.07758746  0.48700254][-0.42410401  1.77721975  2.52468661  1.41474801][ 1.91585643 -0.6565746   0.7721693  -0.54750592]]

奇异值分解

u,s,v = np.linalg.svd(a)
print('左奇异矩阵')
print(u)
print('奇异值向量')
print(s)
print('右奇异矩阵')
print(v)

输出:

左奇异矩阵
[[-0.01748221 -0.26483323  0.96413574][ 0.9925762  -0.12067706 -0.01515022][-0.12036135 -0.95671334 -0.26497687]]
奇异值向量
[3.4368963  2.28903121 0.66033099]
右奇异矩阵
[[-0.19276933  0.53815084  0.70169359  0.42527611][-0.85103353  0.22384967 -0.46480981  0.09790348][ 0.15776433 -0.32154103 -0.25449617  0.89830589][ 0.46226868  0.74625489 -0.47624536  0.0510065 ]]

十七.降维之谱分解和奇异值分解相关推荐

  1. R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据

    最近我们被客户要求撰写关于特征值分解的研究报告,包括一些图形和统计输出. R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法. 作为数据分析的一部分,我们要在有价证券矩阵的操作上做一些工作 ...

  2. R语言主成分分析PCA谱分解、奇异值分解预测分析运动员表现数据和降维可视化

    最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出. 本文描述了如何 使用R执行主成分分析 ( PCA ).您将学习如何 使用 PCA预测 新的个体和变量坐标.我们还将提供  ...

  3. 降维 ---- 主成分分析 (PCA)、奇异值分解 (SVD)

    降维 在机器学习或数据处理中,经常会碰到一些高维数据,而高维数据情形下经常出现样本稀疏.计算困难等问题,称之为"维度灾难". 对于一个高维数据数 D={X1,X2,...,XN}D ...

  4. 稀疏学习、稀疏表示、稀疏自编码神经网络、字典学习、主成分分析PCA、奇异值分解SVD 等概念的梳理,以及常用的特征降维方法

    稀疏学习.稀疏表示.稀疏自编码神经网络.字典学习.主成分分析PCA.奇异值分解SVD 等概念的梳理,以及常用的特征降维方法 关于稀疏 稀疏编码 Sparse Coding 与字典学习 神经网络的正则化 ...

  5. 降维-基于RDD的API

    降维-基于RDD的API • Singular value decomposition (SVD) o Performance o SVD Example • Principal component ...

  6. PCA降维算法原理及代码实现(python和matlab)

    常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...

  7. 机器学习之数据转换(七)——降维

    降维是机器学习中很重要的一种思想.在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为" 维度灾 ...

  8. 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...

  9. OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...

  10. 关于机器学习中的一些常用方法的补充

    前言 机器学习相关算法数量庞大,很难一一穷尽,网上有好事之人也评选了相关所谓十大算法(可能排名不分先后),它们分别是: 1.       决策树 2.       随机森林算法 3.       逻辑 ...

最新文章

  1. Django中多种重定向方法使用
  2. Nginx中木马解决方法
  3. Solaris 11的ip地址配置
  4. hadoop的限制/不足
  5. springBoot整合rabbitmq并测试五种常用模型
  6. 《梦断代码》读后感2
  7. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
  8. 3种时间复杂度实现不同类型的无序数组去重
  9. linux shell读取文件,shell脚本中读取文件的方法
  10. Java语言设计文本查找器和文本编辑器
  11. TP-LINK 路由器 无线桥接 设置
  12. DSP Bootloader说明
  13. 移位加密字母C语言,替代密码和置换密码地C语言实现
  14. 春节不断电之机器学习 —— 决策树
  15. 前台图片压缩转换base64提交到后台
  16. JDK代理模式学习笔记
  17. 概率论—随机事件与随机事件的概率
  18. 打字慢能学计算机吗,提高电脑打字速度,实现快速盲打,这样的学习方法很管用!...
  19. C语言:输入三角形边长,求面积。
  20. Python——打开文件

热门文章

  1. 安徽省滁州市谷歌卫星地图下载
  2. 服务器系统驱动精灵,驱动精灵2009 新版启动快运行稳
  3. 安装Visual Studio2019一直显示网络未连接
  4. 2021年最推荐的十大进销存管理软件排名
  5. 教你快速录制gif动图
  6. 输入需求自动生成代码,这个AI有点厉害,可以替代真人吗?
  7. 中国台湾研发miniLED技术进展迅速,将给面板技术带来变革
  8. ❤️对比PyWinAuto和uiautomation实现微信联系人自动采集❤️
  9. Spark入门(一篇就够了)
  10. weblogic安装部署升级小结