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

news2024/10/7 10:13:32

目录

一、背景描述

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

三、代码实现

四、总结


一、背景描述

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

态势感知+图卷积网络在电力系统连锁故障中的应用-机器学习文档类资源-CSDN文库icon-default.png?t=M85Bhttps://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 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做机器学习,数学功底很重要。无论是高等数学还是线性代数。很多知识可能在本科阶段没有涉及,因此需要不断地学习才能满足需要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust之常用集合(一):向量(vector)

开发环境 Windows 10Rust 1.64.0VS Code 1.72.2 项目工程 这里继续沿用上次工程rust-demo 常用集合 Rust的标准库包括许多非常有用的数据结构,称为集合。大多数其他数据类型表示一个特定的值,但是集合可以包含多个值。与内置数组和元组类型不同&…

2022年数维杯数学建模A题银行效率评价与破产成因分析求解全过程文档及程序

2022年数维杯数学建模 A题 银行效率评价与破产成因分析 原题再现: 银行在国家经济社会发展过程中扮演者重要的决策,银行的破产会对企业和个人造成众多不利的影响。相比国内的银行,国际银行的倒闭频次更高,因此国际银行倒闭原因的…

一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件

文章目录一、Apache POI简介二、POI操作Excel构建maven项目导入依赖使用POI实现基本写操作使用POI实现大数据量写操作使用POI实现基本读操作使用POI读取不同类型的数据三、Easy Excel简介构建maven项目导入依赖实现写操作实现读操作目前市面上比较流行的操作Excel 文件工具大致…

【前端】vue阶段案例:vue-router使用流程

文章目录目标步骤1.配置映射关系2.导入路由并注册3.完成首页App.vue可能出现的问题:Component name "About" should always be multi-word参考目标 点击首页,则url变为/home,且下面显示的组件是Home组件点击关于,则url变…

更易用的OceanBase|生态工具征文大赛正式开启!

OceanBase 一直在思考,什么样的数据库对用户而言更易用? 更易用,除了功能完善、性能优秀、运行稳定的数据库系统,丰富多样的生态工具也必不可少。 作为一款完全自主研发的原生分布式数据库,OceanBase 的生态工具经历…

Java图片或视频生成GIF动图,发送微信

目录前言GIF简介代码生成图片合成GIF自定义GIF动图视频生成GIF发送微信小结前言 别人的博客文章中有动态显示这是怎么做到的呢?别人的微信发送的表情动态为什么是自己鬼畜视频?这些都是别人做到的,本文就是让自己也可以做到以上的事情&#…

Java基于springboot+vue的图书馆网上图书借阅系统 nodejs前后端分离

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括网上图书借阅系统的网络应用,在外国网上图书借阅系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。网上图书借阅系统具有网上图书信息管…

HTML小游戏3—— 机器人总动员(附完整源码)

💂 网站推荐:【神级源码资源网】【摸鱼小游戏】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的计算机相关知…

北京化工大学数据结构2022/10/27作业 题解

目录 问题 A: 二叉树的性质 问题 B: 二叉树的节点 问题 C: 满二叉树 问题 D: 完全二叉树的节点序号 -----------------------------------分割线------------------------------------------ 问题 E: 二叉树的深度 问题 F: 数据结构作业04 -- 二叉树的输入 递归版 迭代版…

【第一阶段:java基础】第4章:java控制结构

本系列博客是韩顺平老师java基础课的课程笔记 韩顺平P103-P1551. 顺序2. 分支3. 循环4. 跳转5. 编程思想1. 顺序 程序从上至下逐行执行,中间没有任何判断和跳转 2. 分支 单分支if双分支if-else多分支if - else if … - else嵌套分支:建议嵌套最好不要…

【水果派不吃灰】Raspberry Pi树莓派Linux系统下替换国内apt软件更新源

目录1. 前言2. 备份原始配置文件3. 修改原始文件3.1 软件更新源3.2 系统更新源4. 更新4.1 sudo apt-get update 更新软件源列表4.1 sudo apt-get upgrade 更新软件版本(时间会久点)4.1 sudo apt-get dist-upgrade4.1 sudo rpi-update 内核版本(尽量不更新&#xff0…

Web前端 | JavaScript(BOM编程和JSON)

✅作者简介:一位材料转码农的选手,希望一起努力,一起进步! 📃个人主页:每天都要敲代码的个人主页 🔥系列专栏:Web前端 💬推荐一款模拟面试、刷题神器,从基础到…

Matplotlib | 世界足球俱乐部排名可视化

文章目录🏳️‍🌈 1. 导入模块🏳️‍🌈 2. 示例数据🏳️‍🌈 3. 画布设置🏳️‍🌈 4. 画布区域主题分配🏳️‍🌈 5. 添加数据散点🏳️‍&#x1f…

Python学习六(进程)

1.简介 多进程在使用中是非常常见的,如果对多进程比较陌生,那可以换个说法,叫多任务。 那什么叫做多任务呢?顾名思义就是多个任务。比如我们使用电脑时,打开浏览器,是一个任务、打开视频,是一个…

MySQL是怎么保证数据不丢的

一.什么是两阶段提交 1.SQL语句(update user set name‘李四’ where id3)的执行流程是怎样的呢? 1.执行器先找引擎取 ID3这一行。ID 是主键,引擎直接用树搜索找到这一行。 2.如果 ID3 这一行所在的数据页本来就在内存中&#x…

【FLASH存储器系列二】非易失性存储器基本原理之EEPROM和FLASH

1 EEPROM 通过EPROM的原理分析我们知道,由于叠栅雪崩注入MOS晶体管(SAMOS)的结构特性(浮栅周围是二氧化硅的绝缘层),而且由于早期工艺的原因,这个二氧化硅层比较厚,势垒比较高&#…

HTTP协议

哈喽,友友你好呀~今天要给大家分享的是关于HTTP协议的相关知识点,这部分的知识在web开发中还是很重要的一部分知识,耐点心看完,肯定会有收获滴~~ 目录 1.什么是HTTP 2.HTTP协议工作过程 3.什么是抓包工具 4.HTTP协议格式 4.1 HTTP请求(Request) 4.2 HTTP响应(Response) …

基于javaweb的停车库管理系统(java+jsp+jquery+servlet+mysql)

基于javaweb的停车库管理系统(javajspjqueryservletmysql) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基…

补环境:vm2 transformer.js 源码分析

在补环境框架的文件夹里执行 vm2 文件能成功得到结果,但是将合并了环境和原 js 文件后的代码内容单独提取出来通过 vm2 调用却报错提示 SyntaxError: Use of internal vm2 state variable: 通过 transformer.js 源码,分析 VM2_INTERNAL_STATE…

【韩顺平老师讲MySQL】函数和多表查询

文章目录P33.数学函数P34.日期函数P37.加密函数P38.流程控制函数P39.查询增强P40.分页查询P41.分组查询P42.多子句查询P43.多表查询笛卡尔积(重难点)P44.多表查询P45.自连接P46.多行子查询P33.数学函数 # 绝对值 SELECT ABS(-12) FROM DUAL;# 十进制转为二进制 SELECT BIN(10) …