Как центрирование влияет на PCA (для SVD и собственного разложения)?

30

Какое значение имеет центрирование (или де-смысл) ваших данных для 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. Моя проблема связана с ответом, который я описал в начале этого поста?

XXX/(n1)

Зенит
источник
5
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 .
ttnphns
2
through the origin, rather than the main axis of the point cloud, Спс всегда прокалывает происхождение. Если данные были центрированы, источник = центроид.
ttnphns
XX
1
S
См. Анализ основных компонентов: обзор и последние разработки для обсуждения центрированного и нецентрированного PCA (которые, как правило, не совпадают).
Ибо Ян

Ответы:

33

DataCovariance matrixEigen-decomposition,

[Wikipedia:] Чтобы найти оси эллипса, мы должны сначала вычесть среднее значение каждой переменной из набора данных, чтобы центрировать данные вокруг начала координат. Затем мы вычисляем ковариационную матрицу данных ...

И поэтому вы правы, заметив, что это не очень точная формулировка.

XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

затем центрирование имеет большое значение и имеет эффект, описанный и проиллюстрированный @ttnphns в статье Как центрирование данных избавляет от перехвата в регрессии и PCA?

X

Data XSingular value decomposition.

Xsvd

амеба говорит восстановить монику
источник
1
У меня есть совет для вашего ответа, чтобы сделать более чистую логику. Поскольку в ваших первых двух (собственных) примерах вы говорите о матрице разложения MSCP, X'X/(n-1)а не о матрице SSCP X'X- это будет в примере SVD, показывающем эквивалентность, X/sqrt(n-1)вместо разложения X(как вы сейчас говорите). [Конечно, разница только в части масштаба (собственных значениях), а не в собственных векторах, но я думаю, что она лучше дидактически.] Второй момент: напомнить, что, как только центрирование Xне происходит, коррекция Бесселя n-1становится ненужной, nможно только приветствовать
ttnphns
1
Оба хороших момента, @ttnphns. Я подумаю о том, как я могу включить их в свой ответ: я хотел, чтобы этот ответ был понятен широкой аудитории, и поэтому постарался не вдаваться в ненужные математические детали.
говорит амеба, восстанови Монику