Tôi đang thực hiện một số thử nghiệm phân cụm một số lượng lớn các vectơ thưa thớt rất lớn thể hiện tần suất-tần số nghịch đảo-tài liệu của các tài liệu siêu văn bản khác nhau. Bạn sẽ đề xuất thuật toán nào để phân cụm dữ liệu này, có tính đến tỷ lệ của tập dữ liệu? Kích thước của vectơ sẽ là> 3 · 10 và số lượng vectơ có thể là khoảng 10 . Tôi đã xem xét thuật toán dbscan và quang học. Số lượng cụm không được biết đến là một linh mục. Và một chỉ số không gian với chiều cao như vậy có vẻ phức tạp.Clustering không gian vectơ lớn
Trả lời
Tôi đã có kết quả gần như tốt với một cụm K đơn giản như hầu hết mọi thứ, và nó chắc chắn nhanh hơn hầu hết các lựa chọn thay thế. Tôi cũng đã nhận được kết quả tốt với sự kết hợp hai chiều khôn ngoan, nhưng nó hơi chậm hơn một chút. Đối với K-means, bạn phải bắt đầu với một số cụm ước tính, nhưng bạn có thể điều chỉnh nó theo thuật toán khi bạn đi theo. Nếu bạn tìm thấy hai cụm có nghĩa là quá gần nhau, bạn sẽ giảm số lượng cụm. Nếu bạn tìm thấy các cụm có phạm vi biến thể quá lớn, bạn hãy thử nhiều cụm hơn. Tôi đã tìm thấy sqrt (N) là một điểm khởi đầu hợp lý - nhưng tôi thường bắt đầu với hơn 10^7 tài liệu thay vì 10^9. Đối với 10^9, nó có thể có ý nghĩa để giảm bớt phần nào đó.
Nếu điều đó tùy thuộc vào tôi, tuy nhiên, tôi nghĩ rất khó khăn khi bắt đầu bằng cách giảm thứ nguyên với thứ gì đó như Landmark MDS, rồi thực hiện phân cụm.
Cây quyết định phổ biến để hoạt động hiệu quả trong không gian chiều cao.Kiểm tra Clustering Via Decision Tree Construction.
Ngoài ra, Randomized Forests là những người học cực kỳ hiệu quả và OpenCV implementation exists nếu bạn muốn chơi với nó.
Tôi nghe rằng semantic hashing đạt được kết quả xuất sắc. Tuy nhiên, mạng lưới niềm tin sâu sắc là khá để thực hiện. Bạn có thể muốn thử băm nhỏ (đó là cách tiếp cận xác suất) hoặc locality sensistive hashing for euclidean spaces.
Nói chung, phân cụm trong không gian chiều cao như vậy là khó khăn do lời nguyền của chiều và thực tế là hầu hết các mặt hàng có khoảng cách tương tự với nhau. Các phương pháp chuẩn như K-Means có thể hoạt động nếu bạn giảm kích thước trước qua SOM hoặc PCA.
Cảm ơn các liên kết thú vị. – piotr
Khi phân nhóm dữ liệu tôi sẽ luôn cố gắng ít nhất hai thuật toán này theo thứ tự này:
K-Phương tiện: cố gắng tinh chỉnh kết quả càng nhiều càng tốt. Nếu bạn có thể có được K-Means để làm việc cho bạn và cung cấp kết quả tốt, bạn sẽ gần như chắc chắn không làm tốt hơn khi bất kỳ thuật toán khác.
Tối đa hóa kỳ vọng: thuật toán K-means thực sự được phát triển thành giải pháp thay thế giá rẻ và tốt cho thuật toán EM. Thuật toán EM phức tạp hơn để hiểu và tốn kém hơn để tính toán, nhưng kết quả từ EM là tuyệt vời. Bạn có thể tìm hiểu thêm về EM http://en.wikipedia.org/wiki/Expectation-maximization_algorithm. Có một thực OpenCV của EM: http://opencv.willowgarage.com/documentation/expectation-maximization.html
Nếu kết quả không ai trong số hai đều thỏa đáng, tôi sẽ bắt đầu tìm kiếm ở nơi khác, nhưng không cho đến khi bạn đã thử cả hai.
Không phải là K-Means là một thể hiện của EM? – bayer
@bayer: Không, chúng chắc chắn không phải là cùng một thuật toán nếu đó là ý của bạn. K-Means là không tham số nhưng EM là (nghĩa là EM khẳng định rằng có một phân bố gaussian đa biến tiềm ẩn cho dữ liệu mà không phải là một giả định rất nghiêm ngặt nếu bạn xem xét định lý giới hạn trung tâm.) Từ những gì tôi hiểu, EM thuật toán đôi khi được nhóm lại thành một thuật toán meta, nơi các thuật toán khác nằm dưới nó. Nó thực sự có thể được thực hiện độc lập từ những gì tôi đã nhìn thấy. – ldog
- 1. Clustering Google Markers Clustering - Python/Django
- 2. Hiệu suất Clojure, vòng lặp lớn trên các vectơ lớn
- 3. Markov Clustering
- 4. Clustering a sparse dataset of binary vector
- 5. Node.js Multi Server Clustering
- 6. Clustering và Bayes classifier Matlab
- 7. Clustering Keys trong Cassandra
- 8. WEKA K-Means Clustering
- 9. ScrollView thêm không gian lớn ở cuối
- 10. Clustering - Vector thưa thớt và Vector dày đặc
- 11. làm cách nào để tạo một vectơ lớn trong clojure
- 12. Nodejs Clustering và expressjs phiên
- 13. Clustering ~ 100,000 Short Strings trong Python
- 14. lỗi Strange của Hierarchical Clustering trong R
- 15. Clustering (fkmeans) với Mahout sử dụng Clojure
- 16. 'vectơ' trong không gian tên 'std' không đặt tên là loại
- 17. ggplot2 loạt thời gian gió với mũi tên/vectơ
- 18. k-means clustering implementation trong Javascript?
- 19. Clustering and Shared Data trong Vert.x
- 20. dấu Clustering trên mapbox/tờ rơi
- 21. Mảng lớn chiếm nhiều không gian bộ nhớ hơn
- 22. Kết hợp không gian của các tập dữ liệu lớn
- 23. Tệp lớn trong Clojure và lỗi không gian heap Java
- 24. Clustering với ma trận khoảng cách
- 25. Matlab: K-có nghĩa là clustering
- 26. Cách nhanh nhất để đặt chéo hai vectơ lôgic lớn trong R
- 27. Đánh dấu Clustering - Fusion Table Layer - Google Maps v3
- 28. thời gian người dùng lớn hơn thời gian thực
- 29. Tháp phái sinh và cách sử dụng gói không gian vectơ (haskell)
- 30. Gán tên cho mục nhập vectơ mà không gán tên vectơ cho một tên biến?
K-Means nên ** luôn ** là kỹ thuật phân đoạn đầu tiên bạn thử khi cố gắng nhóm * mọi thứ *. Là đơn giản, hiệu quả và cung cấp kết quả xuất sắc hầu hết thời gian.Nhược điểm duy nhất là phải chọn một giá trị thích hợp của K. Bạn luôn có thể thử một chuỗi ngày càng tăng của K tính toán phương sai intercluster của bạn như là một tiêu chí cho chất lượng của cụm. Tuy nhiên, điều này không hoạt động tốt trong thực tế. – ldog