Let X
是所有 100,000 个的集合x
你得到了(这样i
第 列X
等于x_i
第一个向量)。
以同样的方式我们可以定义Y
and C
作为 2D 集合y
s and c
分别为。
你想解决的问题是为了A
and B
这样
C = AX + BY
您有 2 * 50,000^2 个未知数(所有条目A
and B
) and numel(C)
方程。
因此,如果您拥有的数据向量数量为 100,000,您将拥有一个解决方案(最多线性相关样本)。如果您有超过 100,000 个样本,您可能会寻求最小二乘解。
重写:
C = [A B] * [X ; Y] ==> [X' Y'] * [A';B'] = C'
所以,我想
[A' ; B'] = pinv( [X' Y'] ) * C'
在Matlab中:
ABt = pinv( [X' Y'] ) * C';
A = ABt(1:50000,:)';
B = ABt(50001:end,:)';
如我错了请纠正我...
EDIT:
看来这里对于维度有相当大的争议。所以,我会尽力让它尽可能清楚。
Model:有两个(未知)矩阵A
and B
,每个尺寸为 50,000x50,000(总共 5e9 个未知数)。
一个观察值是一个三元组vectors: (x
,y
,c
)每个这样的向量有 50,000 个元素(总共 150,000 个观察点每个样本)。基本模型假设是观测值是由以下方式生成的c = Ax + By
在这个模型中。
任务: given n
观察结果(即n
三胞胎的vectors { (x_i
, y_i
, c_i
) }_i=1..n
)的任务是发现A
and B
.
现在,每个样本(x_i
,y_i
,c_i
) 导出 50,000 个以下形式的方程c_i = Ax_i + By_i
在未知中A
and B
. If样本数n
is greater超过 100,000,那么就有超过 50,000 * 100,000 ( > 5e9 ) 个方程,系统为过度约束.
为了以矩阵形式编写系统,我建议将所有观察结果堆叠到矩阵中:
- 一个矩阵
X
尺寸 50,000 xn
以其i
-th 列等于观察到的x_i
- 一个矩阵
Y
尺寸 50,000 xn
以其i
-th 列等于观察到的y_i
- 一个矩阵
C
尺寸 50,000 xn
以其i
-th 列等于观察到的c_i
有了这些矩阵,我们可以将模型写为:
C = A*X + B*Y
我希望这能让事情澄清一点。
感谢@Dan 和@woodchips 的兴趣和启发性的评论。
编辑(2):
将以下代码提交至octave http://weboctave.mimuw.edu.pl/weboctave/web/index.php#menus。在这个例子中,我只使用 2 个维度,而不是 50,000 个维度n=100,000
我接受的观察n=100
:
n = 100;
A = rand(2,2);
B = rand(2,2);
X = rand(2,n);
Y = rand(2,n);
C = A*X + B*Y + .001*randn(size(X)); % adding noise to observations
ABt = pinv( [ X' Y'] ) * C';
检查地面实况模型之间的差异(A
and B
)并恢复ABt
:
ABt - [A' ; B']
Yields
ans =
5.8457e-05 3.0483e-04
1.1023e-04 6.1842e-05
-1.2277e-04 -3.2866e-04
-3.1930e-05 -5.2149e-05
这足够接近于零。 (请记住,观察结果是有噪声的,并且解是最小二乘解)。