http://blog.csdn.net/pipisorry/article/details/52241141
本blog主要内容有:矩阵的奇异性、条件数与病态矩阵、矩阵求逆。
若n阶矩阵A的行列式不为零,即 |A|≠0,则称A为非奇异矩阵或满秩矩阵,否则称A为奇异矩阵或降秩矩阵。
奇异矩阵是线性代数的概念,就是对应的行列式等于0的方阵。
首先,看这个矩阵是不是方阵(即行数和列数相等的矩
阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。
不过限定在某个知识范围内是指方阵,例如线性代数当中只对方阵进行奇异矩阵的定义。正常来讲是不限定必须是方阵的,比如在奇异值分解当中,用作估计的时候会定义奇异值矩阵不满秩的矩阵为奇异阵,当然就不再限定是方阵。这种情况下矩阵不可求广义逆,即使求莫奈伪逆也要用特殊的方法,另外这种矩阵如果有物理意义的话,往往不满足正交核函数分解的条件。
优化有两大难题,一是:局部最小值,二是:ill-condition病态问题。前者俺就不说了,大家都懂吧,我们要找的是全局最小值,如果局部最小值太多,那我们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。那下面我们来聊聊ill-condition。
假设我们有个方程组AX=b,我们需要求解X。如果A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。
举个例子
左边的那个。第一行假设是我们的AX=b,第二行我们稍微改变下b,得到的x和没改变前的差别很大。第三行我们稍微改变下系数矩阵A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵A或者b太敏感了。又因为一般我们的系数矩阵A和b是从实验数据里面估计得到的,所以它是存在误差的,如果我们的系统对这个误差是可以容忍的就还好,但系统对这个误差太敏感了,以至于我们的解的误差更大,那这个解就太不靠谱了。所以这个方程组系统就是ill-conditioned病态的,不正常不稳定有问题的。
右边那个就叫well-condition的系统了。
对于一个ill-condition的系统,输入稍微改变下,输出就发生很大的改变,这表明我们的系统不能实用。例如对于一个回归问题y=f(x),我们是用训练样本x去训练模型f,使得y尽量输出我们期待的值,例如0。那假如我们遇到一个样本x’,这个样本和训练样本x差别很小,面对他,系统本应该输出和上面的y差不多的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一个人脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。
奇异的本质原因在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为什么这个矩阵为什么会有大的条件数,事实上,正规阵在二范数下的条件数就可以表示成 abs(最大特征值/最小特征值)。
所以如果一个系统是ill-conditioned病态的,我们就会对它的结果产生怀疑。那到底要相信它多少呢?我们得找个标准来衡量吧,因为有些系统的病没那么重,它的结果还是可以相信的。终于回来了,上面的condition number就是拿来衡量ill-condition系统的可信度的。
条件数是线性方程组Ax=b的解对b中的误差或不确定度的敏感性的度量。数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A的逆‖,对应矩阵的3种范数,相应地可以定义3种条件数。
condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。
从线性代数的分析可知,矩阵的条件数总是大于1,正交矩阵的条件数等于1,奇异矩阵的条件数为无穷大,而病态矩阵的条件数则为比较大的数据(远大于1)。也就是说奇异矩阵一定是病态的!
如果方阵A是非奇异的,那么A的conditionnumber定义为:
也就是矩阵A的norm乘以它的逆的norm。所以具体的值是多少,就要看你选择的norm是什么了。
如果方阵A是奇异的,那么A的condition number就是正无穷大了。
实际上,每一个可逆方阵都存在一个condition number。但如果要计算它,我们需要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。
当然,这个定义依赖于范数的选取。
奇异值分解,多项式求根,特征值和其它许多问题的条件数也可以有定义。
通常,如果一个数值问题是适定的,它可以表达为一个函数
映射它的数据(一个实数的 元组 )到它的解(一个实数的 元组 )。它的条件数则定义为解中的相对误差的半径和数据中的相对误差的比的最大值,取遍整个问题的定义域:
其中
是问题中的数据的偏差的某个合理的小数值。如果
也是可微的,这可以近似的表示为范数就相当于衡量一个矩阵的大小,我们知道矩阵是没有大小的,但上面不是要衡量一个矩阵A或者向量b变化的时候,我们的解x变化的大小吗?所以肯定得要有一个东西来度量矩阵和向量的大小吧?它就是范数,表示矩阵大小或者向量长度。对于AX=b,我们可以有以下的结论:
也就是我们的解x的相对变化和A或者b的相对变化是有像上面那样的关系的,其中k(A)的值就相当于倍率,相当于x变化的界。
一句话总结:condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。
[wikipedia: 条件数]
皮皮blog
非奇异正方矩阵A的逆矩阵A-1
m*n(m!=n)的长方形满列秩矩阵的左伪逆矩阵(A^HA)^-1A^H, 满行秩矩阵的右伪逆矩阵A^H(AA^H)^-1
秩亏缺矩阵的逆矩阵:Moore-Penrose逆矩阵
[张贤达: 矩阵分析与应用 1.7逆矩阵与伪逆矩阵]
L2范数有助于处理条件数 condition number不好的情况下矩阵求逆很困难的问题。
如将下面的奇异矩阵XTX改造一下再求逆:
[最优化方法:范数和规则化 ]
还有SVD分解的方法?Moore-Penrose逆矩阵?
皮皮blog
from: http://blog.csdn.net/pipisorry/article/details/52241141
ref: [张贤达: 矩阵分析与应用]