我有两组矢量x_i \ in R ^ n和z_i \ in R ^ m
我想找到一个转换矩阵W. 使得W x_i近似于z_i,
即。我想找到最小化的W:sum_i || W x_i - z_i || ^ 2
是否有Python功能可以做到这一点?
答案 0 :(得分:2)
使用this kronecker product identity它成为经典的线性回归问题。但即使没有它,它只是线性回归设置的转置。
import numpy as np
m, n = 3, 4
N = 100 # num samples
rng = np.random.RandomState(42)
W = rng.randn(m, n)
X = rng.randn(n, N)
Z_clean = W.dot(X)
Z = Z_clean + rng.randn(*Z_clean.shape) * .001
使用Z
和X
,我们可以通过求解argmin_W来调估W
|| X ^ T W ^ T - Z ^ T || ^ 2
W_est = np.linalg.pinv(X.T).dot(Z.T).T
from numpy.testing import assert_array_almost_equal
assert_array_almost_equal(W, W_est, decimal=3)