Tôi tin rằng tiêu đề của câu hỏi này nói lên tất cả.
Tôi tin rằng tiêu đề của câu hỏi này nói lên tất cả.
Câu trả lời:
Nó giúp suy nghĩ về Lời nguyền của chiều là gì. Có một số chủ đề rất tốt trên CV đáng đọc. Đây là nơi để bắt đầu: Giải thích Lời nguyền của chiều hướng trẻ em .
Tôi lưu ý rằng bạn quan tâm đến cách áp dụng này cho phân cụm -means. Điều đáng lưu ý là -means là một chiến lược tìm kiếm để giảm thiểu (chỉ) khoảng cách Euclide bình phương. Xét về điều đó, đáng để suy nghĩ về khoảng cách của Euclide liên quan đến lời nguyền của chiều (xem: Tại sao khoảng cách Euclide không phải là một thước đo tốt trong các chiều cao? ).
Câu trả lời ngắn từ các chủ đề này là âm lượng (kích thước) của không gian tăng với tốc độ đáng kinh ngạc so với số lượng kích thước. Ngay cả chiều (dường như không phải là 'chiều cao' đối với tôi) cũng có thể mang đến lời nguyền. Nếu dữ liệu của bạn được phân phối đồng đều trong không gian đó, tất cả các đối tượng sẽ trở nên tương đương với nhau. Tuy nhiên, như @ Anony-Mousse lưu ý trong câu trả lời của mình cho câu hỏi đó, hiện tượng này phụ thuộc vào cách dữ liệu được sắp xếp trong không gian; nếu chúng không đồng nhất, bạn không nhất thiết phải có vấn đề này. Điều này dẫn đến câu hỏi liệu dữ liệu chiều cao phân tán đồng đều có phổ biến hay không (xem: Lời nguyền của chiều có thực sự tồn tại trong dữ liệu thực không? ).
Tôi sẽ lập luận rằng những gì quan trọng không nhất thiết là số lượng biến số (chiều theo nghĩa đen của dữ liệu của bạn), mà là chiều kích hiệu quả của dữ liệu của bạn. Theo giả định rằng nguyên là 'quá cao' đối với -means, chiến lược đơn giản nhất sẽ là đếm số lượng tính năng bạn có. Nhưng nếu bạn muốn nghĩ theo chiều hướng hiệu quả, bạn có thể thực hiện phân tích thành phần nguyên tắc (PCA) và xem xét cách các giá trị bản địa giảm xuống. Điều khá phổ biến là hầu hết các biến thể tồn tại trong một vài kích thước (thường cắt ngang các kích thước ban đầu của tập dữ liệu của bạn). Điều đó có nghĩa là bạn sẽ ít gặp vấn đề với -means theo nghĩa là chiều kích hiệu quả của bạn thực sự nhỏ hơn nhiều.
Một cách tiếp cận có liên quan hơn sẽ là kiểm tra phân phối khoảng cách theo cặp trong tập dữ liệu của bạn dọc theo dòng @ hxd1011 gợi ý trong câu trả lời của anh ấy . Nhìn vào các phân phối biên đơn giản sẽ cho bạn một số gợi ý về tính đồng nhất có thể. Nếu bạn bình thường hóa tất cả các biến nằm trong khoảng , khoảng cách theo cặp phải nằm trong khoảng . Khoảng cách tập trung cao sẽ gây ra vấn đề; mặt khác, một phân phối đa phương thức có thể là hy vọng (bạn có thể xem một ví dụ trong câu trả lời của tôi ở đây: Làm thế nào để sử dụng cả hai biến nhị phân và biến liên tục với nhau trong phân cụm? ).
Tuy nhiên, liệu -means sẽ 'làm việc' hay không vẫn là một câu hỏi phức tạp. Theo giả định rằng có các nhóm tiềm ẩn có ý nghĩa trong dữ liệu của bạn, chúng không nhất thiết tồn tại trong tất cả các kích thước của bạn hoặc trong các kích thước được xây dựng để tối đa hóa sự thay đổi (nghĩa là các thành phần nguyên tắc). Các cụm có thể ở các kích thước biến thể thấp hơn (xem: Ví dụ về PCA trong đó các PC có phương sai thấp là Hồi hữu ích . Nghĩa là, bạn có thể có các cụm có các điểm nằm sát bên trong và tách biệt giữa chỉ một vài kích thước của bạn hoặc trên các PC biến đổi thấp hơn, nhưng không giống nhau từ xa trên các PC biến đổi cao, điều này sẽ gây ra -means để bỏ qua các cụm bạn đang theo dõi và chọn ra các cụm giả thay thế (một số ví dụ có thể được nhìn thấy ở đây:Làm thế nào để hiểu những nhược điểm của K-nghĩa ).
Câu trả lời của tôi không giới hạn đối với phương tiện K, nhưng kiểm tra xem chúng ta có lời nguyền về chiều không cho bất kỳ phương pháp dựa trên khoảng cách nào. K-mean dựa trên thước đo khoảng cách (ví dụ: khoảng cách Euclide)
Nếu chúng ta có lời nguyền về vấn đề chiều, điều bạn sẽ thấy, là những giá trị này rất gần nhau. Điều này có vẻ rất phản trực giác, bởi vì nó có nghĩa là mọi người đều ở gần hoặc xa mọi người và khoảng cách về cơ bản là vô dụng.
runif
rnorm
Dưới đây là mô phỏng cho kích thước từ 1 đến 500, các tính năng được phân phối đồng đều từ 0 đến 1.
plot(0, type="n",xlim=c(0,0.5),ylim=c(0,50))
abline(v=1/6,lty=2,col=2)
grid()
n_data=1e3
for (p in c(1:5,10,15,20,25,50,100,250,500)){
x=matrix(runif(n_data*p),ncol=p)
all_dist=as.vector(dist(x))^2/p
lines(density(all_dist))
}