Этот вопрос касается эффективного способа вычисления основных компонентов.
Многие тексты по линейному PCA рекомендуют использовать разложение по регистру данных по сингулярным значениям . То есть, если у нас есть данные и мы хотим заменить переменные (их столбцы ) на главные компоненты, мы делаем SVD: , особые значения (квадратные корни из собственных значений), занимающие основную диагональ , правые собственные векторы - это ортогональная матрица вращения осей-переменных в оси-компоненты, левые собственные векторы подобны , только для случаев. Затем мы можем вычислить значения компонентов как .X = U S V ′ S V U V C = X V = U S
Другим способом сделать PCA переменных является разложение квадратной матрицы (т. может быть корреляциями или ковариациями и т. Д. Между переменными). Разложение может быть собственным разложением или разложением по сингулярному значению: с квадратно-симметричной положительной полуопределенной матрицей они дадут тот же результат с собственными значениями, что и диагональ , и как описано ранее. Значения компонентов будут .R R = V L V ′ L V C = X V
Теперь мой вопрос: если data - большая матрица, а число случаев (что часто бывает) намного больше, чем число переменных, то путь (1), как ожидается, будет намного медленнее, чем путь (2) ), поскольку способ (1) применяет довольно дорогой алгоритм (такой как SVD) к большой матрице; он вычисляет и хранит огромную матрицу которая нам действительно не нужна в нашем случае (PCA переменных). Если так, то почему так много учебников, кажется, отстаивают или просто упоминают только один путь (1)? Может быть , это является эффективным и я что - то не хватает?U
Joliffe, Principal component analysis, 2nd ed.
На самом деле, Джолифф описывает оба пути, но, насколько я помню, в основной главе по PCA он говорит только о способе 1.
R
svd