Какое значение имеет центрирование (или де-смысл) ваших данных для PCA? Я слышал, что это облегчает математику или препятствует доминированию переменных на первом компьютере, но я чувствую, что пока не смог твердо понять концепцию.
Например, главный ответ здесь. Как центрирование данных избавляет от перехвата в регрессии и PCA? описывает, как не центрирование протянет первый PCA через начало координат, а не по главной оси облака точек. Основываясь на моем понимании того, как ПК получены из собственных векторов ковариационной матрицы, я не могу понять, почему это произойдет.
Более того, мои собственные расчеты с центрированием и без него, кажется, не имеют большого смысла.
Рассмотрим цветы сетоса в iris
наборе данных в R. Я рассчитал собственные векторы и собственные значения ковариационной матрицы образца следующим образом.
data(iris)
df <- iris[iris$Species=='setosa',1:4]
e <- eigen(cov(df))
> e
$values
[1] 0.236455690 0.036918732 0.026796399 0.009033261
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.66907840 0.5978840 0.4399628 -0.03607712
[2,] -0.73414783 -0.6206734 -0.2746075 -0.01955027
[3,] -0.09654390 0.4900556 -0.8324495 -0.23990129
[4,] -0.06356359 0.1309379 -0.1950675 0.96992969
Если я сначала центрирую набор данных, то получу точно такие же результаты. Это кажется совершенно очевидным, поскольку центрирование не меняет ковариационную матрицу вообще.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
Эти prcomp
результаты функции в точно такой комбинации собственных значений, собственных векторов , а также, как для центрированной и uncentered набора данных.
p<-prcomp(df)
p.centered <- prcomp(df.centered)
Standard deviations:
[1] 0.48626710 0.19214248 0.16369606 0.09504347
Rotation:
PC1 PC2 PC3 PC4
Sepal.Length -0.66907840 0.5978840 0.4399628 -0.03607712
Sepal.Width -0.73414783 -0.6206734 -0.2746075 -0.01955027
Petal.Length -0.09654390 0.4900556 -0.8324495 -0.23990129
Petal.Width -0.06356359 0.1309379 -0.1950675 0.96992969
Однако у prcomp
функции есть опция по умолчанию center = TRUE
. Отключение этой опции приводит к следующим компьютерам для нецентрированных данных ( p.centered
остается тем же, когда center
установлено в false):
p.uncentered <- prcomp(df,center=F)
> p.uncentered
Standard deviations:
[1] 6.32674700 0.22455945 0.16369617 0.09766703
Rotation:
PC1 PC2 PC3 PC4
Sepal.Length -0.8010073 0.40303704 0.4410167 0.03811461
Sepal.Width -0.5498408 -0.78739486 -0.2753323 -0.04331888
Petal.Length -0.2334487 0.46456598 -0.8317440 -0.19463332
Petal.Width -0.0395488 0.04182015 -0.1946750 0.97917752
Почему это отличается от моих собственных расчетов собственных векторов на ковариационной матрице нецентрированных данных? Это связано с расчетом? Я видел упомянутое, prcomp
что для вычисления ПК используется нечто, называемое методом SVD, а не разложение по собственным значениям. Функция princomp
использует последний, но его результаты идентичны prcomp
. Моя проблема связана с ответом, который я описал в начале этого поста?
through the origin, rather than the main axis of the point cloud
, Спс всегда прокалывает происхождение. Если данные были центрированы, источник = центроид.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Пожалуйста, прочитайте комментарии в ответе на ссылку. Ковариации подразумевают центрирование данных, PCA «на ковариациях» = PCA на центрированных данных. Если вы не отцентрируете исходные переменныеX
, PCA на основе таких данных будет = PCA наX'X/n [or n-1]
матрице. Смотрите также важный обзор: stats.stackexchange.com/a/22520/3277 .