Answers:
降维并不总是会丢失信息。在某些情况下,可以在低维空间中重新表示数据而不会丢弃任何信息。
上面的矩阵包含10,000个元素(即100x100)。当我们在其上执行SVD时,我们发现只有一对奇异向量具有非零值[* 2],因此我们可以将原始矩阵重新表示为两个100个元素向量(200个系数,但是您实际上可以做的更好[* 3])。
对于某些应用程序,我们知道(或至少假设)有用信息是由具有高奇异值(SVD)或负载(PCA)的主要组件捕获的。在这些情况下,我们可能会丢弃载荷较小的奇异矢量/基数/本原分量,即使它们不为零,也要基于它们包含烦人的噪声而不是有用信号的理论。我偶尔看到人们会根据形状拒绝特定的组件(例如,它类似于已知的附加噪声源),而与负载无关。我不确定您是否会认为这是信息丢失。
关于PCA的信息理论最优性,有一些整洁的结果。如果您的信号是高斯信号,并因加性高斯噪声而损坏,则PCA可以使信号与其降维版本之间的互信息最大化(假设噪声具有类似身份的协方差结构)。
在最直接的情况下,如果一个维度是其他维度的线性组合,则可以在不损失任何信息的情况下将维度降低一倍,因为可以根据需要从剩下的维度中重新创建删除的维度。
考虑这种三维情况,其中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"))