Як центрування впливає на значення PCA (для розпаду SVD та власних властивостей)?


30

Яку різницю мають центрирування (або де-значення) ваших даних для 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. Чи стосується мого питання відповідь, яку я описав у верхній частині цього повідомлення?

XXX/(n1)


5
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 .
ttnphns

2
through the origin, rather than the main axis of the point cloud. PCA завжди пронизує походження. Якщо дані були по центру, походження = центроїд.
ttnphns

Х'Х

1
S

Див. Аналіз основних компонентів: огляд та останні розробки для дискусії з центрованим проти нецентризованим УПС (які, як правило, не однакові).
Ібо Ян

Відповіді:


33

DатаКоваріаційна матрицяВласне розкладання,

[Вікіпедія:] Щоб знайти осі еліпса, ми повинні спочатку відняти середнє значення кожної змінної від набору даних, щоб відцентрувати дані навколо джерела. Потім ми обчислюємо матрицю коваріації даних ...

І тому ви праві зауважити, що це не дуже точна формулювання.

ХХ/(н-1)Х

Дані ХМатриця ХХ/(н-1)Власне розкладання,

то центрування має велике значення і має ефект, описаний та проілюстрований @ttnphns у розділі Як центрування даних позбавляється від перехоплення в регресії та PCA?

Х . Я детально описую це тут: Зв'язок між SVD та PCA. Як використовувати SVD для виконання PCA? У цьому випадку процедура така:

Дані ХСингулярне розкладання значення.

Хsvd функцією . У мене, звичайно, була своя частка помилок через те, що я забув це зробити.


1
Я отримав пораду для вашої відповіді, щоб зробити більш чисту логіку. Оскільки у двох ваших перших (власних) прикладах ви говорите про матрицю MSCP розкладання, X'X/(n-1)а не про матрицю SSCP X'X- це було б у прикладі svd, показуючи еквівалентність, розкласти X/sqrt(n-1)замість X(як ви зараз говорите). [Звичайно, різниця полягає лише в частині масштабу (власних значень), а не власних векторів, але краще дидактично, я б подумав.] Другим моментом було б нагадати, що як тільки центрирування Xзаймає місце, корекція Бесселя n-1стає непотрібною, nласкаво просимо.
ttnphns

1
Обидва хороші моменти, @ttnphns. Я подумаю, як я можу включити їх у свою відповідь: я хотів, щоб ця відповідь була зрозумілою широкій аудиторії, і так намагався уникати зайвих математичних деталей.
амеба каже, що повернеться до Моніки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.