博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵的广义逆及python实践
阅读量:7208 次
发布时间:2019-06-29

本文共 1073 字,大约阅读时间需要 3 分钟。

机器学习的代码中经常有求矩阵的广义逆,本文先从概念上总结了矩阵的广义逆,然后用python的numpy库实践

概念

矩阵的广义逆(Generalized inverse)也称为伪逆(pseudo inverse),假设一个矩阵 {\displaystyle A\in \mathbb {R} ^{n\times m}}及另一矩阵 {\displaystyle A^{\mathrm {g} }\in \mathbb {R} ^{m\times n}},若 {\displaystyle A^{\mathrm {g} }} 满足 {\displaystyle AA^{\mathrm {g} }A=A},则 {\displaystyle A^{\mathrm {g} }} 即为A的广义逆矩阵。

提出矩阵的广义逆的原因

提出矩阵的广义逆的目的是对于可逆矩阵以外的矩阵(例如非方阵的矩阵)可以找到一矩阵有一些类似逆矩阵的特性。任意的矩阵都存在广义逆,若一矩阵存在逆矩阵,逆矩阵即为其唯一的广义逆阵。

考虑以下的线性方程组:

{\displaystyle Ax=y} , 其中 A为 {\displaystyle n\times m} 的矩阵,而y属于A的列空间。

若矩阵A是可逆矩阵,则 {\displaystyle x=A^{-1}y} 即为方程式的解。而若矩阵A是可逆矩阵{\displaystyle AA^{-1}A=A.}

若矩阵A不可逆或是 {\displaystyle n\neq m},需要一个 {\displaystyle m\times n} 矩阵A^g使得下式成立:

{\displaystyle AA^gy=y}

因此 {\displaystyle A^gy} 是线性方程组 {\displaystyle Ax=y} 的解,此m\times n阶的矩阵 A^g 也使{\displaystyle AA^gA=A}成立。

因此可以用以下的方式定义广义逆矩阵:若一个n\times m的矩阵A, {\displaystyle m\times n} 的矩阵A^g若可以使{\displaystyle AA^gA=A}成立,则矩阵A^g是A的广义逆矩阵。

矩阵的广义逆的种类

{\displaystyle A\in \mathbb {R} ^{n\times m}}{\displaystyle A^{\mathrm {g} }\in \mathbb {R} ^{m\times n}}

(1) {\displaystyle AA^{\mathrm {g} }A=A}

(2) {\displaystyle A^{\mathrm {g} }AA^{\mathrm {g} }=A^{\mathrm {g} }}

(3) {\displaystyle (AA^{\mathrm {g} })^{\mathrm {T} }=AA^{\mathrm {g} }}

(4) {\displaystyle (A^{\mathrm {g} }A)^{\mathrm {T} }=A^{\mathrm {g} }A} .

{\displaystyle A^{\mathrm {g} }} 满足(1),即A的广义逆阵。

若满足(1)和(2),则为A的generalized reflexive inverse。

若四个条件都满足,则为A的Moore–Penrose pseudoinverse。

python实践

下面用numpy.linalg.pinv实践求矩阵的广义逆

# 定义一个矩阵In [26]: A=np.array([[1, 2], [3, 4],[5,6]])In [27]: AOut[27]: array([[1, 2],       [3, 4],       [5, 6]])# 求矩阵的伪逆In [28]: pinv = np.linalg.pinv(A)In [29]: pinvOut[29]: array([[-1.33333333, -0.33333333,  0.66666667],       [ 1.08333333,  0.33333333, -0.41666667]])复制代码

测试一下

# 中间变量In [31]: mid = np.dot(A, pinv)# 满足伪逆的定义,得回了原矩阵AIn [33]: np.dot(mid,A)Out[33]: array([[1., 2.],       [3., 4.],       [5., 6.]])复制代码

因此可以看出,numpy.linalg.pinv的结果(上面的pinv矩阵)满足A A^g A=A


参考资料:

[1] wikipedia 广义逆阵

[2]


转载地址:http://nylum.baihongyu.com/

你可能感兴趣的文章
UIViewController函数调用顺序
查看>>
第三方框架的使用
查看>>
配置Eclipse支持MacBook Pro Retina屏幕的办法(解决Retina屏幕下eclipse字体变虚的问题)...
查看>>
python导包路径的修改
查看>>
C语言第十一次作业--函数嵌套调用
查看>>
hdu 1728 逃离迷宫 *
查看>>
将Word文档转化为HTML格式的文档
查看>>
WCF
查看>>
IDE安装Lombok插件提高开发效率
查看>>
转://使用showplan.sql分析sql Performance
查看>>
第七课:增量分析
查看>>
【总结整理】JQuery基础学习---动画
查看>>
A. Round House_数学问题
查看>>
LeetCode OJ:Remove Nth Node From End of List(倒序移除List中的元素)
查看>>
0920编译原理词法分析
查看>>
浅谈数位DP的dfs写法
查看>>
Linux下的bash对拍
查看>>
C++ STL标准入门
查看>>
移动端页面制作2
查看>>
UE4中的常量材质实例和动态材质实例
查看>>