Kỹ thuật giảm kích thước để tách tối đa các cụm đã biết?


8

Vì vậy, giả sử tôi có một loạt các điểm dữ liệu trong R ^ n, trong đó n khá lớn (như, 50). Tôi biết dữ liệu này rơi vào 3 cụm và tôi biết cụm nào mỗi điểm dữ liệu là một phần của. Tất cả những gì tôi muốn làm là trực quan hóa các cụm này trong 2D theo cách để tối đa hóa sự tách biệt giữa các cụm mà tôi thấy, với mục tiêu là chứng minh rằng các cụm có thể dễ dàng phân tách dựa trên vị trí của điểm dữ liệu trong R ^ n một mình.

Cách mà tôi đã thực hiện cho đến bây giờ liên quan đến việc thực hiện chuyển đổi PCA trên các điểm dữ liệu và sau đó trực quan hóa các cặp PC một cách ngẫu nhiên cho đến khi tôi tìm thấy một cụm nơi có vẻ tách biệt khá rõ ràng. Cách tiếp cận này có vẻ khá đặc biệt, và có vẻ như nên có một cách dễ dàng để tìm một vòng xoay dữ liệu theo kiểu PCA, thay vì tối đa hóa phương sai tổng thể, tối đa hóa sự phân tách giữa các cụm.

Có một kỹ thuật tiêu chuẩn ngoài đó làm điều này? Nếu không, bất kỳ ý tưởng về làm thế nào để tạo ra một sự chuyển đổi như vậy?


Bạn có thể quan tâm đến Theo đuổi dự đoán . (Có sẵn trong phần mềm GGobi .)
chl

Câu trả lời:


6

"Xoay vòng dữ liệu theo kiểu PCA, thay vì tối đa hóa phương sai tổng thể, tối đa hóa phân tách giữa các cụm". Phân tích phân biệt chính xác là một kỹ thuật như vậy. Một thành phần chính tối đa hóa phương sai dọc theo nó. Hàm phân biệt tối đa hóa tỷ lệ giữa phương sai-cụm-phương sai / gộp-trong-cụm-phương sai dọc theo nó.


Phân tích phân biệt đối xử không được trình bày theo quy tắc như một cái gì đó mang lại dữ liệu nhúng 2d. Bạn đã gợi ý cách nhúng 2d nào từ LDA của Fisher?
eric_kernfeld

@eric_kernfeld, người ta dễ dàng vẽ dữ liệu trong không gian của các hàm phân biệt. Ngoài ra, thật dễ dàng để hiển thị các chức năng dưới dạng các trục bổ sung trong không gian của các biến ban đầu, chẳng hạn như được hiển thị ở đâyở đây .
ttnphns

8

Có hai phương pháp xuất hiện trong đầu tôi mà bạn có thể quan tâm. Đầu tiên là sử dụng các cụm đã biết và được gọi là 'Phân tích thành phần lân cận' của Goldberger et al .

Ý tưởng là bạn học một ánh xạ (ví dụ: affine) từ không gian chiều cao hơn sang không gian có thể nhìn thấy được. (ví dụ: ). Ánh xạ này được ước tính bằng cách tối đa hóa số lượng trung bình của phân loại chính xác nếu sử dụng biến thể của phân loại lân cận gần nhất k. Có một số kết quả ấn tượng thu được:A:RnR2

NCA về rượu, khuôn mặt và chữ số

Một cái khác là tSNE , học một ánh xạ (ví dụ ). Ánh xạ này không có bất kỳ ràng buộc nào, nhưng mất mát được tối ưu hóa (không phải là một số tham số, nhưng với các điểm mới trong chính ) là không gian mới phản ánh khoảng cách tương tự với không gian ban đầu. Tương tự là khá phức tạp ở đây, nó dựa trên giả định phân phối nhất định của các điểm trong không gian và phân kỳ KL tương ứng.A:RnR2R2

Đối với cái sau, có mã MATLAB mà bạn có thể tìm thấy ở liên kết đã cho. Dưới đây là một hình ảnh trực quan của bộ dữ liệu MNIST:

tSNE trên MNIST


3

Bạn có thể muốn xem bài báo này:

G. Sanguinetti, Giảm kích thước của các tập dữ liệu được nhóm, IEEE Trans. Phân tích mẫu và trí thông minh máy (PAMI) 30 (3), 535-540 (2008) (www)

Mô tả một phiên bản không được giám sát của phân tích phân biệt tuyến tính, tôi đã thấy một số minh chứng về điều này và nó trông giống như một công cụ rất hữu ích để có trong các hộp công cụ.

Nếu bạn đã biết mỗi mẫu thuộc về lớp nào, thì (như ttnphns gợi ý) bạn muốn Phân tích phân biệt tuyến tính, cuốn sách của Andrew Webb về nhận dạng mẫu thống kê là một cuốn sách tham khảo tốt cho loại điều đó.


0

Bài viết "Cách tiếp cận thống nhất với PCA, PLS, MLR và CCA" (của M Borga et al) cung cấp một mô tả nhỏ gọn về các loại phương pháp chiếu tuyến tính khác nhau bao gồm PCA và LDA.


0

Squares Least Partial sẽ làm những gì bạn muốn. Thư viện "xin" trong R là những gì tôi thường sử dụng. Dưới đây là một ví dụ tạo 3 nhóm 50 điểm, tập hợp chúng thành một khung dữ liệu với nhãn nhóm và chạy PLS trên chúng:

library(MASS)
library(pls)

pts1 = mvrnorm(50,c(3,0,3),diag(c(1,1,1)))
pts2 = mvrnorm(50,c(-3,0,3),diag(c(1,1,1)))
pts3 = mvrnorm(50,c(3,3,-3),diag(c(1,1,1)))
pts = as.data.frame(rbind(pts1,pts2,pts3))

pts$labels = c(rep(1,50),rep(2,50),rep(3,50))

plsresult = plsr(labels~.,ncomp=2,data=pts)
plot(plsresult$scores,col=pts$labels)

Tại sao không sử dụng phân tích phân biệt PLS trong trường hợp này?
chl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.