Thuật toán phân cụm đồ thị hiệu quả


20

Tôi đang tìm kiếm một thuật toán hiệu quả để tìm các cụm trên một biểu đồ lớn (Nó có khoảng 5000 đỉnh và 10000 cạnh).

Cho đến nay tôi đang sử dụng thuật toán Girvan của Newman được triển khai trong thư viện java JUNG nhưng nó khá chậm khi tôi cố gắng loại bỏ rất nhiều cạnh.

Bạn có thể gợi ý cho tôi một sự thay thế tốt hơn cho các đồ thị lớn?


Bạn đã xem k-nghĩa chưa?
Oded

Bạn có thể vui lòng cho tôi một số tài liệu tham khảo để tìm hiểu về cách sử dụng nó trên biểu đồ không?
marioangiorgio


Tôi đã chuyển sang triển khai JUNG của VoltageClusterer và nó chắc chắn rất nhanh. jung.sourceforge.net/doc/api/edu/uci/ics/jung/alerskyms/iêu
marioangiorgio

1
Đây không phải là thích hợp hơn cho < cs.stackexchange.com > vì nó thiên về khoa học máy tính hơn là kỹ sư phần mềm?
Oeufcoque Penteano

Câu trả lời:


13

Cá nhân tôi đề nghị Markov phân cụm . Tôi đã sử dụng nó nhiều lần trong quá khứ với kết quả tốt.

Lan truyền ái lực là một lựa chọn khả thi khác, nhưng có vẻ ít nhất quán hơn so với phân cụm Markov.

Có nhiều lựa chọn khác, nhưng hai tùy chọn này rất tốt và phù hợp với vấn đề cụ thể của biểu đồ phân cụm (mà bạn có thể xem là ma trận thưa thớt). Đo khoảng cách bạn đang sử dụng cũng là một cân nhắc. Cuộc sống của bạn sẽ dễ dàng hơn nếu bạn đang sử dụng một số liệu thích hợp.

Tôi tìm thấy bài báo này trong khi tìm kiếm điểm chuẩn hiệu suất, nó là một cuộc khảo sát tốt về chủ đề này.


Cảm ơn, tôi sẽ xem xét tất cả các thuật toán mà bạn đề xuất.
marioangiorgio

Sửa lỗi: các thuật toán này cần có trọng số đầu vào phản ánh sự tương tự, không phải khoảng cách. Thuộc tính số liệu (bất đẳng thức tam giác) không đi vào nó. Có thể hữu ích khi chuyển đổi các trọng số sao cho chúng nằm trong phạm vi tự nhiên, ví dụ: tương quan (Pearson) như được mô tả ở đây ( micans.org/mcl/man/clmprot Protocol.html#array ) và cho các giá trị BLAST như được mô tả ở đây ( micans.org/mcl/man/clmprot Protocol.html#blast ).
micans

10

Phân cụm phân cấp

Điều này đã được đề nghị với tôi bởi một người bạn. Theo Wikipedia :

Trong phương pháp này, người ta định nghĩa một phép đo độ tương tự định lượng một số loại tương tự (thường là tôpô) giữa các cặp nút. Các biện pháp thường được sử dụng bao gồm độ tương tự cosin, chỉ số Jaccard và khoảng cách Hamming giữa các hàng của ma trận kề. Sau đó, một nhóm các nút tương tự vào các cộng đồng theo biện pháp này. Có một số sơ đồ phổ biến để thực hiện việc phân nhóm, hai nhóm đơn giản nhất là phân cụm liên kết đơn, trong đó hai nhóm được coi là các cộng đồng riêng biệt khi và chỉ khi tất cả các cặp nút trong các nhóm khác nhau có độ tương tự thấp hơn một ngưỡng nhất định và phân cụm liên kết hoàn chỉnh , trong đó tất cả các nút trong mỗi nhóm có độ tương tự lớn hơn ngưỡng.

Cụm Markov

Đây là những gì tôi sử dụng trong tình huống của bạn. Nó là một thuật toán rất hữu ích. Tôi tìm thấy một liên kết đến một bản PDF đẹp về Thuật toán. Nó là một thuật toán tuyệt vời, và, vì thiếu một thuật ngữ tốt hơn, cực kỳ "mạnh mẽ". Hãy thử nó và xem.


5

Đối với vấn đề của bạn ở đây, tôi nghĩ bạn nên nghĩ ra cách ánh xạ các đỉnh-đỉnh thành một tập hợp tọa độ cho mỗi đỉnh. Tôi không chắc chắn nếu có một cách tốt hơn để làm điều này. Nhưng, tôi nghĩ rằng bạn có thể bắt đầu bằng cách biểu thị mỗi đỉnh là một thứ nguyên và sau đó, giá trị cạnh cho một đỉnh cụ thể sẽ trở thành giá trị bạn cần làm việc với thứ nguyên cụ thể đó. Sau đó, bạn có thể thực hiện một khoảng cách Euclid đơn giản và làm việc với điều đó.


1
Sau khi đọc lên một chút, tôi thấy điều này, ở đây và tôi nghĩ bạn nên xem qua.
viki.omega9
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.