Saya memiliki instance grafik dengan tepi terarah tertimbang yang nilainya dapat berada dalam kisaran [-1,1]. Saya perlu melakukan pengelompokan pada grafik ini, untuk mengetahui kelompok-kelompok di mana simpul lebih berkorelasi.
Saya mencari beberapa algoritma berbasis pengelompokan atau deteksi komunitas grafik, tetapi kebanyakan dari mereka tidak bekerja karena bobot negatif. Sampai sekarang saya telah menerapkan spinglass (disebut dalam perpustakaan igraph , ini adalah algoritma yang didasarkan pada model Potts) yang tampaknya bekerja dengan bobot positif dan negatif.
Apakah ada algoritma lain untuk melakukan pengelompokan atau deteksi komunitas pada grafik yang memiliki bobot tepi negatif dan positif?
Pembaruan: bobot tepi mewakili korelasi, 1 berarti dua simpul berkorelasi kuat, -1 yang berkorelasi terbalik dan 0 berarti independen.
Jawaban:
Sudahkah Anda mencoba memetakan nilai ke [0; 2]?
Maka banyak algoritma dapat bekerja.
Pertimbangkan misalnya Dijkstra: ini membutuhkan bobot tepi non-negatif, tetapi jika Anda tahu batas minimumnya
a
, Anda bisa menjalankannyax-a
dan mendapatkan jalur bebas siklus terpendek.Pembaruan: untuk nilai korelasi, Anda mungkin tertarik pada nilai absolut
abs(x)
(yang merupakan kekuatan korelasi!) Atau Anda mungkin ingin memecah grafik menjadi dua untuk sementara: pertama cluster hanya pada korelasi positif, kemudian pada korelasi negatif hanya jika tandanya penting untuk pengelompokan & pendekatan sebelumnya tidak berfungsi.sumber
Ya, ada algoritme yang disebut 'Afinitas Propagasi' yang berfungsi dengan bobot negatif; Saya percaya ini diimplementasikan dalam sklearn (lihat dokumentasi di sini ). Referensi untuk apa yang terjadi di balik layar dapat ditemukan di sini .
Semoga itu yang Anda cari!
sumber
Menurut saya masalah yang Anda gambarkan dikenal sebagai Masalah Clustering Korelasi . Informasi ini akan membantu Anda menemukan beberapa implementasi, seperti:
Perhatikan beberapa algoritma deteksi komunitas juga telah dimodifikasi untuk memproses jaringan yang ditandatangani, misalnya Amelio'13 , Sharma'12 , Anchuri'12 , dll. Namun, saya tidak dapat menemukan implementasi yang tersedia untuk umum.
sumber
Lihatlah kode ini , ini cukup skalabel, bekerja dengan tepi positif dan negatif, dan memecahkan Correlation Clustering (CC) sebagai kasus khusus (r = 0). Namun, untuk kasus CC (memaksimalkan tautan positif dan meminimalkan tautan negatif di dalam kluster), saya akan menyarankan metode lain yang khusus dalam menyelesaikan tujuan ini.
Sebagai ilustrasi, Correlation Clustering (tidak seperti apa yang dicari oleh literatur Deteksi Komunitas) tidak memperhitungkan kepadatan positif dari cluster, jadi ketika sebuah jaringan tidak memiliki atau sedikit ikatan negatif (kebanyakan kasus dunia nyata), semua jaringan dimasukkan ke dalam satu besar gugus.
sumber