广义逆矩阵,主要探讨矩阵A不是方阵时,方程组 Ax=b 的求解问题
A:mxn矩阵
方程组 Ax=b 有相容和不相容情况
相容情况时:因为解存在许多个,则需要找到极小范数解,向量范数,即一种向量大小的度量,极小范数,相当于当x为一维情况下最小解的意思
其极小范数解x=Gb, 其中G为A的极小范数g逆,需要满足一定性质。AGA=A,(GA)*=GA
分三种情况进行计算G
若A是行/列满秩,则G=(AR/AL)-1 AR为A的右逆,AL为A的左逆
右逆:AG=I,G=A*(AA*)-1
左逆 :GA=I G=(A*A)-1 A*
若rank(A)<min{m,n} 则需要对矩阵进行满秩分解A=CD
G=(DR)-1(CL)-1=D'*inv(DD') * inv(D'D)*D'
(DR)-1为D的右逆,(CL)-1为C的左逆
对不相容情况时:
解不存在,则退而求其次,我们求满足||Ax-b||的2范数最小,即最小二乘解
得到的解x=Gb 中,G成为A的最小二乘g逆, 该解存在多个,因此需要求解中范数最小的一个,于是称为极小最小二乘解
对应的G称为A的极小最小二乘g逆(Moore-Penrose广义g逆)记为A+,该逆存在且唯一
x=(A+)b
其求解方法与上面求解相容方程组的极小范数g逆一样
------------------------------------------------------------------------------------------------------------------------------------------------
在线性回归中,m个具有n个特征的样本,X*theta=Y (假设X存在广义逆pinv(X) pinv(X)*X*b=pinv(X)Y--->b= pinv(X)Y ) ,我们在使用正规方程组求解时的通式:theta=(inv(X*X))X*Y 其实(inv(X*X))X*就是X的一个广义逆(左逆),左逆的要求就是A必须为列满秩矩阵。
--------------------------------------------------------------------------------------------------------------------------------------------
下面讨论rank(A)<min{m,n}
因为JAMA包中好像没有直接可以求广义逆的函数,因此需要探讨:
此时需要用svd对A进行分解,svd(A)=R*Sr*P' R为左奇异矩阵,P为右奇异矩阵,Sr为奇异值阵列
则求解时可以化简如下:
/**
* [ Sr 0]
* 求广义逆 A=R* [ 0 0] *P'
*
* A=[R1,R2]* [ Sr 0] *[P1']
* [ 0 0] [P2']
*
* A+=inv([R1,R2]* [ Sr 0] *[P1'])
[ 0 0] [P2']
* A+=P1*Sr*R1'
*
* 注意P R均为正交矩阵 inv(P)=P.transpose()
* */
-------------------------------------------------------------------------------------------
杭州趋数网络科技有限公司 数据挖掘/数据分析师 花京华