我有矩阵系统:

A×B=C

Aa 经过 nBn 经过 b. 。两个都 AB 未知,但我有部分信息 C (我有一些价值观,但不是全部)和 n 选择足够小,系统预计会受到过度约束。不要求 全部 行中 A 或列中 B 受到过度约束。

我正在寻找类似的东西 最小二乘法 线性回归 找到最适合该系统的系统(注意:我知道不会有一个独特的解决方案,但我想要的只是最好的解决方案之一)


举个具体的例子;所有的 a 和 b 都是未知的,所有的 c 都是已知的,并且 ? 被忽略。我想找到 A 最小二乘解仅考虑已知的 c。

[ a11, a12 ]                                     [ c11, c12, c13, c14, ?   ]
[ a21, a22 ]   [ b11, b12, b13, b14, b15]        [ c21, c22, c23, c24, c25 ]
[ a31, a32 ] x [ b21, b22, b23, b24, b25] = C ~= [ c31, c32, c33, ?,   c35 ]
[ a41, a42 ]                                     [ ?,   ?,   c43, c44, c45 ]
[ a51, a52 ]                                     [ c51, c52, c53, c54, c55 ]

请注意,如果 B 被修剪为仅 b11 和 b21 并且未知的第 4 行被剔除,那么这几乎是一个标准的最小二乘线性回归问题。

有帮助吗?

解决方案

我不知道如何处理缺失的值,所以我将忽略这个问题。

没有独特的解决方案。要找到最佳解决方案,您需要某种指标来判断它们。我假设你想使用最小二乘度量,即A 和 B 的最佳猜测值是最小化数字 [C_ij-(A B)_ij]^2 之和的值。

您没有提到的一件事是如何确定要用于 n 的值。简而言之,如果 1 <= n <= b,我们就可以想出“好的”解决方案。这是因为 1 <=rank(span(C)) <= b。其中rank(span(C)) = C 的列空间的维数。请注意,这是假设 a >= b。为了更正确,我们会写 1 <=rank(span(C)) <= min(a,b)。

现在,假设您选择了 n,使得 1 <= n <= b。如果您选择 A 的列,使得 span(A) = span(C 的前 n 个特征向量),您将最小化残差平方和。如果没有任何其他充分的理由,只需选择 A 的列作为 C 的前 n 个特征向量。一旦你选择了A,你就可以用通常的线性回归方法得到B的值。IE。B = (A'A)^(-1)A'C

其他提示

如上所述,该问题是不正确的。

让A,B和C = 5,成为标量。你要求解决 A * B = 5 它有无穷无尽的解决方案。

根据上面提供的信息,一种方法是尽量减少 函数g定义为

g(A,B)= || AB-C || ^ 2 = trace((AB-C)*(AB-C))^ 2

使用牛顿法或准割线法(BFGS)。
(您可以在此处轻松计算渐变)。 M *是M的转置,乘法是隐含的。 (标准是frobenius规范......我删除了 强调F,因为它没有正确显示)

因为这是一个固有的非线性问题,标准线性 代数方法不适用。

如果您提供更多信息,我可以提供更多帮助。


还有一些问题:我认为问题在于没有问题 更多信息,没有<!>“最佳解决方案<!>”;我们要 确定我们正在寻找的更具体的想法。 一个想法,可能是<!>“sparsest <!>”;解。这个区域是 一个热门的研究领域,拥有一些最优秀的人才 在这里工作的世界(参见Terry Tao等人在核标准方面的工作) 这个问题虽然易于处理,但仍然很难。


不幸的是,我还没有评论,所以我会在这里添加我的评论。 如下所述,LM是解决这个问题的一种很好的方法,只是一种方法。 沿着牛顿式的方式接近两者 优化问题或非线性求解问题。

这是一个想法,使用您在上面给出的示例:让我们定义 两个新的向量,V和U,每个有21个元素(完全相同的定义数量) C)中的元素。

V恰好是C的已知元素,列有序,所以(用matlab表示法)

V = [C11; C21; C31; C51; C12; ....; C55]

U是一个向量,它是产品AB的列排序,离开了 元素对应'?'在矩阵C 中。将所有变量收集到x中 我们有
x = [a11,a21,... a52,b11,b21 ......,b25]。

f(x)= U(如上所定义)。

我们现在可以尝试使用您最喜欢的非线性最小二乘法求解f(x)= V.

顺便说一下,虽然下面的海报推荐模拟退火,但我建议 反对。它有一些问题,但它是一种启发式方法。当你有 强大的分析方法,如高斯牛顿或LM,我说使用它们。 (在我自己的 体验是)

一个疯狂的猜测:奇异值分解可能会成功吗?

你有几个选择。 Levenberg-Marquadt算法通常被认为是最佳的LS方法。 此处提供免费实施。但是,如果计算速度很快并且您有相当数量的参数,我强烈建议使用蒙特卡罗方法,例如模拟退火

您从答案中的一些参数开始,然后将其中一个增加一个随机百分比,直到最大值。然后,您可以计算系统的适应度函数。现在,这是诀窍。你不要丢掉坏的答案。你接受它们的Boltzmann概率分布。

P = exp(-(x-x0)/T)

其中T是温度参数,x-x0是当前适应值减去前一个。在x次迭代之后,将T减少固定量(这称为冷却计划)。然后,您为另一个随机参数重复此过程。随着T的减少,选择的解决方案越来越少,最终程序变成了“贪婪的搜索”。只接受改善适应性的解决方案。如果你的系统有很多免费参数(<!> gt; 10左右),那么这是唯一可以达到全局最小值的方法。这种拟合方法需要大约20分钟来编写代码,并且需要几个小时来调整。希望这会有所帮助。

仅供参考,Wolfram在旅行商问题的背景下对此进行了很好的讨论,并且我一直非常成功地使用它来解决一些非常困难的全局最小化问题。它比LM方法慢,但在大多数困难/相对较大的情况下要好得多。

基于以下认识:将B切割成单列并且使用未知数移除行将其转换为非常接近已知问题的方法,一种方法是:

  1. 具有随机值的种子A.
  2. 独立解决B的每一列。
  3. 重新设计问题,以便在给定步骤2中的B值的情况下解决A的每一行。
  4. 在第2步重复,直到事情解决。
  5. 我不知道这是否稳定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top