Câu hỏi này là về một cách hiệu quả để tính toán các thành phần chính.
Nhiều văn bản trên PCA tuyến tính ủng hộ việc sử dụng phân tách giá trị số ít của dữ liệu casewise . Nghĩa là, nếu chúng ta có dữ liệu và muốn thay thế các biến ( cột của nó ) bằng các thành phần chính, chúng ta thực hiện SVD: , các giá trị số ít (gốc của các giá trị riêng) chiếm đường chéo chính của , các hàm riêng bên phải là ma trận xoay trực giao của các biến trục thành các thành phần trục, các hàm riêng bên trái giống như , chỉ dành cho các trường hợp. Sau đó chúng ta có thể tính các giá trị thành phần là .X = U S V ′ S V U V C = X V = U S
Một cách khác để thực hiện PCA của các biến là thông qua phân tách ma trận vuông (nghĩa là có thể là tương quan hoặc hiệp phương sai , v.v., giữa các biến). Phân rã có thể là phân rã eigen hoặc phân rã giá trị số ít: với ma trận bán nguyệt dương đối xứng vuông, chúng sẽ cho cùng một kết quả với các giá trị riêng như đường chéo của và như được mô tả trước đó. Giá trị thành phần sẽ là .R R = V L V ′ L V C = X V
Bây giờ, câu hỏi của tôi: nếu dữ liệu là một ma trận lớn và số trường hợp là (thường là một trường hợp) lớn hơn nhiều so với số lượng biến, thì cách (1) được dự kiến sẽ chậm hơn nhiều so với cách (2) ), bởi vì cách (1) áp dụng một thuật toán khá tốn kém (như SVD) cho một ma trận lớn; nó tính toán và lưu trữ ma trận khổng lồ mà chúng ta thực sự không cần trong trường hợp của chúng ta (PCA của các biến). Nếu vậy, tại sao rất nhiều texbooks dường như ủng hộ hoặc chỉ đề cập đến cách duy nhất (1)? Có lẽ nó là hiệu quả và tôi đang thiếu cái gì?U
Joliffe, Principal component analysis, 2nd ed.
Thật ra, Joliffe mô tả cả hai cách, nhưng trong chương cốt lõi về PCA, anh ấy nói về cách 1, theo như tôi có thể nhớ.
R
svd