在Python中拟合线性变换

Mos*_*afa 5 python statistics linear-algebra linear-regression scikit-learn

我有两组向量 x_i \\in R^n 和 z_i \\in R^m

\n\n

我想找到一个变换矩阵 W\n使得 W x_i 近似 z_i,

\n\n

即我想找到最小化的 W: sum_i || W x_i \xe2\x88\x92 z_i ||^2

\n\n

有没有Python函数可以做到这一点?

\n

eic*_*erg 4

使用这个克罗内克乘积恒等式,它就变成了一个经典的线性回归问题。但即使没有这个,它也只是线性回归设置的转置。

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
Run Code Online (Sandbox Code Playgroud)

使用Z和我们可以通过求解 argmin_W ||X^TW^T - Z^T||^2 来X估计W

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)
Run Code Online (Sandbox Code Playgroud)