Sự khác biệt giữa các thuật toán phát hiện cộng đồng trong igraph là gì?


83

Tôi có một danh sách khoảng 100 đối tượng igraph với một đối tượng điển hình có khoảng 700 đỉnh và 3500 cạnh.

Tôi muốn xác định các nhóm đỉnh mà trong đó có nhiều mối quan hệ hơn. Kế hoạch của tôi là sau đó sử dụng một mô hình hỗn hợp để dự đoán xem có bao nhiêu đỉnh quan hệ trong nhóm bằng cách sử dụng các thuộc tính nhóm và đỉnh.

Một số người có thể muốn phản hồi các khía cạnh khác của dự án của tôi, điều này sẽ rất tuyệt, nhưng điều tôi quan tâm nhất là thông tin về các hàm trong igraph để nhóm các đỉnh. Tôi đã xem qua các thuật toán phát hiện cộng đồng này nhưng tôi không chắc chắn về ưu điểm và nhược điểm của chúng, hoặc liệu một số chức năng khác có tốt hơn cho trường hợp của tôi hay không. Tôi cũng thấy các liên kết ở đây , nhưng chúng không dành riêng cho igraph. Cảm ơn lời khuyên của bạn.

Câu trả lời:


190

Dưới đây là tóm tắt ngắn về các thuật toán phát hiện cộng đồng hiện được triển khai trong igraph:

  • edge.betweenness.communitylà một quá trình phân rã có thứ bậc trong đó các cạnh được loại bỏ theo thứ tự giảm dần của điểm giữa các cạnh của chúng (tức là số đường đi ngắn nhất đi qua một cạnh nhất định). Điều này được thúc đẩy bởi thực tế là các cạnh kết nối các nhóm khác nhau có nhiều khả năng được chứa trong nhiều đường đi ngắn nhất, đơn giản vì trong nhiều trường hợp, chúng là lựa chọn duy nhất để đi từ nhóm này sang nhóm khác. Phương pháp này mang lại kết quả tốt nhưng rất chậm vì độ phức tạp tính toán của các phép tính độ giữa cạnh và vì điểm độ giữa phải được tính lại sau mỗi lần loại bỏ cạnh. Các đồ thị có ~ 700 đỉnh và ~ 3500 cạnh của bạn nằm quanh giới hạn kích thước trên của đồ thị có thể phân tích được với phương pháp này. Một bất lợi khác làedge.betweenness.communityxây dựng một biểu đồ dendrogram đầy đủ và không cung cấp cho bạn bất kỳ hướng dẫn nào về vị trí cắt biểu đồ dendrogram để có được các nhóm cuối cùng, vì vậy bạn sẽ phải sử dụng một số biện pháp khác để quyết định điều đó (ví dụ: điểm mô đun của các phân vùng ở mỗi cấp của dendrogram).

  • fastgreedy.communitylà một cách tiếp cận phân cấp khác, nhưng nó là từ dưới lên thay vì từ trên xuống. Nó cố gắng tối ưu hóa một chức năng chất lượng được gọi là mô-đun một cách tham lam. Ban đầu, mọi đỉnh thuộc về một cộng đồng riêng biệt và các cộng đồng được hợp nhất lặp đi lặp lại sao cho mỗi hợp nhất là tối ưu cục bộ (tức là tạo ra mức tăng lớn nhất trong giá trị hiện tại của mô đun). Thuật toán dừng khi không thể tăng mô-đun thêm nữa, vì vậy nó cung cấp cho bạn một nhóm cũng như một biểu đồ dendrogram. Phương pháp này nhanh và nó là phương pháp thường được thử như một phương pháp gần đúng đầu tiên vì nó không có tham số để điều chỉnh. Tuy nhiên, nó được biết là bị giới hạn độ phân giải, tức là các cộng đồng dưới ngưỡng kích thước nhất định (tùy thuộc vào số lượng nút và cạnh nếu tôi nhớ không nhầm) sẽ luôn được sáp nhập với các cộng đồng lân cận.

  • walktrap.communitylà một cách tiếp cận dựa trên các bước đi ngẫu nhiên. Ý tưởng chung là nếu bạn thực hiện các lần đi bộ ngẫu nhiên trên biểu đồ, thì các lần đi bộ có nhiều khả năng ở trong cùng một cộng đồng hơn vì chỉ có một số cạnh dẫn ra bên ngoài một cộng đồng nhất định. Walktrap chạy các cuộc đi bộ ngắn ngẫu nhiên từ 3-4-5 bước (tùy thuộc vào một trong các tham số của nó) và sử dụng kết quả của những lần đi bộ ngẫu nhiên này để hợp nhất các cộng đồng riêng biệt theo cách từ dưới lên fastgreedy.community. Một lần nữa, bạn có thể sử dụng điểm mô-đun để chọn vị trí cắt hình ảnh. Nó chậm hơn một chút so với cách tiếp cận tham lam nhanh nhưng cũng chính xác hơn một chút (theo ấn phẩm gốc).

  • spinglass.communitylà một cách tiếp cận từ vật lý thống kê, dựa trên cái gọi là mô hình Potts. Trong mô hình này, mỗi hạt (tức là đỉnh) có thể ở một trong c trạng thái spin, và tương tác giữa các hạt (tức là các cạnh của đồ thị) chỉ định cặp đỉnh nào muốn ở cùng trạng thái spin và cặp đỉnh nào thích có các trạng thái quay khác nhau. Mô hình sau đó được mô phỏng cho một số bước nhất định, và cuối cùng trạng thái spin của các hạt xác định các cộng đồng. Kết quả là như sau: 1) Cuối cùng sẽ không bao giờ có nhiều hơn c cộng đồng, mặc dù bạn có thể đặt c cao tới 200, có thể là đủ cho mục đích của bạn. 2) Có thể có ít hơn ccộng đồng cuối cùng vì một số trạng thái quay có thể trở nên trống rỗng. 3) Không đảm bảo rằng các nút ở các phần hoàn toàn từ xa (hoặc không được kết nối) của mạng có các trạng thái quay khác nhau. Đây có nhiều khả năng là một vấn đề chỉ đối với các đồ thị bị ngắt kết nối, vì vậy tôi sẽ không lo lắng về điều đó. Phương pháp này không đặc biệt nhanh và không xác định (do chính mô phỏng), nhưng có một tham số độ phân giải có thể điều chỉnh được để xác định kích thước cụm. Một biến thể của phương pháp spinglass cũng có thể tính đến các liên kết phủ định (tức là các liên kết có điểm cuối thích nằm trong các cộng đồng khác nhau).

  • leading.eigenvector.communitylà một cách tiếp cận phân cấp từ trên xuống để tối ưu hóa lại chức năng mô-đun. Trong mỗi bước, đồ thị được chia thành hai phần theo cách mà sự tách biệt đó tạo ra sự gia tăng đáng kể về mô đun. Sự phân chia được xác định bằng cách đánh giá bộ điều chỉnh riêng hàng đầu của cái gọi là ma trận mô-đun, và cũng có một điều kiện dừng để ngăn các nhóm được kết nối chặt chẽ bị chia tách thêm. Do có liên quan đến các tính toán eigenvector, nó có thể không hoạt động trên các đồ thị suy biến trong đó trình giải eigenvector ARPACK không ổn định. Trên đồ thị không suy biến, nó có khả năng mang lại điểm mô đun cao hơn so với phương pháp tham lam nhanh, mặc dù nó chậm hơn một chút.

  • label.propagation.communitylà một cách tiếp cận đơn giản, trong đó mỗi nút được gán một trong k nhãn. Sau đó, phương thức tiến hành lặp đi lặp lại và gán lại nhãn cho các nút theo cách mà mỗi nút lấy nhãn thường xuyên nhất trong số các nút lân cận của nó một cách đồng bộ. Phương thức dừng khi nhãn của mỗi nút là một trong những nhãn thường xuyên nhất trong vùng lân cận của nó. Nó rất nhanh nhưng mang lại các kết quả khác nhau dựa trên cấu hình ban đầu (được quyết định ngẫu nhiên), do đó người ta nên chạy phương pháp này nhiều lần (ví dụ: 1000 lần cho một đồ thị) và sau đó xây dựng nhãn đồng thuận, có thể là tẻ nhạt.

igraph 0.6 cũng sẽ bao gồm thuật toán phát hiện cộng đồng Infomap hiện đại, dựa trên các nguyên tắc lý thuyết thông tin; nó cố gắng xây dựng một nhóm cung cấp độ dài mô tả ngắn nhất cho một lần đi bộ ngẫu nhiên trên biểu đồ, trong đó độ dài mô tả được đo bằng số bit dự kiến ​​trên mỗi đỉnh cần thiết để mã hóa đường đi của một lần đi bộ ngẫu nhiên.

Dù sao, tôi có thể sẽ đi với fastgreedy.communityhoặc walktrap.communitynhư một ước lượng đầu tiên và sau đó đánh giá các phương pháp khác khi hóa ra rằng hai phương pháp này không phù hợp với một vấn đề cụ thể vì một số lý do.


3
Theo như tôi biết, đây là một điều khá phổ biến đối với các thuật toán không xác định. Tuy nhiên, bạn nên cẩn thận vì cộng đồng i trong một lần chạy thuật toán có thể không nhất thiết phải khớp với cộng đồng i trong một lần chạy khác vì các ID cộng đồng không có ý nghĩa ngữ nghĩa.
Tamás

2
Có một cái mới: multilevel.community. Có phiền thêm nó vào danh sách của bạn không? (Câu trả lời hiện có là tuyệt vời btw. Cảm ơn bạn!)
Zach

1
@ Tamás bạn có thể vui lòng giải thích sự khác biệt giữa algos multilevel.communityfastgreedy.communityalgos không? Có vẻ như hai người này rất giống nhau. Cảm ơn rất nhiều trước.
Antoine

3
Chúng không giống nhau; fastgreedy.communityhợp nhất các cặp cộng đồng theo cách lặp lại, luôn chọn cặp mang lại mức tăng tối đa trong mô đun tổng thể . Trong multilevel.community, các cộng đồng không được hợp nhất; thay vào đó, các nút được di chuyển giữa các cộng đồng để mỗi nút đưa ra quyết định cục bộ nhằm tối đa hóa đóng góp của chính nó vào điểm số mô-đun. Khi thủ tục này bị mắc kẹt (tức là không có nút nào thay đổi tư cách thành viên của chúng), thì tất cả các cộng đồng được thu gọn thành các nút duy nhất và quá trình tiếp tục (đó là lý do tại sao nó là đa cấp).
Tamás

2
@Antoine: thuật toán InfoMap có một cách tiếp cận khoa học và tốt đẹp để xử lý các cạnh có hướng. Việc triển khai trong igraph không phải là hiệu quả nhất (do vấn đề cấp phép), nhưng nó sẽ hoạt động đối với các biểu đồ nhỏ hơn. Nếu nó hóa ra là quá chậm, bạn có thể thử các mã trong những tác giả của thuật toán từ mapequation.org
Tamás

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.