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

这是我在网上找到的代码


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)协方差矩阵?根据我在网上找到的本教程,协方差矩阵是什么?最后一步是我不明白的。


aluckdog
浏览 262回答 2
2回答

扬帆大鱼

对于数学或统计堆栈交换来说,这可能是一个更好的问题,但我现在会在这里回答。这来自协方差的定义。维基百科页面(链接)提供了很多细节,但协方差被定义为(在伪代码中)cov = E[dot((x - E[x]), (x - E[x]).T)]对于列向量,但在您的情况下,您可能有行向量,这就是为什么点积中的第一个元素被转置,而不是第二个元素的原因。所述E[...]装置预期值,这对于高斯分布的数据的平均值。当您执行 时StandardScaler().fit_transform(data),您基本上是在减去数据的平均值,所以这就是为什么您没有在点积中明确这样做的原因。请注意,这StandardScaler()也除以方差,因此它将所有内容归一化为单位方差。这会影响你的协方差!因此,如果您需要未经归一化的数据的实际协方差,只需使用类似np.cov()numpy 模块的东西来计算它。

慕勒3428872

让我们一步一步地构建协方差矩阵,首先让我们定义方差。一些随机变量 X 的方差衡量分布中的值相对于均值的平均变化程度。现在我们必须定义协方差。协方差是两个随机变量联合概率的度量。它描述了两个变量如何一起变化。所以现在你可以理解协方差矩阵是一个矩阵,它显示了每个特征如何随着其他特征的变化而变化。这可以计算为 在那里你可以看到你对底部形成的等式感到困惑。如果您有任何进一步的疑问,请发表评论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python