使用np.matmul(data.T,data)的协方差矩阵

时间:2019-01-31 15:55:05

标签: python python-3.x

这是我在网上找到的代码

d0 = pd.read_csv('./mnist_train.csv')
labels = d0.label.head(15000)
data = d0.drop('label').head(15000)

from sklearn.preprocessing import StandardScaler
standardized_data = StandardScaler().fit_transform(data)

#find the co-variance matrix which is : (A^T * A)/n
sample_data = standardized_data

# matrix multiplication using numpy
covar_matrix = np.matmul(sample_data.T , sample_data) / len(sample_data)

如何将相同数据相乘得到np.matmul(sample_data.T, sample_data)协方差矩阵?根据我在网上找到的本教程,协方差矩阵是什么?最后一步是我不了解的。

2 个答案:

答案 0 :(得分:2)

对于数学或统计堆栈交换,这可能是一个更好的问题,但我现在在这里回答。

这来自definition of covariance。 Wikipedia页面(链接)提供了大量详细信息,但协方差定义为(用伪代码)

cov = E[dot((x - E[x]), (x - E[x]).T)]

用于列向量,但是在您的情况下,您可能具有行向量,这就是为什么点积中的第一个元素而不是第二个元素被转置的原因。 E[...]表示期望值which is the mean for Gaussian-distributed data。当您执行StandardScaler().fit_transform(data)时,基本上是在减去数据的均值,因此这就是为什么在点积中未明确这样做的原因。

请注意,StandardScaler()还在除以方差,因此它会将所有数据归一化为单位方差。 这会影响您的协方差!因此,如果您需要数据的实际协方差而不进行归一化,只需使用numpy模块中的np.cov()之类的数据即可对其进行计算。

答案 1 :(得分:1)

让我们逐步建立协方差矩阵,首先让我们定义方差。

一些随机变量X的方差用来衡量分布中的平均值相对于平均值的平均变化程度。

现在我们必须定义协方差。 协方差是两个随机变量联合概率的度量。它描述了两个变量如何一起变化。 Read here.

因此,有了这之后,您就可以了解协方差矩阵是一个矩阵,该矩阵显示每个要素如何随其他要素的变化而变化。可以计算为 Co Variance Matrix calculation,您会在底部看到困惑的方程式。如果您还有其他疑问,请予以注释。

图片来源:维基百科。