Verimli grafik kümeleme algoritması


20

Büyük bir grafik üzerinde kümeleri bulmak için verimli bir algoritma arıyorum (yaklaşık 5000 köşe ve 10000 kenarları vardır).

Şimdiye kadar JUNG java kütüphanesinde uygulanan Girvan-Newman algoritmasını kullanıyorum ama çok fazla kenar kaldırmaya çalıştığımda oldukça yavaş.

Bana büyük grafikler için daha iyi bir alternatif önerebilir misiniz?


K-araçlarına baktınız mı?
Oded

Bir grafikte nasıl kullanılacağını öğrenmek için lütfen bana biraz referans verebilir misiniz?
mariosangiorgio


VoltageClusterer'ın JUNG uygulamasına geçtim ve kesinlikle hızlı. jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…
mariosangiorgio

1
Bu , bilgisayar mühendisliği ile ilgili olarak yazılım mühendisinden daha fazla olduğu için < cs.stackexchange.com > için daha uygun değil mi?
Oeufcoque Penteano

Yanıtlar:


13

Ben şahsen Markov kümelenmesini öneriyorum . Geçmişte birkaç kez iyi sonuçlarla kullandım.

Afinite yayılımı başka bir uygulanabilir seçenektir, ancak Markov kümelemesinden daha az tutarlı görünmektedir.

Diğer çeşitli seçenekler vardır, ancak bu ikisi kutudan iyidir ve kümelenme grafiklerine (seyrek matrisler olarak görüntüleyebilirsiniz) özel problem için çok uygundur. Kullandığınız mesafe ölçüsü de dikkate alınır. Doğru bir metrik kullanırsanız hayatınız daha kolay olacaktır.

Bu makaleyi performans kriterleri ararken buldum , konuyla ilgili iyi bir anket.


Teşekkürler, önerdiğiniz tüm algoritmalara bir göz atacağım.
mariosangiorgio

Düzeltme: Bu algoritmalar, mesafeyi değil benzerliği yansıtan girdi ağırlıkları olarak gereklidir. Metrik özellik (üçgen eşitsizliği) buna girmez. Ağırlıkları, örneğin burada açıklandığı gibi (Pearson) korelasyonları ( micans.org/mcl/man/clmprotocols.html#array ) ve burada açıklandığı gibi BLAST E değerleri için doğal bir aralığa düşecek şekilde dönüştürmek yararlı olabilir. micans.org/mcl/man/clmprotocols.html#blast ).
mikans

10

Hiyerarşik kümeleme

Bu bana bir arkadaşım tarafından önerildi. Wikipedia'ya göre :

Bu yöntemde, düğüm çiftleri arasındaki bazı (genellikle topolojik) benzerlik türünün miktarını belirleyen bir benzerlik ölçüsü tanımlanır. Yaygın olarak kullanılan önlemler kosinüs benzerliği, Jaccard indeksi ve bitişiklik matrisinin sıraları arasındaki Hamming mesafesini içerir. Daha sonra bu ölçüme göre benzer düğümleri topluluklar halinde gruplandırır. Gruplandırmayı gerçekleştirmek için birkaç yaygın şema vardır; bunların en basiti tek bağlantı kümeleme olup, iki grubun sadece ve ancak farklı gruplardaki tüm düğüm çiftleri belirli bir eşik değerden daha düşük benzerliğe sahipse ve tam bağlantı kümeleme ise ayrı topluluklar olarak kabul edilir. her gruptaki tüm düğümlerin eşik değerden daha fazla benzerliğe sahip olduğu,

Markov Kümesi

Sizin durumunuzda bunu kullanıyorum. Çok kullanışlı bir algoritmadır. Algoritma hakkında güzel bir PDF bağlantısı buldum . Bu harika bir algoritma ve daha iyi bir terim olmaması nedeniyle, son derece "güçlü". Deneyin ve görün.


5

Buradaki probleminiz için, köşeleri-kenarları her köşe için bir dizi koordinatla eşleştirmenin bir yolunu düşünmeniz gerektiğini düşünüyorum. Bunu yapmanın daha iyi bir yolu olup olmadığından emin değilim. Ancak, her köşeyi bir boyut olarak temsil ederek başlayabileceğinizi düşünüyorum ve daha sonra belirli bir tepe noktasına ait kenar değeri, belirli bir boyut için çalışmanız gereken değer olacaktır. Bundan sonra basit bir Öklid mesafesi yapabilir ve bununla çalışabilirsiniz.


1
Biraz okuduktan sonra, bunu buldum, burada ve bence bir göz atmalısın.
viki.omega9
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.