这是我在网上找到的代码
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)
协方差矩阵?根据我在网上找到的本教程,协方差矩阵是什么?最后一步是我不了解的。
答案 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.
因此,有了这之后,您就可以了解协方差矩阵是一个矩阵,该矩阵显示每个要素如何随其他要素的变化而变化。可以计算为 ,您会在底部看到困惑的方程式。如果您还有其他疑问,请予以注释。
图片来源:维基百科。