改善严重条件矩阵

时间:2013-09-12 02:22:52

标签: matlab matrix sparse-matrix matrix-inverse regularized

我有一个条件差的矩阵,其rcond()接近于零,因此,该矩阵的逆矩阵并不正确。我尝试过使用pinv(),但这并没有解决问题。这就是我采取相反的方式:

X = (A)\(b);

我查找了这个问题的解决方案,并找到了this link(最后的解决方案)来改进矩阵。那里的解决方案建议使用它:

A_new = A_old + c*eye(size(A_old));

c > 0。到目前为止,采用这种技术可以使矩阵A更好地调节,并且所得到的解决方案看起来更好。但是,我使用c的不同值进行了调查,结果解决方案取决于所选c的值。

除了手动调查c的值之外,是否有一种自动方式可以找到c的值,为此我获得了最佳解决方案?

3 个答案:

答案 0 :(得分:13)

在离散逆理论中,将一个小值c添加到即将被反转的矩阵A的对角线上,称为阻尼反演和要添加的小值c被称为Marquardt-Levenberg系数。有时矩阵A具有零或接近零的特征值,由此矩阵变为奇异;在对角线元素上增加一个小的阻尼系数使其稳定。 c的值越大,阻尼越大,矩阵求逆越稳定,但距离真正的解决方案更远。 c的值越小,阻尼越小,倒置矩阵越接近真实的倒置矩阵,但它可能会变得不稳定。 有时使用的一种“自适应阻尼”技术是 - 以c的测试值开始,反转矩阵A,然后减小c的值,再次进行反演,依此类推。因为A再次变为奇异而在倒置矩阵中得到奇怪的值时会停止,就像真正的大数字一样。 我认为这并不能完全回答你的问题,但是将它放在评论中太久了。

答案 1 :(得分:10)

正如评论中已经指出的那样,问题的答案关键取决于您的申请。也许添加身份矩阵的一小部分是正确的事情,也许不是。为了确定你需要告诉我们:这个矩阵是如何产生的?那你需要什么逆?

两种常见情况是:

  • 如果您完全了解矩阵A,例如因为它是一般线性模型b = A * X中的设计矩阵,所以修改它不是一个好主意。在这种情况下,矩阵定义了一个线性方程组,如果矩阵是单数,这意味着该系统没有唯一的解。要从无限多种可能的解决方案中选择一个,有不同的策略:X = A \ b选择具有尽可能多的零系数的解,而X = pinv(A) * b选择具有最小L2范数的解。请参阅pinv

  • 文档中的示例
  • 如果根据数据估算矩阵A,例如LDA分类器的协方差矩阵,你有理由相信真值不是单数,奇点只是由于没有足够的数据点来估算,然后应用正则化或"收缩"通过添加一个小的倍数的单位矩阵是一种常见的策略。在这种情况下,Schäfer and Strimmer (2005)描述了一种从数据本身估计最优正则化系数的方法。

但我确定还有其他案例也有其他答案。

答案 2 :(得分:6)

A的对角线上添加小值大致相当于在最小二乘问题Ax=b中引入L2范数regularization项。这是为了尽量减少残差以及增加的约束:

min ||Ax-b||^2 + lambda*||x||^2

其中lamdba控制给予最小化约束的权重与最小化残差范数。

通常使用某种cross-validation技术选择此参数。