【问题标题】:PCA for data compression用于数据压缩的 PCA
【发布时间】:2017-03-28 00:15:06
【问题描述】:

我正在讨论是否可以通过对数据执行 PCA 来节省磁盘空间。假设您有一个协方差矩阵,并且您的数据向量的长度为 1000。将空间减少 50% 的压缩方法是:

  • 导出一个矩阵,将协方差矩阵旋转为对角线形式,使得特征值沿对角线排列。
  • 删除最小的 500 个对角线元素 - 替换为零
  • 使用原始旋转的转置来旋转结果。

我:这不会为向量节省任何空间,因为旋转后所有 1000 个组件中仍然会有非零元素。没有压缩。数据可能已经简化,但那是另一回事。 他:只取结果中的前 500 个元素——这就是你的“压缩”。

我知道我是对的,但很多人在文献中说他们正在使用 PCA 进行压缩 - 这是一个示例:

http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

我认为本教程大部分是正确的并且是一个很好的描述,但是关于压缩的结论是错误的。但是,如此明显的事情怎么会被那些清楚地处理数据的人所忽视。让我觉得我错了。

谁能帮我理解他们的观点?

【问题讨论】:

  • 什么是主成分分析?是主成分分析吗? 要压缩的数据是什么?压缩-解压循环后可以更改数据(允许出现什么错误),还是需要精确的(lossless)方法?
  • PCA 在这种情况下确实指的是主成分分析。想象一下,要压缩的数据是一张照片,由照片的串联行组织为一个长向量。或者实际上是存储为一个长向量的任何数据。当然,压缩可能是有损的,正如人们对 PCA 所期望的那样。最后,一个压缩-解压缩循环可能有一些特定的误差,这些误差将由频谱截止控制。感谢您帮助澄清。
  • abby,“旋转后所有 1000 个组件中的非零元素”可能比以前具有更可预测的分布。当值是可预测的时,它们可以用一些"entropy encoding" method 存储在更小的空间中。此外,还有一些关于 PCA 应用到 Scholar Search 中的论文。
  • 如果你的矩阵现在大部分是0,那么存在很多methods to store it efficiently

标签: compression pca


【解决方案1】:

在我看来:

1- 是的,您可以通过 PCA 压缩数据,因为您必须存储的向量(每个)的维度小于原始向量。当然,解压数据也需要存储矩阵,但如果你的原始数据集足够大,这对数据本身来说是微不足道的。

2- 当然有一个缺点。压缩不是无损的。原来的数据永远丢失了,解压后的新版本也不会和原来的完全一样。这将是一个近似值。

这里是我的建议:

如果您有大量具有相同形式的数据(相同维度的向量...),您对这些数据的兴趣是定性的(您不关心确切的数字本身,只关心大概的数字)还有一些的数据显示共线性(向量之间的依赖关系),PCA是一种节省存储空间的方法。

检查你是否丢失了原始数据的方差是很有必要的,因为这是你选择了太多压缩的信号。

无论如何,PCA 的主要目的不是节省存储空间……而是更快地对数据进行繁重的操作以获得非常相似的结果。

希望对你有帮助。

【讨论】:

  • 我想补充一个重要的警告,不仅压缩不是无损的,而且损失不是随机的。 PCA 针对要删除的特定维度,这些维度可能有用,也可能没有用。假设 PCA 中的前 $n$ 个基向量是数据中唯一“重要”的基向量,这一假设有时可能有用,但通常不成立。
  • 为什么即使我们不删除不太重要的组件,PCA 仍然不能压缩?例如。如果原始元素每个都用 100 个变量表示,其中大部分是完全多余的,我想 PCA 可以用 60 个变量表示它们,甚至不会丢失任何信息。我错了吗?
  • 以一种简单的方式,尝试将 PCA 视为线性回归。您从 2d 点云开始,线性回归允许您将其简化为 1d 点云。如果您的所有点都与回归线完全重合,您将不会丢失任何信息。但是,正常情况下,有些点在直线附近,但不在直线上方,降维后您将丢失这些点与拟合线之间的距离信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多