«Машинное обучение для хакеров» О'Рейли говорит, что каждый основной компонент представляет собой процент дисперсии. Я процитировал соответствующую часть страницы ниже (глава 8, с.207). Говоря с другим экспертом, они согласились, что это процент.
Однако 24 компонента составляют 133,2095%. Как это может быть?
Убедившись в том, что мы можем использовать PCA, как мы это делаем в R? Опять же, это место, где R сияет: весь PCA может быть сделан в одной строке кода. Мы используем функцию princomp для запуска PCA:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Если мы просто введем pca в R, мы увидим краткое описание основных компонентов:
Call: princomp(x = date.stock.matrix[, 2:ncol(date.stock.matrix)]) Standard deviations: Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 29.1001249 20.4403404 12.6726924 11.4636450 8.4963820 8.1969345 5.5438308 Comp.8 Comp.9 Comp.10 Comp.11 Comp.12 Comp.13 Comp.14 5.1300931 4.7786752 4.2575099 3.3050931 2.6197715 2.4986181 2.1746125 Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20 Comp.21 1.9469475 1.8706240 1.6984043 1.6344116 1.2327471 1.1280913 0.9877634 Comp.22 Comp.23 Comp.24 0.8583681 0.7390626 0.4347983 24 variables and 2366 observations.
В этом обзоре стандартные отклонения говорят нам, сколько из дисперсии в наборе данных приходится на различные основные компоненты. На первый компонент, называемый Comp.1, приходится 29% дисперсии, в то время как на следующий компонент приходится 20%. К концу, последний компонент, Comp.24, составляет менее 1% дисперсии. Это говорит о том, что мы можем многое узнать о наших данных, просто взглянув на первый основной компонент.
[Код и данные можно найти на github .]
Standard deviations
слегка отклонена. Поскольку стандартные отклонения на самом деле являются стандартными отклонениями, мы должны возвести их в квадрат, чтобы увидеть, какова дисперсия каждого компонента. Первый компонент будет представлять процента от общей дисперсии.R
программное обеспечение. Обнаружение этой ошибки было хорошим уловом (надеюсь, вам было полезно узнать, что на самом деле происходит с PCA)!Ответы:
Используйте
summary.princomp
для просмотра «Соотношение дисперсии» и «Совокупное соотношение».источник
sqrt(pca$sdev[1]/sum(pca$sdev))
(примерноsqrt(29.1/133.2)
) дает 0,4673904.sdev
подразумевает, что вы смотрите на стандартное отклонение , то есть квадратный корень из дисперсии (или , используя обозначения из моего ответа), который должен объяснить разницу. Попробуйвместо этого.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
показывает, что он возводит в квадратsdev
компонент, которыйstats:::princomp.default
показывает этоsqrt
из собственных значений.Они должны составить до100 % .
Полная дисперсия вариативной случайной величины X с ковариационной матрицей Σ определяется как t r ( Σ ) = σ 11 + σ 22 + ⋯ + σ p p .п Икс Σ
Теперь след симметричной матрицы является суммой ее собственных значений Таким образом, полная дисперсия равна t r ( Σ ) = λ 1 + ⋯ + λ p, если мы используем λ i для обозначения собственных значений Σ . Обратите внимание, что λ p ≥ 0, поскольку ковариационные матрицы положительно-полуопределены , поэтому полная дисперсия неотрицательна.λ1≥ λ2≥ … ≥ λп,
Но главные компоненты задаются как , где e i - i- й собственный вектор (стандартизированный для длины 1 ), соответствующий собственному значению λ i . Его дисперсия V a r ( e i X ) = e ′ i Σ e i = λ i e ′ i e i = λ i, и, следовательно, первые k главных компонентов составляют ( λеяИкс ея я 1 λя
источник
Вот некоторый R-код для дополнения предыдущих ответов (
pca[["sdev"]]
обычно пишетсяpca$sdev
, но это приводит к неправильному форматированию в фрагменте ниже).Таким образом, как указывает @Max, решение этой проблемы решает работа с дисперсией вместо стандартного отклонения и не забывая делить ее на общую дисперсию.
источник