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.community
là 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.community
xâ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.community
là 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.community
là 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.community
là 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.community
là 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.community
là 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.community
hoặc walktrap.community
như 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.