降维是否总是会丢失一些信息?


10

如标题所述,降维是否总是会丢失一些信息?考虑例如PCA。如果我拥有的数据非常稀疏,我将假定可以找到“更好的编码”(这与数据的等级有关吗?),并且什么也不会丢失。


7
不,当然不是:例如,PCA中的某些奇异值可以为真零。这与数据的“稀疏性”无关,而与它们是否“填写”用于记录数据的维度无关。
ub

1
好的我明白了。您能否将您的评论写为简短答案(如果有时间的话,甚至可以举一个小例子)?
想知道

1
考虑具有二维数据的情况,其中每个点的y值为'0'。您的第一个主要成分将是X轴,并且通过将数据投影到该单一维度中,您将不会丢失任何东西,因为它实际上已经是一维了。
大卫·马克思

Answers:


9

降维并不总是会丢失信息。在某些情况下,可以在低维空间中重新表示数据而不会丢弃任何信息。

Qxy

径向平均演示

Q(x,y)x2+y2Q(r)Q(x,y)

Q(x,y)Q(r)

MM=USVTMSSi,i)iUVSNxNNxNSUVMQ(x,y)上面的矩阵包含10,000个元素(即100x100)。当我们在其上执行SVD时,我们发现只有一对奇异向量具有非零值[* 2],因此我们可以将原始矩阵重新表示为两个100个元素向量(200个系数,但是您实际上可以做的更好[* 3])。

对于某些应用程序,我们知道(或至少假设)有用信息是由具有高奇异值(SVD)或负载(PCA)的主要组件捕获的。在这些情况下,我们可能会丢弃载荷较小的奇异矢量/基数/本原分量,即使它们不为零,也要基于它们包含烦人的噪声而不是有用信号的理论。我偶尔看到人们会根据形状拒绝特定的组件(例如,它类似于已知的附加噪声源),而与负载无关。我不确定您是否会认为这是信息丢失。

关于PCA的信息理论最优性,有一些整洁的结果。如果您的信号是高斯信号,并因加性高斯噪声而损坏,则PCA可以使信号与其降维版本之间的互信息最大化(假设噪声具有类似身份的协方差结构)。


脚注:

  1. 这是一种俗气且完全非物理的模型。抱歉!
  2. 由于浮点数的不精确性,这些值中的一些将不是十分零。
  3. US

I(r)

r=(x2+y2)

1
马特,我的问题确实是这样的:您给我们展示了没有任何描述或参考的图片,并将其称为“数据”:我想知道您在何种意义上将其视为数据。您的评论使这个问题感到困惑,因为“热图”表示通常不是数据,而是由数据创建的。例如,如果这些是不规则的2D点数据,并且您对它们拟合了径向对称的密度,则可以按照您的说法将图片解释为一维的,但这并不是数据的无损降维。
ub

1
也许我应该说“ gridded”或“ raster”。我正在想象一种情况,其中数据收集在一个网格上,并且每个网格点都与一个(标量)值关联,但是这些值并不一定像在(摄影)图像中那样具有光强度。就是说,我显然不会摇摆这个答案-让我尝试将其编辑为更连贯的东西!
马特·克劳斯

2
+1:所做的修改使您的观点更加清晰。感谢您的付出!
ub

4

我认为您的问题背后的问题是“什么使信息?”。这是一个好问题。

语法技巧:

PCA 总是会丢失信息吗?不。是否有时会丢失信息?完全正确。您可以从组件重建原始数据。如果它总是丢失信息,那么这将是不可能的。

它很有用,因为当您使用它减少数据维度时,它通常不会丢失重要信息。当您丢失数据时,它通常是频率较高的数据,而通常重要性较低。在与较大特征值关联的组件中捕获了大规模的总体趋势。


4

n×p

在最直接的情况下,如果一个维度是其他维度的线性组合,则可以在不损失任何信息的情况下将维度降低一倍,因为可以根据需要从剩下的维度中重新创建删除的维度。

考虑这种三维情况,其中x3是x1和x2的精确线性组合。从原始数据来看,这并不明显,尽管很明显x3与其他两个都有关:

在此处输入图片说明

但是,如果我们看主要成分,第三个是零(在数值误差内)。

在此处输入图片说明

前两个主成分的图与x1对x2的图相同,只是旋转了(好吧,我的意思不是那么明显,我稍后会尝试更好地解释)

在此处输入图片说明

我们通过任何合理的定义将维数减少了一个,却保留了所有信息。

尽管自然会变得更加复杂,但是这也超出了线性降维的范围。关键是总的答案是“否”,而不是当某些维度是其他维度的组合的函数时。

R代码:

library(GGally)


n <- 10^3
dat <- data.frame(x1=runif(n, 0, 3), x2=rnorm(n))
dat$x3 <- with(dat, x1 + x2)

ggpairs(dat)

pc <- princomp(dat)
plot(pc)

par(mfrow=c(1,2))
with(dat, plot(dat$x1, dat$x2, col="red", main="Original data", bty="l"))
with(pc, plot(scores[,1], scores[,2], col="blue", main="Scores from principal components(\n(rotated)", bty="l"))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.