【机器学习】求矩阵的-1/2次方的方法
目录
一、背景描述
二、D^(-1/2)的理论基础
三、代码实现
四、总结
一、背景描述
今天在看如下论文的时候:
态势感知+图卷积网络在电力系统连锁故障中的应用-机器学习文档类资源-CSDN文库https://download.csdn.net/download/mzy20010420/86745616?spm=1001.2014.3001.5503讲到了图卷积网络的部分,是这么描述的:
此步骤在计算图卷积层的输出,也就是如下流程图中①的地方:
对于图过滤器,需要计算D矩阵的-1/2次方。由于本科阶段的线性代数并没由涉及到这一部分,导致不会算。由此引发了今天的讨论。
二、D^(-1/2)的理论基础
A^{-1/2}就是A^{1/2}的逆矩阵.
这里A^{1/2}指A的算术平方根,通常只对A是Hermite正定矩阵而言(因为一般来讲平方根是多值的,只有正定阵容易规定取其中正定的平方根).对Hermite正定矩阵,利用谱分解定理容易证明存在唯一的Hermite正定矩阵B使得A=B^2.
具体理论基础如图手动推导所示:
其中,P是矩阵A的特征矩阵,需要归一化处理,而尖表示有矩阵特征值组成的对角矩阵,然后算矩阵中的每个元素的(-1/2)次方。
也就是说,我们需要先算出矩阵D的特征值和特征向量。具体算法如下示例:
我们下面来看一个例子:
我们带入:
可得:
解得:
当为2时:
同理,当为4时:
如果用python计算,会将矩阵向量归一化处理。
三、代码实现
代码如下:
import numpy as npdata = np.random.randint(1, 8, size=4).reshape((2, 2))
print(data)'''
#这是给矩阵中的每一个元素开根号,不是想要的那种
data1 = data ** (-1 / 2)
print(data1)
'''#正式开始!
# v 为特征值 Q 为特征向量
v, Q = np.linalg.eig(data)
V = np.diag(v**(-0.5))
# print(V)
T = Q * V * np.linalg.inv(Q)
print(T)'''
#下面这种不是求逆的方法,只是对Q的每一个值取了倒数,不对!
T1 = Q * V * (Q**(-1))
print(T1)
'''
结果:
[[4 1][3 7]]
[[ 0.46186147 -0. ][-0. 0.2963961 ]]
可以看出,最终的输出与之前手动推算的相同,确实是对角矩阵。
下面对比一下两个貌似正确的求逆的方法:
代码:
import numpy as npdata = np.random.randint(1, 8, size=4).reshape((2, 2))
print(data)'''
#这是给矩阵中的每一个元素开根号,不是想要的那种
data1 = data ** (-1 / 2)
print(data1)
'''#正式开始!
# v 为特征值 Q 为特征向量
v, Q = np.linalg.eig(data)
V = np.diag(v**(-0.5))
# print(V)
T = Q * V * np.linalg.inv(Q)
print(f'T is {T}')#下面这种不是求逆的方法,只是对Q的每一个值取了倒数,不对!
T1 = Q * V * (Q**(-1))
print(f"T1 is {T1}")
结果:
[[7 3][1 3]]
T is [[ 0.31751691 -0. ][-0. 0.57220385]]
T1 is [[0.3616512 0. ][0. 0.65173918]]
明显,是不同的。经过分析,第一种是对的。
四、总结
由于手头没有课本,线性代数部分的知识源自如下链接:
线性代数精华——矩阵的特征值与特征向量 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/104980382做机器学习,数学功底很重要。无论是高等数学还是线性代数。很多知识可能在本科阶段没有涉及,因此需要不断地学习才能满足需要!
【机器学习】求矩阵的-1/2次方的方法相关推荐
- 求矩阵的逆的三种方法
我们知道求矩阵的逆具有非常重要的意义,本文分享给大家如何针对3阶以内的方阵,求出逆矩阵的3种手算方法:待定系数法.伴随矩阵法.初等变换法(只介绍初等行变换) 待定系数法求逆矩阵 1 首先,我们来看如何 ...
- MATLAB中求矩阵非零元的坐标
MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...
- C++学习日记#2——幂法求矩阵的主特征值
幂法的主要作用是求矩阵的主特征值,这种方法特别适用于求大型稀疏矩阵. 定理: 设A∈有n个线性无关的特征向量,主特征值满足>·····,则对任意非零初始向量(0),按照下述方法构造的向量序列{} ...
- [机器学习-数学] 矩阵求导(分母布局与分子布局),以及常用的矩阵求导公式
一, 矩阵求导 1,矩阵求导的本质 矩阵A对矩阵B求导: 矩阵A中的每一个元素分别对矩阵B中的每个元素进行求导. A1×1A_{1\times1}A1×1, B1×1B_{1\times1}B1×1 ...
- matlab求矩阵均值向量,如何求一个矩阵的均值向量
四.线性方程组 考试内容 线性方程组的克莱姆(Cramer)法则 线性方程组有解和无解的判定齐次线性方程组的基础解系和通解非齐次线性方程组的解与相应的齐次线性方程组(导出组)的解之间的关系非齐次线性方 ...
- matlab中怎么求矩阵的特征值和特征向量
https://jingyan.baidu.com/article/d169e186047d86436611d88a.html matlab如何求矩阵特征值_xiaolu的专栏-CSDN博客_matl ...
- C语言函数题- 求矩阵不靠边元素之和
6-16 求矩阵不靠边元素之和 (10分) 求矩阵的所有不靠边元素之和,矩阵行的值m从键盘读入(2<=m<=10),调用自定义函数Input实现矩阵元素从键盘输入,调用Sum函数实现求和. ...
- Java黑皮书课后题第8章:*8.2(求矩阵对角线元素的和)使用下面的方法头编写一个方法,求n*n的double类型矩阵中主对角线上所有数字的和。编写一个程序,读取一个4*4的矩阵,显示主对角线和
*8.2(求矩阵对角线元素的和)使用下面的方法头编写一个方法,求n*n的double类型矩阵中主对角线上所有数字的和.编写一个程序,读取一个4*4的矩阵,显示主对角线和 题目 题目描述与运行示例 破题 ...
- Java黑皮书课后题第8章:*8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和。编写一个测试程序,读取3*4矩阵,显示每列元素的和
*8.1(求矩阵中各列数字的和)使用下面的方法头编写一个方法,求矩阵中特定列的所有元素的和.编写一个测试程序,读取3*4矩阵,显示每列元素的和 题目 题目描述与运行示例 破题 代码 题目 题目描述与运 ...
最新文章
- 公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
- oracle11gr2查看数据库状态,Oracle 11gR2数据库文件丢失后的恢复测试
- python学习笔记之装饰器、递归、算法(第四天)
- 【每日一题】4月8日题目精讲 黑白树
- matlab phog,科学网—UCF 大牛 Prof. Shah 课题组代码合集 - 张重的博文
- (数据库系统概论|王珊)第十章数据库恢复技术-第四、五、六、七节:数据库恢复技术和数据库镜像
- 数据中台:不是产品,不是技术,到底是什么?(附完整PPT下载)
- 【迁移2018-05-08 14:14:27】全局唯一ID生成
- [复变函数]第17堂课 5 解析函数的 Laurent 展式与孤立奇点 5. 1 解析函数的 Laurent 展式...
- windows下安装nodejs多版本管理工具nvm-windows
- c# 计算圆锥的体积_急求用c#计算圆柱体和圆锥体的体积的代码,下面是要求:
- SAP License:值字段更改注意事项
- C#笔记17 DataTime类型、断言、internal关键字、GUID、Excel操作、正则表达式、访问剪贴板、设计模式、版本控制
- zjoi2018day1 游记
- 甲骨文裁员犯的病,任正非早在10年前就开出了药方
- oracle imp指定表空间导入,imp导入其它表空间数据库
- 压缩access数据库
- mysql 授权root帐号可以远程访问,导入sql文件,登录mysql用root帐号,设置密码
- Java字节码编程之非常好用的javassist
- HTML Purifier解决XSS问题