Giả sử tôi có một bộ dữ liệu chiều nơi kích thước là khoảng trực giao (có sự tương quan không).N
Có tiện ích nào về:
- Hình dung
- Đại diện (cho hiệu quả phân loại)
- Hoặc các tiêu chí khác
để thực hiện giảm kích thước trên dữ liệu?
Giả sử tôi có một bộ dữ liệu chiều nơi kích thước là khoảng trực giao (có sự tương quan không).N
Có tiện ích nào về:
để thực hiện giảm kích thước trên dữ liệu?
Câu trả lời:
Tôi muốn làm rõ một bình luận mà tôi đã để lại dưới câu trả lời của @ Peter-Flom nhưng có lẽ đáng để viết trong một câu trả lời. Ở mức độ nào bạn có thể giảm kích thước bằng cách chạy PCA trên dữ liệu gần như trực giao? Câu trả lời là "nó phụ thuộc" vào việc bạn thực hiện PCA trên ma trận tương quan hay hiệp phương sai .
Nếu bạn đang sử dụng PCA trên ma trận tương quan, thì điều này sẽ chỉ khác một chút so với ma trận danh tính, có một đối xứng hình cầu làm cho tất cả các hướng "có nhiều thông tin như nhau". Thay đổi kích thước phương sai của các biến của bạn thành một trước PCA là một cách tiếp cận tương đương về mặt toán học sẽ tạo ra kết quả tương tự. Mặc dù đầu ra PCA sẽ xác định một số thành phần có phương sai thấp hơn một chút so với các thành phần khác, nhưng điều này có thể được quy cho (nếu chúng ta giả sử không có mối tương quan trong dân số) với không có gì khác hơn là biến đổi cơ hội trong mẫu, vì vậy sẽ không phải là lý do chính đáng để loại bỏ những điều này các thành phần. Trong thực tế, sự chênh lệch như vậy giữa độ lệch chuẩn của các thành phần sẽ giảm độ lớn khi chúng ta tăng kích thước mẫu. Chúng tôi có thể xác nhận điều này trong một mô phỏng.
set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
x1 <- rnorm(n, mean=0, sd=sd1)
x2 <- rnorm(n, mean=0, sd=sd2)
x3 <- rnorm(n, mean=0, sd=sd3)
x4 <- rnorm(n, mean=0, sd=sd4)
prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}
Đầu ra:
> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion 0.2882 0.5505 0.7887 1.0000
>
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion 0.2504 0.5006 0.7505 1.0000
Tuy nhiên, nếu bạn thực hiện PCA bằng ma trận hiệp phương sai thay vì ma trận tương quan (tương đương: nếu chúng ta không chia tỷ lệ độ lệch chuẩn thành 1 trước khi áp dụng PCA), thì câu trả lời phụ thuộc vào mức độ lan truyền của các biến. Nếu các biến của bạn có cùng phương sai thì chúng ta vẫn có đối xứng hình cầu, do đó không có "hướng đặc quyền" và không thể giảm được chiều.
> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion 0.2507 0.5009 0.7508 1.0000
Tuy nhiên, với một hỗn hợp của các biến phương sai cao và thấp, đối xứng giống như một hình elip với một số trục rộng và các trục khác mỏng. Trong tình huống này, sẽ có các thành phần có phương sai cao tải trên các biến có phương sai cao (trong đó ellipsoid rộng) và các thành phần có phương sai thấp tải trên các biến có phương sai thấp (theo hướng của ellipsoid là hẹp).
> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion 0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.460 0.888 0.000 0.000
x2 -0.888 0.460 0.000 0.000
x3 0.000 0.000 -0.747 -0.664
x4 0.000 0.000 0.664 -0.747
Nếu các biến có phương sai rất khác nhau (về mặt hình học một lần nữa nhưng với tất cả các trục khác nhau), thì tính trực giao cho phép PC đầu tiên tải rất nhiều vào biến có phương sai cao nhất, v.v.
> pc1234 <- princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion 0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.000 0.000 -0.001 1.000
x2 0.001 -0.001 1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000 0.003 -0.001 0.000
Trong hai trường hợp gần đây, có các thành phần phương sai thấp, bạn có thể cân nhắc việc vứt bỏ để đạt được giảm kích thước, nhưng làm như vậy chính xác tương đương với việc loại bỏ các biến phương sai thấp nhất ở vị trí đầu tiên . Về cơ bản, tính trực giao cho phép bạn xác định các thành phần có phương sai thấp với các biến có phương sai thấp, vì vậy nếu bạn có ý định giảm tính chiều theo cách này, thì rõ ràng bạn sẽ không có lợi khi sử dụng PCA để làm như vậy.
Ghi chú: khoảng thời gian thảo luận về trường hợp các biến không được định cỡ lại thành phương sai đơn vị - tức là sử dụng hiệp phương sai thay vì ma trận tương quan - không nên được coi là một dấu hiệu cho thấy cách tiếp cận này quan trọng hơn và chắc chắn không phải là nó tốt hơn". Tính đối xứng của tình huống đơn giản là tinh tế hơn nên cần phải thảo luận lâu hơn.
Bạn có thể thử một phương pháp học đa chiều giảm tuyến tính tổng quát hơn như nhúng tuyến tính cục bộ, bản đồ điện tử laplacian hoặc t-SNE.
Hoàn toàn có thể có một không gian con chiều thấp hơn (đa tạp) trong dữ liệu của bạn theo cách để lại 0 tương quan giữa các kích thước cơ sở N. Ví dụ: một vòng tròn các điểm về nguồn gốc hoặc dạng sóng như được thấy ở đây . PCA sẽ không chọn điều này nhưng các phương pháp khác sẽ.
Nhìn vào các phương pháp như vậy đặc biệt thú vị và phổ biến để trực quan hóa và phân tích dữ liệu khám phá. Để sử dụng trong một trình phân loại hoặc mô hình khác, bạn sẽ cần giới hạn bản thân trong các phương pháp có thể phù hợp với đào tạo và áp dụng trong bài kiểm tra loại trừ rất nhiều các phương pháp này. Nếu đây là mối quan tâm chính của bạn, bạn cũng nên xem xét các phương pháp cho kỹ thuật tiền xử lý không giám sát và (được giám sát).
Nếu tất cả các biến N gần như trực giao thì việc giảm kích thước sẽ giảm tương đối ít. Ví dụ như trongR
set.seed(123)
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
x4 <- rnorm(100)
x5 <- rnorm(100)
x6 <- rnorm(100)
x7 <- rnorm(100)
x8 <- rnorm(100)
x9 <- rnorm(100)
x10 <- rnorm(100)
df1 <- cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
pcsol <- princomp(df1)
loadings(pcsol)
Về bản chất, "trực giao" ngụ ý "đã ở kích thước nhỏ nhất".
x1<-rnorm(100, sd=0.1)
và pcsol <- princomp(df1, cor=FALSE)
có một sự khác biệt, đặc biệt nếu chúng ta nhìn vào summary(pcsol)
. (Tôi không đề xuất cov là cách tiếp cận tốt hơn cor, chỉ là nó có thể.)