【问题标题】:Fit a linear transformation in python在python中拟合线性变换
【发布时间】:2015-03-14 20:00:19
【问题描述】:

我有两组向量 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 函数可以做到这一点?

【问题讨论】:

  • 你们各有多少?我认为您正在寻找最小二乘 - 对吗?
  • 我每个都有 5000 个向量。 x_i 的维度为 300,z_i 的维度为 800。是的,它是最小二乘。
  • 您正在尝试使用 Stack Overflow 根本不支持的一些数学格式...请让您的问题更具可读性。
  • 从你的问题中不清楚 - 你熟悉 numpy 吗?
  • 不,将 numpy 放入标签是错误的

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


【解决方案1】:

使用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 ||X^T W^T - Z^T||^2来估计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)

【讨论】:

  • 嗨,你介意在这一步上详细说明一下吗:Z = Z_clean + rng.randn(*Z_clean.shape) * .001
  • 我根据模型生成干净的目标Z_clean。然后我添加了噪声(您要查询的行就是这样做的),以表明即使数据受到轻微干扰,该方法也有效。噪声是高斯噪声,因为最小二乘估计隐含地假设高斯噪声。
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2020-04-10
  • 2017-12-17
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
相关资源
最近更新 更多