在python中进行线性变换

时间:2015-01-16 08:49:04

标签: python statistics scikit-learn linear-algebra linear-regression

我有两组矢量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功能可以做到这一点?

1 个答案:

答案 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

使用ZX,我们可以通过求解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)