最近做数据挖掘又接触到线性代数,把逆和伪逆简单总结一下。
求逆
numpy.linalg.inv(a)
该函数求矩阵的逆,要求矩阵a是方阵并且非奇异。
判断方阵非奇异有如下充要条件:
- 一个方阵非奇异,当且仅当它满秩。
- 一个方阵非奇异,当且仅当它行列式不为0。
如果矩阵是奇异的,它就不存在逆矩阵,还有没有办法求一个近似解呢?答案就是伪逆矩阵。
求伪逆
伪逆矩阵可以顾名思义,它也叫广义逆矩阵。伪逆矩阵有Penrose定义和E.H.Moore定义,实质上它们是等价的,在这里不详述。
求伪逆的方法是对矩阵a进行奇异值分解(SVD),可以用numpy.linalg的函数:
numpy.linalg.inv(a)
伪逆矩阵的应用很多,最简单的就是求解最小二乘问题,其解的矩阵形式为
B=(XTX)-1XTY
如果X不是列满秩,那么XTX就不存在逆矩阵,此时就要求伪逆来代替。