虹膜数据集是学习PCA的一个很好的例子。就是说,描述萼片和花瓣的长度和宽度的前四列不是强烈偏斜数据的示例。因此,对数转换数据不会太大改变结果,因为通过对数转换,主成分的最终旋转几乎没有变化。
在其他情况下,对数转换是一个不错的选择。
我们执行PCA是为了深入了解数据集的一般结构。我们将居中,缩放和对数转换(有时是对数转换)过滤掉一些琐碎的效果,这些效果可能会主导我们的PCA。PCA的算法将依次查找每个PC的旋转,以最小化残差平方,即从任何样本到PC的垂直距离平方的总和。大价值往往具有很高的杠杆作用。
想象将两个新样本注入虹膜数据。一朵花,花瓣长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)