【机器学习】求矩阵的-1/2次方的方法

目录

一、背景描述

二、D^(-1/2)的理论基础

三、代码实现

四、总结


一、背景描述

今天在看如下论文的时候:

态势感知+图卷积网络在电力系统连锁故障中的应用-机器学习文档类资源-CSDN文库icon-default.png?t=M85Bhttps://download.csdn.net/download/mzy20010420/86745616?spm=1001.2014.3001.5503讲到了图卷积网络的部分,是这么描述的:

【机器学习】求矩阵的-1/2次方的方法_第1张图片

此步骤在计算图卷积层的输出,也就是如下流程图中①的地方:

【机器学习】求矩阵的-1/2次方的方法_第2张图片 

对于图过滤器,需要计算D矩阵的-1/2次方。由于本科阶段的线性代数并没由涉及到这一部分,导致不会算。由此引发了今天的讨论。


二、D^(-1/2)的理论基础

A^{-1/2}就是A^{1/2}的逆矩阵.
这里A^{1/2}指A的算术平方根,通常只对A是Hermite正定矩阵而言(因为一般来讲平方根是多值的,只有正定阵容易规定取其中正定的平方根).对Hermite正定矩阵,利用谱分解定理容易证明存在唯一的Hermite正定矩阵B使得A=B^2.

具体理论基础如图手动推导所示:

【机器学习】求矩阵的-1/2次方的方法_第3张图片

 其中,P是矩阵A的特征矩阵,需要归一化处理,而尖表示有矩阵特征值组成的对角矩阵,然后算矩阵中的每个元素的(-1/2)次方。

也就是说,我们需要先算出矩阵D的特征值和特征向量。具体算法如下示例:

我们下面来看一个例子:

【机器学习】求矩阵的-1/2次方的方法_第4张图片

我们带入:

 可得:

【机器学习】求矩阵的-1/2次方的方法_第5张图片

 解得:

 当为2时:

【机器学习】求矩阵的-1/2次方的方法_第6张图片

 

同理,当为4时:

【机器学习】求矩阵的-1/2次方的方法_第7张图片

 

 如果用python计算,会将矩阵向量归一化处理。


三、代码实现

 代码如下:

import numpy as np

data = 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 np

data = 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)icon-default.png?t=M85Bhttps://zhuanlan.zhihu.com/p/104980382做机器学习,数学功底很重要。无论是高等数学还是线性代数。很多知识可能在本科阶段没有涉及,因此需要不断地学习才能满足需要!

你可能感兴趣的:(机器学习在态势感知的应用,机器学习,矩阵,人工智能)