我在Matlab中实施PCA并且对于零均值步骤感到困惑。假设我有一个数据集X矩阵,每列都是一个例子,每一行对应一个特征/变量。我想删除均值,我们应该计算每一行的平均值,然后从同一行的值中减去它,因为我们想要删除同一个变量的平均值。
然而,从斯坦福网站here和here来看,它似乎并非如此。相反,他们想要删除每个示例的平均值。
你能帮我核实一下吗?
答案 0 :(得分:2)
对于PCA,你绝对应该减去每个特征的平均值,而不是每个例子的平均值。这是因为您对角化的矩阵是'经验'协方差矩阵,其定义为:
E[(X-EX)(X-EX)']
其中X
是向量,'
是矩阵的transpose
。从这个公式可以看出,你减去了与样本无关的东西,因为你应用了期望EX
。
关于链接,它可能是错误,也可能是某些特定于实现或特定于实验的步骤。这很难说(没有彻底阅读,我没有这样做)
答案 1 :(得分:0)
我认为你可能误解了斯坦福正在做的事情。
您对自己应该做的事情的理解是正确的:您计算每个要素的平均值,然后从该要素中的每个值中减去该平均值。在您的情况下,取每行的平均值,并从行中的每个元素中减去该平均值。
斯坦福大学的例子拍摄的图片分为144个图块。每个图块对应一个'特征',其中10000个数据点对应于图块内的像素。它们计算每个图块/要素的平均值,并从图块中的每个像素中减去它。斯坦福的例子可能会有点混乱,因为它试图将特征缩放/ PCA应用于图像。