कुशल ग्राफ क्लस्टरिंग एल्गोरिथ्म


20

मैं एक बड़े ग्राफ पर क्लस्टर खोजने के लिए एक कुशल एल्गोरिथ्म की तलाश कर रहा हूं (इसमें लगभग 5000 कोने और 10000 किनारे हैं)।

अब तक मैं जंग-जावा पुस्तकालय में कार्यान्वित गिरवां-न्यूमैन एल्गोरिथ्म का उपयोग कर रहा हूं, लेकिन जब मैं बहुत सारे किनारों को हटाने की कोशिश करता हूं तो यह काफी धीमा होता है।

क्या आप मुझे बड़े रेखांकन के लिए बेहतर विकल्प सुझा सकते हैं?


क्या आपने k- साधनों पर ध्यान दिया है?
ऊद

क्या आप मुझे ग्राफ पर इसका उपयोग करने के बारे में जानने के लिए कुछ संदर्भ दे सकते हैं?
mariosangiorgio


मैं वोल्टेज क्लस्टर के जंग कार्यान्वयन के लिए स्विच किया और यह निश्चित रूप से तेज है। jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…
mariosangiorgio

1
क्या यह सॉफ्टवेयर इंजीनियर की तुलना में कंप्यूटर विज्ञान के बारे में अधिक होने के कारण < cs.stackexchange.com > के लिए अधिक उपयुक्त नहीं है ?
Oeufcoque Penteano

जवाबों:


13

मैं व्यक्तिगत रूप से मार्कोव क्लस्टरिंग का सुझाव देता हूं । मैंने अच्छे परिणामों के साथ अतीत में कई बार इसका इस्तेमाल किया है।

एफ़िनिटी का प्रसार एक अन्य व्यवहार्य विकल्प है, लेकिन यह मार्कोव क्लस्टरिंग की तुलना में कम सुसंगत लगता है।

कई अन्य विकल्प हैं, लेकिन ये दोनों बॉक्स से बाहर हैं और क्लस्टरिंग रेखांकन की विशिष्ट समस्या के अनुकूल हैं (जिसे आप विरल मैट्रेस के रूप में देख सकते हैं)। आपके द्वारा उपयोग किया जा रहा दूरी माप भी एक विचार है। यदि आप एक उचित मीट्रिक का उपयोग कर रहे हैं तो आपका जीवन आसान हो जाएगा।

मुझे प्रदर्शन बेंचमार्क की तलाश में यह पेपर मिला , यह विषय का एक अच्छा सर्वेक्षण है।


धन्यवाद, मेरे पास आपके द्वारा सुझाए गए सभी एल्गोरिदम पर एक नज़र होगी।
mariosangiorgio

सुधार: इन एल्गोरिदम को इनपुट वज़न की आवश्यकता होती है जो समानता को दर्शाते हैं, दूरी नहीं। मीट्रिक संपत्ति (त्रिकोण असमानता) इसमें नहीं आती है। यह वजन को बदलने के लिए उपयोगी हो सकता है इसलिए वे एक प्राकृतिक श्रेणी में आते हैं, उदाहरण के लिए (पियर्सन) सहसंबंधों के रूप में यहाँ वर्णित है ( micans.org/mcl/man/clmprotocols.html#array ), और यहाँ वर्णित के रूप में BLAST ई-मानों के लिए ( micans.org/mcl/man/clmprotocols.html#blast )।
माइक

10

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

यह मेरे लिए एक दोस्त द्वारा सिफारिश की गई थी। विकिपीडिया के अनुसार :

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

मार्कोव क्लस्टर

यह वही है जो मैं आपकी स्थिति में उपयोग करता हूं। यह एक बहुत ही उपयोगी एल्गोरिथम है। मुझे एल्गोरिथ्म के बारे में एक अच्छे पीडीएफ का लिंक मिला । यह एक महान एल्गोरिथ्म है, और, एक बेहतर शब्द की कमी के लिए, अत्यंत "शक्तिशाली"। इसे आज़मा कर देखिए।


5

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


1
थोड़ा पढ़ने के बाद, मुझे यह पता चला, यहाँ और मुझे लगता है कि आपको एक नज़र रखना चाहिए।
viki.omega9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.