2011-10-11 12 views
6

मैं scipy में क्लस्टरिंग पर किसी भी सरल पर्याप्त ट्यूटोरियल या विवरण को खोजने के लिए सीवन नहीं कर सकते वापस पाने के लिए, तो मैं मेरी समस्या समझाने की कोशिश करेंगे:क्लस्टरिंग - दूरी मैट्रिक्स के माध्यम से समूहों, कैसे मूल वस्तुओं

मैं दस्तावेजों को क्लस्टर करने की कोशिश करता हूं (पदानुक्रमिक agglomerative क्लस्टरिंग), और प्रत्येक दस्तावेज़ के लिए एक वेक्टर बनाया है और एक सममित दूरी मैट्रिक्स का उत्पादन किया है। वेक्टर_लिस्ट में प्रत्येक दस्तावेज़ का प्रतिनिधित्व करने वाले वैक्टर (वास्तव में लंबे) वेक्टर होते हैं। वैक्टरों की इस सूची का क्रम इनपुट दस्तावेजों की मेरी सूची के समान है ताकि मैं (उम्मीदपूर्वक) संबंधित दस्तावेज के साथ क्लस्टरिंग के परिणामों से मेल खा सकूं।

distances = distance.cdist(vector_list, vector_list, 'euclidean') 

यह इस, तरह एक मैट्रिक्स देता है जहां विकर्ण रेखा प्रत्येक दस्तावेज ही दूरी (हमेशा 0)

[0 5 4] 
[5 0 4] 
[5 4 0] 

मैं scipys 'लिंकेज() फ़ंक्शन को यह दूरी मैट्रिक्स फ़ीड है।

clusters = hier.linkage(distances, method='centroid', metric='euclidean') 

यह कुछ देता है मुझे यकीन नहीं है कि क्या है, लेकिन डेटाटाइप numpy.ndarray के रूप में बाहर आता है। दस्तावेज़ों के मुताबिक मैं इसे 'फ्लैट क्लस्टर्स' पाने के लिए फिर से फ्लेस्टर में खिला सकता हूं। मैं थ्रेसहोल्ड के रूप में दूरी मैट्रिक्स में अधिकतम दूरी का आधा उपयोग करता हूं।

idx = hier.fcluster(clu,0.5*distances.max(), 'distance') 

यह एक numpy.ndarray देता है जो मुझे फिर से ज्यादा समझ में नहीं आता है। एक उदाहरण है [6 3 1 7 1 8 9 4 5 2]

तो मेरे सवाल: क्या यह है कि मैं लिंकेज और fcluster कार्यों से मिलता है, और कैसे मैं वहाँ और वापस करने के लिए से जा सकते हैं मेरा दस्तावेज़ है कि मैंने पहली जगह में दूरी मैट्रिक्स बनाया है, यह देखने के लिए कि क्लस्टर किसी भी समझ में आता है या नहीं? क्या मैं इसे ठीक से कर रहा हूं?

उत्तर

3

सबसे पहले, आप अगर आप fcluster के बजाय fclusterdata का उपयोग cdist और linkage साथ पूरी प्रक्रिया के माध्यम से जाने की जरूरत नहीं है; वह फ़ंक्शन आप (n_documents, n_features) शब्द गणना संख्या, टीएफ-आईडीएफ मानों, या जो भी आपकी विशेषताएं हैं, फ़ीड कर सकते हैं।

fclusterdata से उत्पादन fcluster की तरह ही है: एक सरणी T ऐसी है कि "। T[i] फ्लैट क्लस्टर संख्या जो मूल अवलोकन i अंतर्गत आता है करने के लिए है" यानी, cluster.hierarchy मॉड्यूल क्लस्टरिंग को उस थ्रेसहोल्ड के अनुसार फ़्लैट करता है जिसे आपने 0.5*distances.max() पर सेट किया था। आपके मामले में, तीसरे और पांचवें दस्तावेज़ एक साथ क्लस्टर किए जाते हैं, लेकिन अन्य सभी स्वयं के क्लस्टर बनाते हैं, इसलिए आप थ्रेसहोल्ड को उच्च या criterion का उपयोग करके सेट करना चाहेंगे।

+0

1. इसलिए यदि मैं fclusterdata का उपयोग करता हूं तो सीडीआईस्ट और लिंकेज का मेरा उपयोग अनावश्यक है .. इनपुट I फ़ीड cdist (vector_list) शब्द गिनती वैक्टर की एक लंबी सूची है जहां प्रत्येक पंक्ति दस्तावेज़ की पूर्ण शब्दावली के विरुद्ध तुलना की गई पाठ है संग्रह। जब आप कहते हैं कि मैं fculsterdata 'जो कुछ भी मेरी विशेषताएं हैं' (n_documents, n_features) में फ़ीड कर सकता हूं, तो क्या आपका मतलब एक dict ala (document_id: vector) उदाहरण है (1: [0,0,0,1,0,2,0 ])? – Eiriks

+0

2. आप कैसे देख सकते हैं कि तीसरे और पांचवें दस्तावेज़ सूची में एक साथ क्लस्टर किए गए हैं [6 3 1 7 1 8 9 4 5 2]? मैं और क्या करना चाहता हूं यह जानना है कि मुझे कितने क्लस्टर मिल गए हैं, प्रत्येक क्लस्टर कितना बड़ा है, प्रत्येक क्लस्टर में कौन से ग्रंथ हैं और प्रत्येक क्लस्टर का केंद्र क्या है। मैं नहीं देख सकता कि सरणी टी मुझे वहां कैसे पहुंचाती है। मैं टी में [i] बस मुझे बताता हूं कि टी में कहां है, यह केवल संख्याओं में से एक संदर्भ है [6 3 1 7 1 8 9 4 5 2]? – Eiriks

+1

@ एरिक्क्स: 1. हां। विशेषताओं से, मेरा मतलब संख्यात्मक मान है। 2।उस सूची के तीसरे और पांचवें तत्व (1-अनुक्रमित) के समान मूल्य है। सूची में मान क्लस्टर संख्याएं हैं। –

संबंधित मुद्दे