"R" में ग्राफ क्लस्टरिंग का दृष्टिकोण और उदाहरण


10

मैं 'r' में ग्राफ क्लस्टरिंग का उपयोग करके एक ग्राफ में समूह / मर्ज नोड्स को देख रहा हूं।

यहाँ मेरी समस्या का एक आश्चर्यजनक खिलौना भिन्नता है।

  • दो "क्लस्टर" हैं
  • समूहों को जोड़ने वाला एक "पुल" है

यहाँ एक उम्मीदवार नेटवर्क है:
यहां छवि विवरण दर्ज करें

जब मैं कनेक्शन दूरी को देखता हूं, "हॉपकाउंट", यदि आप करेंगे, तो मुझे निम्नलिखित मैट्रिक्स मिल सकता है:

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

विचार यहाँ:

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

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

प्रशन:

मुझे अपना रास्ता खोजने में मदद करने के लिए:

  • उन्हें मिलाकर एक ग्राफ पर नोड्स की संख्या को कम करने के लिए क्या शर्तें हैं? क्या यह क्लस्टरिंग, मर्जिंग, मुंगिंग है - ऐसे शब्द क्या हैं जिनका मुझे उपयोग करना चाहिए?
  • सिद्ध तकनीक क्या हैं? क्या विषय पर कोई पाठ्यपुस्तक है? क्या आप कागजात या वेबसाइटों की ओर इशारा कर सकते हैं?
  • अब मैंने पहले यहाँ देखने की कोशिश की - यह एक शानदार "पहला चेक" स्पॉट है। मुझे वह नहीं मिला, जिसकी मुझे तलाश थी। अगर मैंने इसे याद नहीं किया (संभावना नहीं है) तो क्या आप मुझे सीवी के विषय पर एक या दो उत्तर दिए गए प्रश्न का उत्तर दे सकते हैं?

मुझे पाने के लिए जहां मैं जा रहा हूं:

  • क्या एक 'आर' पैकेज है जो नेटवर्क पर नोड्स को ठीक से क्लस्टर करेगा?
  • क्या आप मुझे ऐसा करने के लिए उदाहरण कोड की ओर इशारा कर सकते हैं?
  • क्या कोई 'R' पैकेज है जो ग्राफ़िकल रूप से परिणामी कम किए गए नेटवर्क को प्रस्तुत करेगा?
  • क्या आप मुझे ऐसा करने के लिए उदाहरण कोड की ओर इशारा कर सकते हैं?

अग्रिम में धन्यवाद।


2
कृपया ध्यान रखें कि (R) पैकेज या कोड माँगना यहाँ विषय के विषय में है। आप "खोज" भाग को अधिक प्रमुख बनाना चाहते हैं और "भाग" को कम से कम कर सकते हैं।
गूँज - मोनिका

3
मैं जब भी मौका पाऊंगा @gung को पूरा जवाब देने का प्रयास करूंगा। लेकिन यहाँ एक त्वरित उत्तर के लिए R igraphपैकेज का उपयोग करके EngrStudent के उदाहरण ग्राफ पर लागू समुदाय का पता लगाना है ।
एंडी डब्ल्यू

1
IMHO इस ग्राफ में केवल एक क्लस्टर है। हालांकि, तीन ओवरलैपिंग क्लिक्स हैं । मुझे नहीं पता कि आपकी योजना मध्य गुट को नष्ट करने के लिए क्यों है - जब तक आप इसे औपचारिक रूप नहीं दे सकते, आपको एल्गोरिथ्म खोजने में कठिन समय होगा।
है क्विट -

2
इसके लायक क्या है, mcl ( micans.org/mcl ) को दो क्लस्टर मिलते हैं (मैं वास्तव में एनीनी-मूस के आकलन से सहमत नहीं हूं, और मुझे विशेष रूप से फलदायक ग्राफ ग्राफिंग के लिए क्लिक-मॉडलिंग दृष्टिकोण नहीं मिला है)। यह अपने एकल पैरामीटर (ग्रैन्युलैरिटी को नियंत्रित करने) के साथ डिफ़ॉल्ट रूप से सेट है। यह एल्गोरिथ्म (mcl - मैंने इसे प्रकाशित किया) जैव सूचना विज्ञान में काफी व्यापक रूप से उपयोग किया जाता है, और (अत्यधिक स्केलेबल) स्रोत कोड उपलब्ध है। R के साथ इंटरफेसिंग आसानी से टेक्स्ट इंटरफेस का उपयोग करके किया जाता है।
15

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

जवाबों:


9

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

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

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)

यहां छवि विवरण दर्ज करें

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


1
ग्राफ़ डेटाबेस का उपयोग करने के बारे में पिछली टिप्पणियाँ भी दी गई हैं, आपको आसन्न मैट्रिक्स के रूप में ग्राफ़ का प्रतिनिधित्व करने की आवश्यकता नहीं है । नोड्स के लिए एक तालिका और प्रत्येक किनारे के लिए एक पंक्ति एक अधिक विशिष्ट / कुशल प्रारूप है, और आप इसे एक igraphनेटवर्क में बदल सकते हैं ।
एंडी डब्ल्यू

1

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


मुझे नहीं पता था कि ऐसी कोई चीज़ मौजूद है। साफ! क्या यह सामग्री का एक सभ्य उदाहरण है? nicolewhite.github.io/RNeo4j/examples
EngrStudent

नेओ 4 जे में डेटा से ग्राफ-क्लस्टरिंग के लिए कोई कैसे जाएगा? क्या mcl या igraph इसके साथ काम करेगा?
EngrStudent

2
एक बार जब आप अपना डेटा neo4j से R में खींच लेते हैं, तो आप डेटा के विरुद्ध किसी भी अन्य R पैकेज (जैसे, AndyW igraph से पता चलता है) का उपयोग कर सकते हैं। वैकल्पिक रूप से - Rneo4j पैकेज में डेटा पुनर्प्राप्त करने के लिए कमांड शामिल हैं, और आपको साइफेयर क्वेरी भाषा (SQL के अनुरूप, लेकिन neo4j ग्राफ डीबी के लिए कस्टम-बिल्ट) भी चलाने की अनुमति देता है। साइफर में, आप परिष्कृत प्रश्न कर सकते हैं और कुछ पूर्वनिर्धारित एल्गोरिदम (सबसे छोटे पथ, सभी पथ, सभी सरल पथ, दिक्जस्त्र, आदि) चला सकते हैं। मैं यहाँ वर्ण और सामग्री दोनों में अपनी सीमा पर हूँ - यदि आप इस रास्ते से नीचे जाना चाहते हैं (क्षमा करें!), तो neo4j साइट आपका अगला पड़ाव हो सकती है।
user3123116

1

भविष्य के पाठकों के लिए,

यहाँ igraph पैकेज से कार्यों का एक सेट है और अंतिम MCL से है:

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)

आप यहाँ पर दस्तावेज पा सकते हैं http://igraph.org/r/doc/ और यहाँ https://cran.r-project.org/web/packages/MCL/MCL.pdf

मुझे वॉकट्रैप विशेष रूप से उपयोगी लगता है


हालांकि यह सवाल से संबंधित हो सकता है लेकिन इसका जवाब नहीं लगता है।
माइकल आर। चेर्निक

2
मैंने दो सवालों के जवाब दिए: क्या कोई 'R' पैकेज है जो नेटवर्क पर नोड्स को ठीक से क्लस्टर करेगा? क्या आप मुझे ऐसा करने के लिए उदाहरण कोड की ओर इशारा कर सकते हैं? लेकिन हां, यह सवालों के पूरे सेट का जवाब नहीं देता है।
उमर जाफोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.