、は50,000 X 1の次元のベクトルであり、は50,000X50,000の次元の行列c = Ax + By
であるタイプの方程式があります。c
x
y
A
B
Matlabで行列を見つける方法はA
ありますか?B
c
x
y
、、、の約100,000個のサンプルがc
ありx
ますy
。A
そしてB
、すべてのために同じままです。
、は50,000 X 1の次元のベクトルであり、は50,000X50,000の次元の行列c = Ax + By
であるタイプの方程式があります。c
x
y
A
B
Matlabで行列を見つける方法はA
ありますか?B
c
x
y
、、、の約100,000個のサンプルがc
ありx
ますy
。A
そしてB
、すべてのために同じままです。
X
取得した100,000個すべてのコレクションとしx
ます(のi
-番目の列が-番目のベクトルとX
等しくなるようにしますx_i
)。同じ方法で、をそれぞれsとsの2Dコレクションとして
定義できます。Y
C
y
c
あなたが解決したいのはA
、B
C = AX + BY
2 * 50,000 ^ 2の未知数(とのすべてのエントリ)と方程式がA
あります。B
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,:)';
私が間違っている場合は私を訂正してください...
編集:
ここでは次元性にかなりの騒ぎがあるようです。それで、私はそれをできるだけ明確にするように努めます。
モデル: 2つの(不明な)行列がA
ありB
、それぞれのサイズは50,000x50,000(合計5e9の不明)です。
観測はベクトルのトリプレットです:(x
、、y
)このような各ベクトルには50,000個の要素があります(各サンプルc
で合計150,000個の観測点)。基礎となるモデルの仮定は、このモデルで観測値が生成されることです。タスク:与えられた観測値(つまり、ベクトルのトリプレット{(、、)} _ )が与えられた場合、タスクは明らかにすることです。c = Ax + By
n
n
x_i
y_i
c_i
i=1..n
A
B
ここで、各サンプル(x_i
、、 )はy_i
、未知数とc_i
の形式の50,000個の方程式を導き出します。サンプル数が100,000を超える場合、50,000 * 100,000(> 5e9)を超える方程式があり、システムは制約を超えています。c_i = Ax_i + By_i
A
B
n
システムを行列形式で記述するために、すべての観測値を行列にスタックすることを提案しました。
X
サイズが50,000xの行列でn
、そのi
3番目の列は観測されたものと同じです。x_i
Y
サイズが50,000xの行列でn
、そのi
3番目の列は観測されたものと同じです。y_i
C
サイズが50,000xの行列でn
、そのi
3番目の列は観測されたものと同じです。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
これはゼロに十分近いです。(観測値はノイズが多く、解は最小二乗法であることを忘れないでください)。