这是我在网上找到的代码d0 = pd.read_csv('./mnist_train.csv')labels = d0.label.head(15000)data = d0.drop('label').head(15000)from sklearn.preprocessing import StandardScalerstandardized_data = StandardScaler().fit_transform(data)#find the co-variance matrix which is : (A^T * A)/nsample_data = standardized_data# matrix multiplication using numpycovar_matrix = np.matmul(sample_data.T , sample_data) / len(sample_data)相同数据相乘如何得到np.matmul(sample_data.T, sample_data)协方差矩阵?根据我在网上找到的本教程,协方差矩阵是什么?最后一步是我不明白的。
2 回答

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

慕勒3428872
TA贡献1848条经验 获得超6个赞
让我们一步一步地构建协方差矩阵,首先让我们定义方差。
一些随机变量 X 的方差衡量分布中的值相对于均值的平均变化程度。
现在我们必须定义协方差。协方差是两个随机变量联合概率的度量。它描述了两个变量如何一起变化。
所以现在你可以理解协方差矩阵是一个矩阵,它显示了每个特征如何随着其他特征的变化而变化。这可以计算为
在那里你可以看到你对底部形成的等式感到困惑。如果您有任何进一步的疑问,请发表评论。
添加回答
举报
0/150
提交
取消