【发布时间】:2016-05-22 02:26:00
【问题描述】:
我在 Matlab 中实现 PCA,对零均值步长感到困惑。假设我有一个数据集 X 的矩阵,每一列是一个示例,每一行对应一个特征/变量。我认为要删除平均值,我们应该计算每一行的平均值,然后从同一行中的值中减去它,因为我们要删除同一变量的平均值。
但是,从斯坦福网站here 和here 看来,这不是真的。相反,他们想要删除每个示例的平均值。
你能帮我验证一下吗?
【问题讨论】:
我在 Matlab 中实现 PCA,对零均值步长感到困惑。假设我有一个数据集 X 的矩阵,每一列是一个示例,每一行对应一个特征/变量。我认为要删除平均值,我们应该计算每一行的平均值,然后从同一行中的值中减去它,因为我们要删除同一变量的平均值。
但是,从斯坦福网站here 和here 看来,这不是真的。相反,他们想要删除每个示例的平均值。
你能帮我验证一下吗?
【问题讨论】:
我想你可能误解了斯坦福在做什么。
您对自己应该做的事情的理解是正确的:您计算每个特征的平均值,然后从该特征中的每个值中减去该平均值。在您的情况下,取每一行的平均值,然后从该行中的每个元素中减去该平均值。
Stanford 示例将一张图像分割成 144 个图块。每个图块对应一个“特征”,10000 个数据点对应于图块内的像素。他们计算每个图块/特征的平均值,然后从图块中的每个像素中减去它。斯坦福的例子可能有点令人困惑,因为它试图将特征缩放/PCA 应用于图像。
【讨论】:
for each image patch, compute the mean pixel value and subtract it from that image, this centering the image around zero. You should compute a different mean value for each image patch - 也就是说,每个例子你得到不同的平均值。
对于 PCA,您绝对应该减去每个 特征 的平均值,而不是每个示例的平均值。这是因为您对角化的矩阵是“经验”协方差矩阵,其定义如下:
E[(X-EX)(X-EX)']
其中X 是一个向量,' 是矩阵的transpose。从这个公式中你可以看到你减去了与样本无关的东西,因为你应用了期望EX。
关于链接,要么是错误,要么是某些特定于实现或特定于实验的步骤。很难说(没有仔细阅读,我没有)
【讨论】: