3

、は50,000 X 1の次元のベクトルであり、は50,000X50,000の次元の行列c = Ax + Byであるタイプの方程式があります。cxyAB

Matlabで行列を見つける方法はAありますか?Bcxy

、、、の約100,000個のサンプルがcありxますyAそしてB、すべてのために同じままです。

4

1 に答える 1

5

X取得した100,000個すべてのコレクションとしxます(のi-番目の列が-番目のベクトルとX等しくなるようにしますx_i)。同じ方法で、をそれぞれsとsの2Dコレクションとして
定義できます。YCyc

あなたが解決したいのはAB

C = AX + BY

2 * 50,000 ^ 2の未知数(とのすべてのエントリ)と方程式がAあります。Bnumel(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,:)';

私が間違っている場合は私を訂正してください...

編集:
ここでは次元性にかなりの騒ぎがあるようです。それで、私はそれをできるだけ明確にするように努めます。

モデル: 2つの(不明な)行列がAありB、それぞれのサイズは50,000x50,000(合計5e9の不明)です。
観測はベクトルのトリプレットです:(x、、y)このような各ベクトルには50,000個の要素があります(各サンプルcで合計150,000個の観測点)。基礎となるモデルの仮定は、このモデルで観測値が生成されることです。タスク:与えられた観測値(つまり、ベクトルのトリプレット{(、、)} _ )が与えられた場合、タスクは明らかにすることです。c = Ax + By
nnx_iy_ic_ii=1..nAB

ここで、各サンプル(x_i、、 )はy_i、未知数とc_iの形式の50,000個の方程式を導き出します。サンプル数が100,000を超える場合、50,000 * 100,000(> 5e9)を超える方程式があり、システムは制約を超えていますc_i = Ax_i + By_iABn

システムを行列形式で記述するために、すべての観測値を行列にスタックすることを提案しました。

  • Xサイズが50,000xの行列でn、そのi3番目の列は観測されたものと同じです。x_i
  • Yサイズが50,000xの行列でn、そのi3番目の列は観測されたものと同じです。y_i
  • Cサイズが50,000xの行列でn、そのi3番目の列は観測されたものと同じです。c_i

これらの行列を使用して、モデルを次のように記述できます。

C = A * X + B * Y

これで少し問題が解決することを願っています。

@Danと@woodchipsに関心と啓発的なコメントをありがとう。

編集(2):
次のコードをオクターブに送信します。この例では、50,000次元ではなく、2つだけで作業します。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グラウンドトゥルースモデル(およびB)と復元されたモデルの違いを確認するABt

ABt - [A' ; B']

収量

  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

これはゼロに十分近いです。(観測値はノイズが多く、解は最小二乗法であることを忘れないでください)。

于 2013-01-24T13:34:36.240 に答える