十七.降维之谱分解和奇异值分解
目录
- 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 wiTwi=1,wiTwj=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 ]]
十七.降维之谱分解和奇异值分解相关推荐
- R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据
最近我们被客户要求撰写关于特征值分解的研究报告,包括一些图形和统计输出. R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法. 作为数据分析的一部分,我们要在有价证券矩阵的操作上做一些工作 ...
- R语言主成分分析PCA谱分解、奇异值分解预测分析运动员表现数据和降维可视化
最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出. 本文描述了如何 使用R执行主成分分析 ( PCA ).您将学习如何 使用 PCA预测 新的个体和变量坐标.我们还将提供 ...
- 降维 ---- 主成分分析 (PCA)、奇异值分解 (SVD)
降维 在机器学习或数据处理中,经常会碰到一些高维数据,而高维数据情形下经常出现样本稀疏.计算困难等问题,称之为"维度灾难". 对于一个高维数据数 D={X1,X2,...,XN}D ...
- 稀疏学习、稀疏表示、稀疏自编码神经网络、字典学习、主成分分析PCA、奇异值分解SVD 等概念的梳理,以及常用的特征降维方法
稀疏学习.稀疏表示.稀疏自编码神经网络.字典学习.主成分分析PCA.奇异值分解SVD 等概念的梳理,以及常用的特征降维方法 关于稀疏 稀疏编码 Sparse Coding 与字典学习 神经网络的正则化 ...
- 降维-基于RDD的API
降维-基于RDD的API • Singular value decomposition (SVD) o Performance o SVD Example • Principal component ...
- PCA降维算法原理及代码实现(python和matlab)
常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...
- 机器学习之数据转换(七)——降维
降维是机器学习中很重要的一种思想.在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为" 维度灾 ...
- 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...
- OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...
- 关于机器学习中的一些常用方法的补充
前言 机器学习相关算法数量庞大,很难一一穷尽,网上有好事之人也评选了相关所谓十大算法(可能排名不分先后),它们分别是: 1. 决策树 2. 随机森林算法 3. 逻辑 ...
最新文章
- Django中多种重定向方法使用
- Nginx中木马解决方法
- Solaris 11的ip地址配置
- hadoop的限制/不足
- springBoot整合rabbitmq并测试五种常用模型
- 《梦断代码》读后感2
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
- 3种时间复杂度实现不同类型的无序数组去重
- linux shell读取文件,shell脚本中读取文件的方法
- Java语言设计文本查找器和文本编辑器
- TP-LINK 路由器 无线桥接 设置
- DSP Bootloader说明
- 移位加密字母C语言,替代密码和置换密码地C语言实现
- 春节不断电之机器学习 —— 决策树
- 前台图片压缩转换base64提交到后台
- JDK代理模式学习笔记
- 概率论—随机事件与随机事件的概率
- 打字慢能学计算机吗,提高电脑打字速度,实现快速盲打,这样的学习方法很管用!...
- C语言:输入三角形边长,求面积。
- Python——打开文件