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