iris 数据集是学习 PCA 的一个很好的例子。也就是说,描述萼片和花瓣的长度和宽度的前四列并不是严重倾斜数据的示例。因此,对数据进行对数转换不会对结果产生太大影响,因为对数转换导致的主成分旋转几乎没有改变。
在其他情况下,对数转换是一个不错的选择。
我们执行 PCA 以深入了解数据集的一般结构。我们居中、缩放,有时还进行对数变换,以过滤掉一些可能支配我们的 PCA 的琐碎影响。PCA 的算法将依次找到每个 PC 的旋转以最小化残差平方,即从任何样本到 PC 的垂直距离平方和。大值往往具有高杠杆率。
想象一下将两个新样本注入到 iris 数据中。一朵花瓣长度为 430 厘米的花和一朵花瓣长度为 0.0043 厘米的花。两种花都非常异常,分别比平均示例大 100 倍和小 1000 倍。第一朵花的影响力是巨大的,以至于第一朵PC大多会描述大花与其他花的区别。由于那个异常值,物种的聚类是不可能的。如果数据经过对数转换,则绝对值现在描述了相对变化。现在小花是最不正常的。尽管如此,可以在一张图像中包含所有样本并提供物种的公平聚类。看看这个例子:
data(iris) #get data
#add two new observations from two new species to iris data
levels(iris[,5]) = c(levels(iris[,5]),"setosa_gigantica","virginica_brevis")
iris[151,] = list(6,3, 430 ,1.5,"setosa_gigantica") # a big flower
iris[152,] = list(6,3,.0043,1.5 ,"virginica_brevis") # a small flower
#Plotting scores of PC1 and PC" without log transformation
plot(prcomp(iris[,-5],cen=T,sca=T)$x[,1:2],col=iris$Spec)

#Plotting scores of PC1 and PC2 with log transformation
plot(prcomp(log(iris[,-5]),cen=T,sca=T)$x[,1:2],col=iris$Spec)
