Uzaklık matrisiyle kümeleme


52

Her bir Mdüğüm çifti arasındaki mesafeyi temsil eden bir (simetrik) matrisim var. Örneğin,

    abcçdefgğhıi
A 0 20 20 20 40 60 60 60 100 120 120 120
B 20 0 20 20 60 80 80 80 120 140 140 140
C 20 20 0 20 60 80 80 80 120 140 140 140
D 20 20 20 0 60 80 80 80 120 140 140 140
E 40 60 60 60 0 20 20 20 60 80 80 80
F 60 80 80 80 20 0 20 20 40 60 60 60
G 60 80 80 80 20 20 0 20 60 80 80 80
H 60 80 80 80 20 20 20 0 60 80 80 80
I 100 120 120 120 60 40 60 60 0 20 20 20
J 120 140 140 140 80 60 80 80 20 0 20 20
K 120 140 140 140 80 60 80 80 20 20 0 20
L 120 140 140 140 80 60 80 80 20 20 20 0

Kümeleri ayıklamak için herhangi bir yöntem var mı M(gerekirse küme sayısı sabitlenebilir), öyle ki her küme aralarında küçük mesafeler bulunan düğümler içerir. Örnekte, kümeler (A, B, C, D), (E, F, G, H)ve olacaktır (I, J, K, L).

UPGMA'yı ve karaçlarını zaten denedim ama sonuçta ortaya çıkan kümeler çok kötü.

Mesafeler, rastgele bir yürüyücünün düğümden Adüğüme B( != A) gidip düğüme geri dönmesi için atması gereken ortalama adımlardır A. Bunun M^1/2bir ölçü olduğu garanti edildi . Koşmak için k, ortalamaları kullanmıyorum. Düğüm nkümesi carasındaki uzaklığı, içindeki nve içindeki tüm düğümler arasındaki ortalama mesafe olarak tanımlarım c.

Çok teşekkürler :)



1
Bir sorum var. K-araçlarının düşük performans gösterdiğini neden söylediniz? Matrix'inizi k-aracına geçirdim ve mükemmel bir kümeleme yaptı. K (küme sayısı) değerini k-aracına geçmediniz mi?

3
@ user12023 Sanırım soruyu yanlış anladınız. Matristir değil noktaları dizisidir - aralarındaki ikili mesafeler var. Bir nokta koleksiyonunun centroidini, yalnızca aralarındaki mesafeleri (ve gerçek koordinatlarını değil), en azından açık bir şekilde değilken hesaplayamazsınız.
Stumpy Joe Pete

7
k-aracı mesafe matrislerini desteklemiyor . Asla noktadan noktaya mesafeleri kullanmaz. Bu yüzden sadece matrisinizi vektörler olarak yeniden yorumladığını ve bu vektörleri koştuğunu varsayabilirim ... belki de denediğiniz diğer algoritmalarda da aynı oldu: ham verileri beklediler ve bir mesafe matrisi aldınız.
Anony-Mousse

Yanıtlar:


38

Çok sayıda seçenek var.

K-medoids kümeleme

İlk önce, k-aracı kümelemesi kullanmak yerine, medidlerin (pam) etrafına bölünmeyi deneyebilirsiniz. Bu daha sağlam ve daha iyi sonuçlar verebilir. Van der Laan algoritmayı elden geçirdi. Kendiniz uygulayacaksanız, makalesi okunmaya değer.

Büyük veri kümeleri için belirli bir kedoid kümeleme algoritması vardır. Algoritma R'de Clara olarak adlandırılır ve Verilerde Grup Bulma: 3. Küme Analizine Giriş bölümünde açıklanmaktadır . Kaufman, L ve Rousseeuw, PJ (1990) tarafından yapılmıştır.

hiyerarşik kümeleme

UPGMA yerine diğer bazı hiyerarşik kümeleme seçeneklerini deneyebilirsiniz. Öncelikle, hiyerarşik kümelemeyi kullanırken, bölümleme yöntemini doğru tanımladığınızdan emin olun. Bu bölümleme yöntemi, esasen gözlemler ve kümeler arasındaki mesafelerin nasıl hesaplandığıdır. Çoğunlukla Ward'ın yöntemini veya tam bağlantısını kullanıyorum, ancak diğer seçenekler sizin için uygun olabilir.

Henüz denediniz mi bilmiyorum, ancak tek bağlantı yöntemi veya komşu birleştirme filogenetik uygulamalarda UPGMA'nın üstünde sıklıkla tercih edilir. Henüz denememiş olsaydınız, çoğu zaman oldukça iyi sonuçlar verdiğinden, onu da çekebilirsiniz.


R'de paket kümesine bakabilirsiniz . Tanımlanan tüm algoritmalar orada uygulanır. Bakınız? Pam, clara,? Hclust, ... Algoritmanın farklı uygulamalarını? Bazen başka bir algoritma seçmek kümelemeyi büyük ölçüde iyileştirebilir.


EDIT: Sadece bir şey hakkında düşündüm: Eğer grafik ve düğümlerle ve benzerleriyle çalışıyorsanız, markov kümeleme algoritmasına da bir göz atmalısınız. Bu, örneğin patlama benzerliklerine göre gruplama dizilerinde kullanılır ve inanılmaz derecede iyi performans gösterir. Kümelenmeyi sizin için yapabilir veya odaklandığınız araştırma problemini nasıl çözeceğinizle ilgili bazı fikirler verebilir. Aslında bu konuda hiçbir şey bilmeden, sonuçlarına kesinlikle değer. Söyleyebilirsem, Stijn van Dongen'in bu yöntemini şimdiye kadar karşılaştığım kümelemenin en güzel sonuçlarından biri olarak düşünüyorum.

http://www.micans.org/mcl/


22

Uzaklık matrisinizdeki kümeleri vurgulamanın bir yolu Çok Boyutlu ölçeklendirmedir . Bir 2B alanda bireyleri (burada düğümlerinizi adlandırdığınız şey) yansıtırken, PCA için karşılaştırılabilir bir çözüm sunar. Bu denetimsiz olduğundan, küme sayısını önceden tanımlayamazsınız, ancak belirli bir uzaklık veya benzerlik matrisini hızlı bir şekilde özetlemenin yardımcı olacağını düşünüyorum.

İşte verilerinizle ne elde edersiniz:

tmp <- matrix(c(0,20,20,20,40,60,60,60,100,120,120,120,
                20,0,20,20,60,80,80,80,120,140,140,140,
                20,20,0,20,60,80,80,80,120,140,140,140,
                20,20,20,0,60,80,80,80,120,140,140,140,
                40,60,60,60,0,20,20,20,60,80,80,80,
                60,80,80,80,20,0,20,20,40,60,60,60,
                60,80,80,80,20,20,0,20,60,80,80,80,
                60,80,80,80,20,20,20,0,60,80,80,80,
                100,120,120,120,60,40,60,60,0,20,20,20,
                120,140,140,140,80,60,80,80,20,0,20,20,
                120,140,140,140,80,60,80,80,20,20,0,20,
                120,140,140,140,80,60,80,80,20,20,20,0),
              nr=12, dimnames=list(LETTERS[1:12], LETTERS[1:12]))
d <- as.dist(tmp)
mds.coor <- cmdscale(d)
plot(mds.coor[,1], mds.coor[,2], type="n", xlab="", ylab="")
text(jitter(mds.coor[,1]), jitter(mds.coor[,2]),
     rownames(mds.coor), cex=0.8)
abline(h=0,v=0,col="gray75")

mds

Vakaları ayırt etmek için x ve y koordinatlarına küçük bir titreme ekledim. Değiştir tmptarafından 1-tmpsize benzeşmezlikler ile çalışan tercih ediyorsanız, ancak bu temelde aynı resmi verir. Ancak, burada tek kümeleme kriterleri ile birlikte hiyerarşik kümeleme çözümü :

plot(hclust(dist(1-tmp), method="single"))

hc

Sen ayrıca dendrogramın dayalı kümelerinin seçimi elemeye tabi tutulabilir ya da daha sağlam yöntemler mesela bu ilgili soruya bakın: Uygulamada kullanılan aglomeratif hiyerarşik kümeleme için hangi durdurma kriterleri?


2

Spektral Kümelenme [1] ile tanımlanan bir afinite matrisi, kümeleme gerektirir ayrışması ilk ÖzfonksiyonlarK

L=D1/2AD1/2

İle verileri ve afinite matrisi olarak (düzenleme olarak tanımlanmış diyagonal matris söz konusu olur: üzgün açık olduğu için, ancak sağlanan bir mesafe matristen bir afinite matrisi oluşturabilir Eğer mümkün olan en yüksek bilmek / olarak makul uzaklık , ancak diğer programlar da var)D A i j = 1 - d i j / maks ( d )ADAij=1dij/max(d)

{Di,i=jAi,jDij=0

İle arasında eigendecomposition olmak , sütun olarak yığılmış özfonksiyonların ile, sadece tutma büyük özvektörler , biz satır normalize matrisi tanımlarXLKX

Yij=Xij(j(Xij)2)1/2

Her bir satırı daki bir noktadır ve sıradan bir kümeleme algoritmasıyla kümelenebilir (K-aracı gibi).YRk

Bir örnek görmek için buradaki cevaba bakın: https://stackoverflow.com/a/37933688/2874779


[1] Ng, AY, Ürdün, MI ve Weiss, Y. (2002). Spektral kümelemede: Analiz ve bir algoritma. Sinir bilgi işlem sistemlerinde gelişmeler, 2, 849-856. pg.2


2

Yaptığınız şey, birbirine yakın olan bir grafiğin veya ağın düğümlerini birlikte kümelemeye çalışıyor. Bu soruna adanmış, bazen ağlarda topluluk tespiti denilen bütün bir araştırma alanı vardır . Sorununuza bu açıdan bakmak muhtemelen olayları netleştirebilir.

Bu soruna adanmış birçok algoritma bulacaksınız ve gerçekte bazıları sizin sahip olduğunuz fikre dayanıyor, ki bu da rastgele yürüyüşlerle düğümler arasındaki mesafeleri ölçmek.

Sorun genellikle kümelenmenin modülerliğinin kümelenmenin yoğun biçimde bağlı kümelerdeki (yani düğümlerin birbirine yakın olduğu kümeler) ağı ne kadar iyi ayırdığını ölçtüğü modülerlik optimizasyonu [1] olarak formüle edilir .

Aslında, modülerliğin, bir adımdan sonra, aynı kümeler içinde rastgele bir yürüteç kalma ihtimaline eşit olduğunu, iki bağımsız rastgele yürüteç için başlangıçta aynı olasılığa eklenmediğini gösterebilirsiniz [2].

Rastgele yürüteçlerin daha fazla adımına izin verirseniz, ağın daha kalın bir şekilde kümelenmesini istiyorsunuz. Bu nedenle, rastgele yürüyüşün adımlarının sayısı, kümelerin hiyerarşisini geri kazanmayı sağlayan bir çözünürlük parametresinin rolünü oynar. Bu durumda, rastgele yürüteçlerin t adımlarından sonra ilk kümesinde kalma eğilimini ifade eden miktara t [2] zamanında bir bölümün Markov kararlılığı denir ve t = 1 olduğunda modülerliğe eşdeğerdir .

Bu nedenle, sorununuzu, belirli bir zamanda t'yi en iyi duruma getiren grafiğin kümelenmesini bularak çözebilirsiniz , burada t , parametre parametresidir (daha büyük t , size daha büyük kümeler verecektir). Stabiliteyi optimize etmek için en çok kullanılan yöntemlerden biri (veya çözünürlük parametresiyle modülerliği) Louvain Algoritmasıdır [3]. Burada bir uygulama bulabilirsiniz: https://github.com/michaelschaub/generalizedLouvain .

[1] Newman, MEJ ve Girvan, M. Ağlarda topluluk yapısını bulma ve değerlendirme. Fiz. Rev. E 69, 026113 (2004).

[2] Delvenne, J.-C., Yaliraki, SN & Barahona, M. Çizelge topluluklarının zaman ölçeklerinde kararlılığı. Proc. Natl. Acad. Sci. 107, 12755-12760 (2010).

[3] Blondel, VD, Guillaume, J.-L., Lambiotte, R. ve Lefebvre, E. Büyük ağlarda toplulukların hızlı bir şekilde açılması. J. Stat. Mech. Teori Exp. 2008, P10008 (2008).


1

Peki, belirli bir benzerlik matrisinde K-aracı kümelemesi yapmak mümkündür, ilk önce matrisi ortalamanız ve ardından matrisin özdeğerlerini almanız gerekir. Son ve en önemli adım, ilk iki özvektör grubunu, vektörleri elde etmek için özdeğerlerin köşegenlerinin kareköküyle çarpmak ve sonra K-araçlarıyla ilerlemektir. Kodun altında nasıl yapılacağını gösterir. Benzerlik matrisini değiştirebilirsiniz. fpdist benzerlik matrisidir.

mds.tau <- function(H)
{
  n <- nrow(H)
   P <- diag(n) - 1/n
   return(-0.5 * P %*% H %*% P)
  }
  B<-mds.tau(fpdist)
  eig <- eigen(B, symmetric = TRUE)
  v <- eig$values[1:2]
#convert negative values to 0.
v[v < 0] <- 0
X <- eig$vectors[, 1:2] %*% diag(sqrt(v))
library(vegan)
km <- kmeans(X,centers= 5, iter.max=1000, nstart=10000) .
#embedding using MDS
cmd<-cmdscale(fpdist)

0

Kümelemeyi matris üzerinde çalıştırmayı denemeden önce, faktör analizi tekniklerinden birini yapmayı deneyebilir ve uzaklık matrisini hesaplamak için sadece en önemli değişkenleri tutabilirsiniz. Yapabileceğiniz başka bir şey de, bu tür durumlarda daha iyi çalışma eğiliminde olan bulanık yöntemleri kullanmayı denemek, ilk önce Cmeans, Fuzzy K-medoids ve Specially GKCmeans.


0

Birlikte kümeleme, bence cevaplardan biri. Ama burada uzman değilim. Birlikte kümelenme yeni bir yöntem değildir, bu nedenle R'de bazı algolar bulabilirsiniz, wiki bu kavramları iyi bir şekilde gösterir. Bahsedilmeyen bir başka yöntem grafik bölümlemedir (ancak grafiğin seyrek olmayacağını görüyorum, eğer matrisiniz anlamı = maksimum mesafe = düğümler arasında benzerlik göstermiyorsa) grafiğin bölümlenmesi yararlı olacaktır.


0

AFFINITY PROPAGATION'a bakınız, Bu teknik benzerlik matrisini girdi olarak alır ve her bir küme için temsili bir örnekle birlikte en iyi sayıda küme oluşturur.


2
Bunu genişletip bu yöntemin bu durumda nasıl yardımcı olduğunu açıklayabilir misiniz?
Andy


0

Kruskal algoritmasını minimum yayılan ağaçları bulmak için de kullanabilirsiniz, ancak üç kümeyi elde ettiğinizde biter. Bu şekilde denedim ve bahsettiğiniz kümeleri üretiyor: {ABCD}, {EFGH} ve {IJKL}.

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.