“R” de grafik kümelemeye yaklaşım ve örnek


10

'R' grafik kümeleme kullanarak bir grafikte düğüm / birleştirme düğümleri arıyorum.

İşte benim sorunumun şaşırtıcı bir oyuncak varyasyonu.

  • İki "küme" vardır
  • Kümeleri birbirine bağlayan bir "köprü" var

İşte bir aday ağı:
resim açıklamasını buraya girin

Bağlantı mesafesine baktığımda, "hopcount", eğer isterseniz, o zaman aşağıdaki matrisi alabilirim:

 mymatrix <- rbind(
     c(1,1,2,3,3,3,2,1,1,1),
     c(1,1,1,2,2,2,1,1,1,1),
     c(2,1,1,1,1,1,1,1,2,2),
     c(3,2,1,1,1,1,1,2,3,3),
     c(3,2,1,1,1,1,1,2,3,3),
     c(3,2,1,1,1,1,1,2,2,2),
     c(2,1,1,1,1,1,1,1,2,2),
     c(1,1,1,2,2,2,1,1,1,1),
     c(1,1,2,3,3,2,2,1,1,1),
     c(1,1,2,3,3,2,2,1,1,1))

Burada düşünceler:

  • Şans ya da oyuncağın sadeliği nedeniyle matrisin belirgin yamaları vardır, bu (çok büyük) matristeki durum böyle olmayacaktır. Nokta ve satır arasındaki ilişkiyi rastgele seçersem o kadar da temiz olmazdı.
  • Bir yanlışım olabilir - eğer bir yazım hatası varsa bana bildirin.
  • Buradaki atlama sayımı, i satırındaki noktayı j sütunundaki nokta ile bağlamak için en kısa atlama sayısıdır. Kendi kendine atlama hala bir sıçrama, bu yüzden diyagonal hepsi.

Yani bu matriste daha büyük mesafe (şerbetçiotu) daha yüksek bir sayıya sahiptir. Mesafe yerine "bağlanabilirlik" gösteren bir matris istersem, matrisin her hücresinin çarpımsal tersiyle değiştirildiği nokta tersi yapabilirim.

Sorular:

Kendi yolumu bulmama yardım etmek için:

  • Bir grafikteki düğüm sayısını birleştirerek azaltmak için kullanılan terimler nelerdir? Kümeleme, birleştirme, munging mi - kullanmam gereken kelimeler nelerdir?
  • Kanıtlanmış teknikler nelerdir? Konuyla ilgili bir ders kitabı var mı? Makalelere veya web sitelerine işaret edebilir misiniz?
  • Şimdi buraya ilk bakmaya çalıştım - harika bir "ilk kontrol" nokta. Aradığımı bulamadım. Eğer kaçırırsam (olası değil), CV'de bu konu hakkında bir veya iki soruya yönlendirebilir misiniz?

Beni gittiğim yere götürmek için:

  • Ağdaki düğümleri doğru şekilde kümeleyecek bir 'R' paketi var mı?
  • Bunu yapmak için beni örnek koda yönlendirebilir misiniz?
  • Ortaya çıkan azaltılmış ağı grafiksel olarak sunacak bir 'R' paketi var mı?
  • Bunu yapmak için beni örnek koda yönlendirebilir misiniz?

Şimdiden teşekkürler.


2
Lütfen (R) paket veya kod istemenin konu dışı olduğunu unutmayın. "Bul" bölümünü daha belirgin yapmak ve "almak" bölümünü daha az yapmak isteyebilirsiniz.
gung - Monica'yı eski

3
Bir şans @ gung aldığımda tam bir cevap vermeye çalışacağım. Ancak hızlı bir cevap için, R paketini kullanan EngrStudent örnek grafiğine uygulanan topluluk tespitiigraph .
Andy W

1
IMHO bu grafikte sadece bir küme var. Bununla birlikte, birbiriyle örtüşen üç klik vardır . Planınızın neden ortadaki kipi yok etmek olduğunu bilmiyorum - bunu resmileştirmedikçe bir algoritma bulmakta zorlanacaksınız.
QUIT - Anony-Mousse

2
Değeri ne olursa olsun, mcl ( micans.org/mcl ) iki kümeyi bulur (Anony- Mousse'nin değerlendirmesine gerçekten katılmıyorum ve grafik kümelemeye özellikle modelleme yaklaşımının verimli olduğunu düşünmüyorum). Bu, tek parametresi (ayrıntı düzeyini kontrol eden) varsayılan olarak ayarlanmıştır. Bu algoritma (mcl - I yayımladım) biyoinformatikte oldukça yaygın olarak kullanılmaktadır ve (yüksek oranda ölçeklenebilir) kaynak kodu mevcuttur. R ile arayüzleme, metin arayüzleri kullanılarak kolayca yapılabilir.
mikans

2
Kod ve paket istemek burada her zaman konu dışı olmuştur. Mevcut kod ile yardım istemek (örneğin tekrarlanabilir bir örneğiniz var ) Yığın Taşması ile ilgili bir konudur . Bunu bilmiyorsan, öğrenme zamanı. SO'daki R Q'lara cevap veren kullanıcıların istatistiksel uzmanlığa sahip olmadığı fikri benim için garip, ancak birçok insan bunu varsayıyor gibi görünüyor; her durumda doğru değildir. Q'nuzun bir SO postası tarafından yanıtlandığını burada bir şey söylemelidir. OTOH, `` bu ne tür bir analiz, birisi beni kaynaklara yönlendirebilir mi? '' Diyerek, kesinlikle burada konuyla ilgili.
gung - Monica'yı eski

Yanıtlar:


9

Özel örneğiniz , ağdaki topluluktaki düğümler arasında daha fazla bağlantıya ve farklı topluluklardaki düğümler arasında nispeten daha az kenara sahip topluluklar bulmanızı önerir . Bu, tamamen bağlantısı kesilmiş altgrafların olduğu yalıtılmış topluluklar bulmaktan farklıdır .

Aşağıda R igraphpaketinde topluluğun algılanması için bir paket ve Clauset ve ark. (2004) . Bu algoritmayı kullanmak için "sekme sayımı" nı kendi kendine döngüsüz bir ikili bitişiklik matrisine çeviriyorum. Algoritmanın elle yazılmış diyagramınız ve sağladığınız verilerle tutarlı olan yönlendirilmemiş bir matrise ihtiyacı vardır (kenarlar simetriktir).

library(igraph)
mymatrix <- rbind(
     c(1,1,2,3,3,3,2,1,1,1),
     c(1,1,1,2,2,2,1,1,1,1),
     c(2,1,1,1,1,1,1,1,2,2),
     c(3,2,1,1,1,1,1,2,3,3),
     c(3,2,1,1,1,1,1,2,3,3),
     c(3,2,1,1,1,1,1,2,2,2),
     c(2,1,1,1,1,1,1,1,2,2),
     c(1,1,1,2,2,2,1,1,1,1),
     c(1,1,2,3,3,2,2,1,1,1),
     c(1,1,2,3,3,2,2,1,1,1))

#turn this into an adjacency matrix
adjMat <- mymatrix == 1
diag(adjMat) <- 0 #no self loops

g  <- graph.adjacency(adjMat)
plot(g)

#only works for undirected graphs, which this example is fine since symetric
fc <- fastgreedy.community(as.undirected(g))

#make colors for different communities
V(g)$color <- ifelse(membership(fc)==1,"red","blue")
plot(g)

resim açıklamasını buraya girin

Daha fazla analiz için bu tür düğümlerin daraltılmasının uygunluğu hakkında yorum yapamam, ancak böyle bir topluluk tespiti ağı keşfetmek için kesinlikle yararlıdır. Çok sayıda başka topluluk algılama algoritması da vardır (ayrıca R'de ağ analizi için diğer kütüphaneler). Bu, bu oyuncak problemi için istediğiniz çıktıyı üreten sadece bir örnektir.


1
Ayrıca, bir grafik veritabanı kullanma hakkında önceki yorumlar verildiğinde, grafiğin bir bitişiklik matrisi olarak temsil edilmesine gerek yoktur . Düğümler için bir tablo ve her kenar için bir satır daha tipik / verimli bir biçimdir ve bunu bir igraphağa dönüştürebilirsiniz .
Andy W

1

Düğüm ve bağlantı verileriniz için bir depoya zaten bağlı değilseniz, Rneo4j paketine bakabilirsiniz. Ancak bu, verilerinizi saklamak için neo4j'nin (RDBMS değil bir grafik veritabanı) kullanılması anlamına gelir. Burada uzman değilim, ancak bu yaklaşımın a) Anony-Mousse tarafından önerildiği gibi bunu resmileştiremediğiniz veya b) düğümlerin ve bağlantıların sayısının özellikle büyük olması veya özellikle de rüzgarın ağınızla ilgili başka sorularınız varsa.


Böyle bir şeyin olduğunu bilmiyordum. Temiz! Bu malzemeye iyi bir örnek mi? nicolewhite.github.io/RNeo4j/examples
EngrStudent

Neo4j'deki verilerden grafik kümelemeye nasıl geçilir? Mcl veya igraph onunla çalışır mı?
EngrStudent

2
Verilerinizi neo4j'den R'ye çektikten sonra, verilere karşı başka bir R paketi (örn. AndyW igraph önerir) kullanabilirsiniz. Alternatif olarak - Rneo4j paketi veri almak için komutlar içerir ve ayrıca Cypher sorgu dilini çalıştırmanıza izin verir (SQL'e benzer, ancak neo4j grafik db için özel olarak oluşturulmuştur). Cypher'da, karmaşık sorgular yapabilir ve önceden tanımlanmış bazı algoritmalar çalıştırabilirsiniz (En kısa yollar, tüm yollar, tüm basit yollar, Dijkstra, vb.). Hem karakterlerde hem de içerikte sınırımdayım - Bu yolda (üzgünüm!) Gitmek istiyorsanız, neo4j sitesi bir sonraki durağınız olabilir.
user3123116

1

Gelecekteki okuyucular için,

İşte igraph paketlerinden bir dizi işlev ve sonuncusu MCL'den:

print("LABEL PROPAGATION")
w<-cluster_label_prop(g)

print("Leading Eigen")
w<-cluster_leading_eigen(g)

print("SpinGlass")
w<-cluster_spinglass(g, stop.temp = 0.05)

print("walktrap")
w<-cluster_walktrap(g, steps=4)

print("MCL")
adj<-get.adjacency(g)
w<-mcl(adj,addLoops=TRUE)

Belgeleri http://igraph.org/r/doc/ burada ve https://cran.r-project.org/web/packages/MCL/MCL.pdf burada bulabilirsiniz

Walktrap'ı özellikle kullanışlı buluyorum


Bu soru ile ilgili olabilse de, bu bir cevap gibi görünmemektedir.
Michael R.Chickick

2
iki soruyu yanıtladı: ağdaki düğümleri düzgün bir şekilde kümeleyecek bir 'R' paketi var mı? Bunu yapmak için beni örnek koda yönlendirebilir misiniz? Ama evet, Bütün soruları cevaplamıyor.
Omar Jaafor
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.