Phân cụm (k-nghĩa hoặc cách khác) với ràng buộc kích thước cụm tối thiểu


14

Tôi cần phân cụm các đơn vị thành các cụm k để giảm thiểu tổng bình phương trong nhóm (WSS), nhưng tôi cần đảm bảo rằng mỗi cụm chứa ít nhất m đơn vị. Bất kỳ ý tưởng nào nếu bất kỳ chức năng phân cụm của R cho phép phân cụm thành k cụm chịu một ràng buộc kích thước cụm tối thiểu? kmeans () dường như không cung cấp tùy chọn ràng buộc kích thước.

Câu trả lời:


5

Sử dụng phân cụm EM

Trong phân cụm EM, thuật toán lặp lại tinh chỉnh mô hình cụm ban đầu để phù hợp với dữ liệu và xác định xác suất điểm dữ liệu tồn tại trong cụm. Thuật toán kết thúc quá trình khi mô hình xác suất phù hợp với dữ liệu. Hàm được sử dụng để xác định sự phù hợp là khả năng ghi nhật ký của dữ liệu được đưa ra cho mô hình.

Nếu các cụm trống được tạo trong quá trình hoặc nếu tư cách thành viên của một hoặc nhiều cụm nằm dưới ngưỡng nhất định, các cụm có dân số thấp sẽ được đặt lại tại các điểm mới và thuật toán EM được chạy lại.


Cảm ơn, Maryna. Tôi muốn một giải pháp ít phụ thuộc nhiều vào các mô hình tham số (điển hình, không thể thực hiện được), nhưng chắc chắn sẽ xem xét nó.
Cyrus S

4

Vấn đề này được giải quyết trong bài viết này:

Bradley, PS, KP Bennett và Ayhan Demiriz. "Ràng buộc k-có nghĩa là phân cụm." Nghiên cứu của Microsoft, Redmond (2000) : 1-8.

Tôi có một triển khai thuật toán trong python.


Điều này là hoàn hảo, cảm ơn! Tôi đã sử dụng rPythongói trong R để tạo giao diện cho triển khai này mà tôi đã truy cập từ tập lệnh R của mình.
Michael Ohlrogge

@MichaelOhlrogge bạn có một ví dụ ở đâu đó (github?) Trên giao diện bạn đã viết để gọi gói python đó là mẫu R không? Cảm ơn!
Matifou

Xin lỗi, tôi đã tìm xung quanh mã cũ của mình nhưng không thể tìm thấy nó nữa.
Michael Ohlrogge

3

Tôi nghĩ đó chỉ là vấn đề chạy k nghĩa là một phần của vòng lặp if với kiểm tra kích thước cụm, Ie Count n trong cụm k - cũng nhớ rằng k có nghĩa sẽ cho kết quả khác nhau cho mỗi lần chạy trên cùng một dữ liệu dù sao bạn cũng nên chạy nó như một phần của vòng lặp để trích xuất kết quả "tốt nhất"


1
Cảm ơn, Alex. Tôi thấy một vấn đề với điều này mặc dù: nếu trên các vòng lặp, các giải pháp được tạo ra không bao giờ thỏa mãn các ràng buộc? Điều đó có thể xảy ra nếu k có nghĩa là được thiết lập để chạy mà không có ràng buộc kích thước cụm. Tôi thích một giải pháp tránh điều này. (Bản chất của ứng dụng là tôi thực sự cần phải đảm bảo các cụm có kích thước tối thiểu.)
Cyrus S

1

Dữ liệu của bạn lớn đến mức nào? Có lẽ bạn có thể thử chạy một cụm phân cấp và sau đó quyết định cụm nào giữ lại dựa trên dendrogram của bạn.

Nếu tập dữ liệu của bạn rất lớn, bạn cũng có thể kết hợp cả hai phương pháp phân cụm: phân cụm không phân cấp ban đầu và sau đó phân cụm theo phân cấp bằng cách sử dụng các nhóm từ phân tích không phân cấp. Bạn có thể tìm thấy một ví dụ về phương pháp này trong Martínez-Pastor et al (2005)


Cảm ơn, Manuel. Điều này thực sự nghe có vẻ như một khả năng rất hấp dẫn. Tôi cần phải suy nghĩ về việc phân vùng phân cấp có áp đặt các ràng buộc nhất định sẽ ngăn thuật toán đạt được phân vùng cụm tối ưu trực tiếp dưới ràng buộc kích thước hay không. Nhưng theo trực giác, tôi có thể thấy rằng điều này có thể làm việc.
Cyrus S

0

Điều này có thể đạt được bằng cách sửa đổi bước gán cụm (E in EM) bằng cách xây dựng nó như là một vấn đề tối ưu hóa mạng tuyến tính tối thiểu (MCF).

Tôi đã viết một gói python sử dụng SimpleMinCostFlow của công cụ nghiên cứu hoạt động của Google, đây là một triển khai C ++ nhanh. Nó có API scikit-lean tiêu chuẩn.

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.