Яку різницю мають центрирування (або де-значення) ваших даних для PCA? Я чув, що це полегшує математику або що перешкоджає домінуванню на першому ПК засобами змінних, але я відчуваю, що ще не зміг зрозуміти цю концепцію.
Наприклад, головна відповідь тут Як центрування даних позбавляється від перехоплення в регресії та PCA? описується, як не центрування потягнуло б перший PCA через початок, а не через головну вісь точкового хмари. Виходячи з мого розуміння того, як ПК отримують із власних векторів матриці коваріації, я не можу зрозуміти, чому це станеться.
Більше того, мої власні розрахунки з і без центрування здаються мало сенсу.
Розглянемо квіти сетози в iris
наборі даних у Р. Я розраховував власні вектори та власні значення матриці коваріації зразка наступним чином.
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
. PCA завжди пронизує походження. Якщо дані були по центру, походження = центроїд.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Прочитайте коментарі у відповіді, на яку ви посилаєтесь. Коваріанці мають на увазі центрування даних, PCA "на covariances" = PCA на централізованих даних. Якщо ви не зосереджуєте оригінальні змінніX
, PCA на основі таких даних буде = PCA наX'X/n [or n-1]
матриці. Дивіться також важливий огляд: stats.stackexchange.com/a/22520/3277 .