numpy中矩阵乘法的相关性

时间:2016-12-08 18:50:12

标签: python numpy linear-algebra

我正在玩一个简单的numpy示例,并且很难理解为什么矩阵乘法的关联属性

ABC = (AB)C = A(BC)

并不完全成立。我认为问题在于数值稳定性。但是如何解决呢?究竟是什么问题?

以下是线性回归的示例。我使用sklearn解决方案,因为它在关联分组之间提供了更多的分歧:

import numpy as np
np.random.seed(42)
num_samples = 100
M = 1000
sigma = 0.5


X = np.random.binomial(2, 0.4, (num_samples, M))

beta = np.zeros(M)
beta[5] = 1.0

y = X.dot(beta) + sigma*np.random.randn(num_samples)
"standardise y"
y = y - np.mean(y)
y = y/np.std(y)

"center and standardise X"
Xc = X - X.mean(axis=0)
xstd = X.std(axis=0)
mask = xstd > 1e-12
Xc = Xc[:, mask]

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(Xc ,y)
beta_hat_sklearn = lr.coef_


beta_hat_sklearn.T @ Xc.T @ Xc @ beta_hat_sklearn / num_samples
"equivalent < Python3.5"
beta_hat_sklearn.T.dot(Xc.T).dot(Xc).dot(beta_hat_sklearn) / num_samples
# 1.0000000000000009

beta_hat_sklearn.T @ (Xc.T @ Xc) @ beta_hat_sklearn / num_samples
"equivalent < Python3.5"
beta_hat_sklearn.T.dot(Xc.T.dot( Xc )).dot(beta_hat_sklearn )/ num_samples
# 0.89517439485479278

更新

可能是MacOSX特有的错误。

0 个答案:

没有答案