एक दूरी मैट्रिक्स के साथ क्लस्टरिंग


52

मेरे पास एक (सममित) मैट्रिक्स Mहै जो प्रत्येक जोड़ी नोड्स के बीच की दूरी का प्रतिनिधित्व करता है। उदाहरण के लिए,

    abcdefghijkl
एक 0 20 20 20 40 60 60 60 100 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
डी 20 20 20 0 60 80 80 80 120 140 140 140
ई 40 60 60 60 0 20 20 20 60 80 80
F 60 80 80 80 20 0 20 20 40 60 60
जी 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
मैं 100 120 120 120 60 40 60 60 0 20 20 20
जे १२० १४० १४० १४० 80० ६० 80० 0० २० २० २०
K 120 140 140 140 80 60 80 80 20 20 0 20
एल 120 140 140 140 80 60 80 80 20 20 20 0

क्या क्लस्टर्स को निकालने की कोई विधि है M(यदि आवश्यक हो, तो क्लस्टर की संख्या तय की जा सकती है), जैसे कि प्रत्येक क्लस्टर में उनके बीच छोटी दूरी वाले नोड होते हैं। उदाहरण में, क्लस्टर होंगे (A, B, C, D), (E, F, G, H)और (I, J, K, L)

मैंने पहले ही UPGMA और k-means की कोशिश की है, लेकिन परिणामी क्लस्टर बहुत खराब हैं।

दूरियां औसत कदम हैं एक यादृच्छिक वॉकर नोड Aसे नोड B( != A) तक जाने के लिए और वापस नोड पर जाने के लिए ले जाएगा A। यह गारंटी है कि M^1/2एक मीट्रिक है। k-मैं चलाने के लिए , मैं केन्द्रक का उपयोग नहीं करते। मैं नोड nक्लस्टर के cबीच की दूरी को nसभी नोड्स के बीच की औसत दूरी के रूप में परिभाषित करता हूं c

बहुत बहुत धन्यवाद :)


1
आपको उस जानकारी को जोड़ने पर विचार करना चाहिए जिसे आपने पहले ही UPGMA (और अन्य जो आपने कोशिश की है) को आजमा सकते हैं :)
Björn Pollex

1
मेरा एक सवाल है। आपने यह क्यों कहा कि के-साधनों का प्रदर्शन खराब था? मैंने आपका मैट्रिक्स k- साधनों से पास कर लिया है और इसने एकदम सही क्लस्टरिंग की है। क्या आपने k- साधनों के लिए k (समूहों की संख्या) का मान नहीं पारित किया?

3
@ user12023 मुझे लगता है कि आपने प्रश्न को गलत समझा। मैट्रिक्स अंकों की एक श्रृंखला नहीं है - यह उनके बीच जोड़ीदार दूरी है। जब आप केवल उनके बीच की दूरी (और उनके वास्तविक निर्देशांक) नहीं, तो कम से कम किसी भी स्पष्ट तरीके से अंकों के संग्रह के केंद्रक की गणना नहीं कर सकते।
स्टम्पी जो पीट

7
k- साधन दूरी मैट्रिक्स का समर्थन नहीं करता है । यह कभी भी पॉइंट-टू-पॉइंट दूरी का उपयोग नहीं करता है। इसलिए मैं केवल यह मान सकता हूं कि आपके मैट्रिक्स को वैक्टर के रूप में पुन: व्याख्या किया जाना चाहिए , और इन वैक्टरों पर चला गया ... हो सकता है कि आपके द्वारा किए गए अन्य एल्गोरिदम के लिए भी ऐसा ही हो: उन्होंने कच्चे डेटा की उम्मीद की थी , और आपने एक दूरी मैट्रिक्स पारित कर दिया।
ऐनी-मूस

जवाबों:


38

कई विकल्प हैं।

k-medoids क्लस्टरिंग

सबसे पहले, आप k- साधन क्लस्टरिंग का उपयोग करने के बजाय मेडोइड्स (पैम) के आसपास विभाजन की कोशिश कर सकते हैं। यह अधिक मजबूत है, और बेहतर परिणाम दे सकता है। वैन डेर लान ने एल्गोरिथ्म को फिर से काम किया। यदि आप इसे स्वयं लागू करने जा रहे हैं, तो उसका लेख पढ़ने लायक है।

बड़े डेटासेट के लिए एक विशिष्ट k-medoids क्लस्टरिंग एल्गोरिदम है। एल्गोरिथ्म को आर में क्लारा कहा जाता है, और डेटा में फाइंडिंग ग्रुप्स के अध्याय 3 में वर्णित है : क्लस्टर इंट्रोडक्शन का एक परिचय। कौफमैन, एल और रूससी, पीजे (1990) द्वारा।

पदानुक्रमित क्लस्टरिंग

UPGMA के बजाय, आप कुछ अन्य श्रेणीबद्ध क्लस्टरिंग विकल्प आज़मा सकते हैं। सबसे पहले, जब आप पदानुक्रमित क्लस्टरिंग का उपयोग करते हैं, तो सुनिश्चित करें कि आप विभाजन विधि को ठीक से परिभाषित करते हैं। यह विभाजन विधि अनिवार्य रूप से है कि टिप्पणियों और समूहों के बीच की दूरी की गणना कैसे की जाती है। मैं ज्यादातर वार्ड की विधि या पूर्ण लिंकेज का उपयोग करता हूं, लेकिन अन्य विकल्प आपके लिए विकल्प हो सकते हैं।

नहीं पता कि आपने इसे अभी तक आज़माया है, लेकिन एकल लिंकेज विधि या पड़ोसी जुड़ने को अक्सर फ़्लोजेनेटिक अनुप्रयोगों में UPGMA से ऊपर पसंद किया जाता है। यदि आपने इसे अभी तक आज़माया नहीं है, तो आप इसे एक शॉट भी दे सकते हैं, क्योंकि यह अक्सर उल्लेखनीय रूप से अच्छे परिणाम देता है।


आर में आप पैकेज क्लस्टर पर एक नज़र डाल सकते हैं । सभी वर्णित एल्गोरिदम वहां लागू होते हैं। देखें? पम; क्लारा; हक्लिस्ट, ... इनकमिंग एल्गोरिदम के विभिन्न कार्यान्वयन की भी जाँच करें। कभी-कभी किसी अन्य एल्गोरिथ्म को चुनने से क्लस्टरिंग में काफी हद तक सुधार हो सकता है।


संपादित करें: बस कुछ के बारे में सोचा: यदि आप ग्राफ़ और नोड्स और पसंद के साथ काम करते हैं, तो आपको मार्कोव क्लस्टरिंग एल्गोरिदम पर भी ध्यान देना चाहिए। उदाहरण के लिए ब्लास्ट समानता पर आधारित दृश्यों को समूहीकृत करने में इसका उपयोग किया जाता है, और यह अविश्वसनीय रूप से अच्छा प्रदर्शन करता है। यह आपके लिए क्लस्टरिंग कर सकता है, या आपको उस विचार समस्या को हल करने के बारे में कुछ विचार दे सकता है जिस पर आप ध्यान केंद्रित कर रहे हैं। वास्तव में इसके बारे में कुछ भी जानने के बिना, मुझे लगता है कि उसके परिणाम निश्चित रूप से देखने लायक हैं। अगर मैं ऐसा कह सकता हूं, मैं अभी भी Stijn van Dongen के इस तरीके पर विचार कर रहा हूं कि मैंने कभी भी जिन क्लस्टरों का सामना किया है उनमें से सबसे अच्छा परिणाम है।

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


22

अपनी दूरी मैट्रिक्स पर समूहों को उजागर करने का एक तरीका बहुआयामी स्केलिंग के माध्यम से है । जब व्यक्तियों (यहां आप अपने नोड्स को कॉल करते हैं) को 2 डी-स्पेस में पेश करते हैं, तो यह पीसीए के लिए एक तुलनीय समाधान प्रदान करता है। यह अनुपलब्ध है, इसलिए आप किसी प्राथमिकता को क्लस्टर की संख्या निर्दिष्ट नहीं कर पाएंगे, लेकिन मुझे लगता है कि यह किसी दिए गए दूरी या समानता मैट्रिक्स को जल्दी से सारांशित करने में मदद कर सकता है।

यहाँ आपको अपने डेटा के साथ क्या मिलेगा:

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")

एमडीएस

मैंने एक्स और वाई निर्देशांक पर एक छोटे से घबराने को जोड़ा ताकि वे मामलों को अलग कर सकें। बदलें tmpद्वारा 1-tmpयदि आप असमानताओं को बताया के साथ काम करना चाहते हैं, लेकिन यह अनिवार्य रूप से पैदावार में एक ही चित्र। हालांकि, यहाँ एकल श्रेणीकरण मापदंड के साथ पदानुक्रमित क्लस्टरिंग समाधान है:

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

hc

आप आगे डेंड्रोग्राम, या अधिक मजबूत तरीकों के आधार पर समूहों के चयन को परिष्कृत कर सकते हैं, उदाहरण के लिए यह संबंधित प्रश्न देखें: अभ्यास में एग्लोमेरेटिव पदानुक्रमित क्लस्टरिंग के लिए कौन से स्टॉप-मानदंड का उपयोग किया जाता है?


2

स्पेक्ट्रल क्लस्टरिंग [1] द्वारा परिभाषित किया जा रहा से लगाव रखने मैट्रिक्स, क्लस्टरिंग की आवश्यकता है के अपघटन के पहले eigenfunctionsK

L=D1/2AD1/2

साथ डेटा और की आत्मीयता मैट्रिक्स जा रहा है विकर्ण मैट्रिक्स के रूप में (संपादित परिभाषित किया जा रहा है: स्पष्ट नहीं होने के लिए खेद है, लेकिन आपके द्वारा दी गई एक दूरी मैट्रिक्स से एक आत्मीयता मैट्रिक्स उत्पन्न कर सकते हैं आप अधिकतम संभव पता / रूप में उचित दूरी , हालांकि अन्य योजनाएं मौजूद हैं)ADAij=1dij/max(d)

{Di,i=jAi,jDij=0

साथ की eigendecomposition जा रहा है ,, स्तंभों के रूप में खड़ी eigenfunctions के साथ ही ध्यान में रखते हुए में सबसे बड़ा eigenvectors , हम पंक्ति सामान्यीकृत मैट्रिक्स को परिभाषितXLKX

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

की प्रत्येक पंक्ति में एक बिंदु है और इसे एक साधारण क्लस्टरिंग एल्गोरिथ्म (जैसे K- साधन) के साथ जोड़ा जा सकता है।YRk

एक उदाहरण देखने के लिए यहां मेरे उत्तर को देखें: https://stackoverflow.com/a/37933688/2874779


[१] एनजी, एए, जॉर्डन, एमआई, और वीस, वाई (२००२)। वर्णक्रमीय क्लस्टरिंग पर: विश्लेषण और एक एल्गोरिथ्म। तंत्रिका सूचना प्रसंस्करण प्रणालियों में प्रगति, 2, 849-856। Pg.2


2

आप जो कर रहे हैं वह एक ग्राफ, या नेटवर्क के नोड्स को एक साथ क्लस्टर करने की कोशिश कर रहा है, जो एक दूसरे के करीब हैं। इस समस्या के लिए अनुसंधान का एक पूरा क्षेत्र समर्पित है, जिसे कभी-कभी नेटवर्क में सामुदायिक पहचान कहा जाता है । इस दृष्टिकोण से आपकी समस्या को देखते हुए शायद चीजों को स्पष्ट किया जा सकता है।

आपको इस समस्या के लिए समर्पित कई एल्गोरिदम मिलेंगे और वास्तव में उनमें से कुछ उसी विचार पर आधारित हैं जो आपके पास था, जो कि यादृच्छिक चाल के साथ नोड्स के बीच की दूरी को मापना है।

समस्या को अक्सर रूपांतर अनुकूलन के रूप में तैयार किया जाता है [1] जहां क्लस्टरिंग माप का मापक कितनी अच्छी तरह क्लस्टरिंग नेटवर्क को सघन रूप से जुड़े क्लस्टर (यानी क्लस्टर जहां नोड्स एक दूसरे के करीब होते हैं) में अलग कर देता है।

वास्तव में, आप दिखा सकते हैं कि प्रतिरूपकता उस संभाव्यता के बराबर है जो एक यादृच्छिक वाकर एक कदम के बाद रहता है, एक ही समूहों में शुरू में दो स्वतंत्र यादृच्छिक वाकर [2] के लिए समान संभावना शून्य से।

यदि आप रैंडम वॉकर के अधिक चरणों के लिए अनुमति देते हैं, तो आप नेटवर्क के मोटे क्लस्टर की तलाश कर रहे हैं। रैंडम वॉक के चरणों की संख्या इसलिए एक रिज़ॉल्यूशन पैरामीटर की भूमिका निभाती है जो क्लस्टर के पदानुक्रम को पुनर्प्राप्त करने की अनुमति देता है। इस मामले में, मात्रा जो कि टी चरणों के बाद अपने प्रारंभिक क्लस्टर में रहने के लिए यादृच्छिक वॉकर की प्रवृत्ति को व्यक्त करती है , को समय टी [2] में विभाजन का मार्कोव स्थिरता कहा जाता है और यह टी = 1 होने पर प्रतिरूपकता के बराबर होता है ।

इसलिए आप अपने ग्राफ़ की क्लस्टरिंग का पता लगाकर अपनी समस्या को हल कर सकते हैं जो किसी निश्चित समय टी पर स्थिरता का अनुकूलन करता है , जहाँ टी रिज़ॉल्यूशन पैरामीटर है (बड़ा टी आपको बड़े क्लस्टर देगा)। स्थिरता का अनुकूलन करने के लिए सबसे अधिक उपयोग की जाने वाली विधि (या रिज़ॉल्यूशन पैरामीटर के साथ मॉड्यूलरिटी) लौवैन एल्गोरिथम है [3]। आप यहां एक कार्यान्वयन पा सकते हैं: https://github.com/michaelschaub/generalizedLouvain

[१] न्यूमैन, एमईजे और गिरवन, एम। नेटवर्क में सामुदायिक संरचना का पता लगाना और उसका मूल्यांकन करना। भौतिकी। रेव। ई 69, 026113 (2004)।

[२] डेलवेन, जे। सी।, यालीरकी, एसएन और बाराहोना, एम। स्कैल भर में ग्राफ समुदायों की स्थिरता। प्रोक। Natl। Acad। विज्ञान। 107, 12755–12760 (2010)।

[३] ब्लोंडेल, वीडी, गुइल्यूम, जे.एल., लैंबियोट्टे, आर। एंड लेफेबरे, ई। बड़े नेटवर्क में समुदायों का तेजी से खुलासा। जे स्टेट। मैक। थ्योरी ऍक्स्प। 2008, P10008 (2008)।


1

ठीक है, किसी दिए गए समानता मैट्रिक्स पर K- साधन क्लस्टरिंग करना संभव है, सबसे पहले आपको मैट्रिक्स को केंद्र में रखना होगा और फिर मैट्रिक्स के आइगेनवेल्यूज़ लेना होगा। अंतिम और सबसे महत्वपूर्ण कदम वैजाइना के वैक्टर के विकर्ण के वर्गमूल के पहले दो सेट को गुणा कर रहा है ताकि वैक्टर प्राप्त कर सकें और फिर K- साधनों के साथ आगे बढ़ सकें। नीचे कोड दिखाता है कि यह कैसे करना है। आप समानता मैट्रिक्स को बदल सकते हैं। fpdist समानता मैट्रिक्स है।

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

इससे पहले कि आप मैट्रिक्स पर क्लस्टरिंग को चलाने का प्रयास करें आप एक कारक विश्लेषण तकनीकों को करने की कोशिश कर सकते हैं, और दूरी मैट्रिक्स की गणना करने के लिए बस सबसे महत्वपूर्ण चर रख सकते हैं। एक और चीज जो आप कर सकते हैं वह है फजी-तरीकों का उपयोग करने की कोशिश करना जो इस तरह के मामलों में बेहतर (कम से कम मेरे अनुभव में) काम करते हैं, पहले Cmeans, Fuzzy K-medoids और विशेष रूप से GKCmeans को आज़माएं।


0

सह-क्लस्टरिंग उन उत्तरों में से एक है जो मुझे लगता है। लेकिन मैं यहाँ विशेषज्ञ नहीं हूँ। सह-क्लस्टरिंग नवजात विधि नहीं है, इसलिए आप आर में कुछ अल्गोस पा सकते हैं, विकी यह दर्शाता है कि अवधारणाएं अच्छे तरीके से हैं। एक और तरीका जो मानसिक रूप से अलग नहीं है, वह है ग्राफ विभाजन (लेकिन मैं देखता हूं कि ग्राफ विरल नहीं होगा, ग्राफ विभाजन उपयोगी होगा यदि आपके मैट्रिक्स का अर्थ मानों पर हावी होगा = अधिकतम दूरी = नोड्स के बीच कोई समानता नहीं)।


0

क्षमता संवर्धन में देखें, यह तकनीक समानता मैट्रिक्स के इनपुट के रूप में लेती है और प्रत्येक क्लस्टर के लिए प्रतिनिधि उदाहरण के साथ इष्टतम संख्या में क्लस्टर बनाती है।


2
क्या आप इस पर विस्तार कर सकते हैं और बता सकते हैं कि यह विधि इस मामले में कैसे मदद करती है?
एंडी

0

सबसे पहले डिस्टेंस मैट्रिक्स को https://math.stackexchange.com/a/423898 के माध्यम से एक समन्वय मैट्रिक्स में परिवर्तित करें फिर आप आसानी से किसी भी मौजूदा क्लस्टरिंग एल्गोरिदम का प्रभावी ढंग से उपयोग कर पाएंगे।


0

आप कम से कम फैले पेड़ों को खोजने के लिए क्रुस्कल एल्गोरिथ्म का भी उपयोग कर सकते हैं, लेकिन जैसे ही आप तीन क्लस्टर प्राप्त करते हैं। मैंने इस तरह की कोशिश की और यह आपके द्वारा उल्लिखित समूहों का उत्पादन करता है: {ABCD}, {EFGH} और {IJKL}।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.