Matlab

2011-11-04 13 views
6

में Agglomerative क्लस्टरिंग मेरे पास एक साधारण 2-आयामी डेटासेट है जो मैं एक agglomerative तरीके से क्लस्टर करना चाहता हूँ (उपयोग करने के लिए क्लस्टर की इष्टतम संख्या को नहीं जानते)। एकमात्र तरीका है कि मैं अपने डेटा को सफलतापूर्वक क्लस्टर करने में सक्षम हूं, फ़ंक्शन को 'maxclust' मान देकर है।Matlab

सादगी के लिए, मान लें कि यह मेरा डाटासेट है:

X=[ 1,1; 
    1,2; 
    2,2; 
    2,1; 
    5,4; 
    5,5; 
    6,5; 
    6,4 ]; 

स्वाभाविक रूप से, मैं इस डेटा 2 समूहों बनाने के लिए चाहते हैं। मैं समझता हूँ कि अगर मैं इस जानता था, मैं सिर्फ कह सकते हैं:

T = clusterdata(X,'maxclust',2); 

और जो प्रत्येक क्लस्टर में गिरावट मैं कह सकते हैं बताते हैं खोजने के लिए:

cluster_1 = X(T==1, :); 

और

cluster_2 = X(T==2, :); 

लेकिन बिना यह जानकर कि 2 क्लस्टर इस डेटासेट के लिए इष्टतम होंगे, मैं इन आंकड़ों को कैसे क्लस्टर कर सकता हूं?

धन्यवाद

+0

इसी तरह के प्रश्न: [व्यवहार में पदानुक्रमित क्लस्टरिंग के लिए क्या रोक-मानदंड अभ्यास में उपयोग किए जाते हैं?] (Http://stats.stackexchange.com/q/2597) – Amro

+0

@Amro नाइस लिंक! –

उत्तर

5

इस विधि के पूरे मुद्दे कि यह क्लस्टर एक पदानुक्रम में पाया का प्रतिनिधित्व करता है: कसौटी यहाँ के लिए, हम भीतर-क्लस्टर-के-योग वर्गों का उपयोग करेगा और यह आप पर निर्भर निर्धारित करने के लिए कितना विवरण आप प्राप्त करना चाहते हैं .. है

agglomerative dendogram

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

  • रोक जब आप समूहों के एक पूर्व निर्धारित संख्या (example)
  • मैन्युअल रूप से स्थित यह एक निश्चित ऊंचाई मूल्य (example)
  • यह जगह करने के लिए चुन दिया तक पहुँचने दूरी कसौटी को (example)

यह की 'maxclust' या 'cutoff' तर्कों का उपयोग या तो किया जा सकता है (यानी वहाँ अगले स्तर के लिए एक बड़ा कूद है) क्लस्टर/CLUSTERDATA फ़ंक्शंस

+0

ग्रेट स्पष्टीकरण, एमरो। मैंने देखा कि यह एक ऐसा विषय है जिसके साथ आपको व्यापक अनुभव है। वे लिंक मेरे आवेदन के लिए बहुत उपयोगी थे। धन्यवाद! –

5

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

function wss = plotScree(X, n) 

wss = zeros(1, n); 
wss(1) = (size(X, 1)-1) * sum(var(X, [], 1)); 
for i=2:n 
    T = clusterdata(X,'maxclust',i); 
    wss(i) = sum((grpstats(T, T, 'numel')-1) .* sum(grpstats(X, T, 'var'), 2)); 
end 
hold on 
plot(wss) 
plot(wss, '.') 
xlabel('Number of clusters') 
ylabel('Within-cluster sum-of-squares') 
>> plotScree(X, 5) 

ans = 

    54.0000 4.0000 3.3333 2.5000 2.0000 

enter image description here

+0

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

+0

इस कोड के लिए धन्यवाद। यह विशेष रूप से उपयोगी था जब एम्रो द्वारा साझा किए गए तीसरे लिंक में उपयोग की जाने वाली विधि के साथ संयुक्त किया गया था। –

-1

आप आर में एनबीक्लस्ट पैकेज का उपयोग कर सकते हैं जो डेटासेट में क्लस्टर की इष्टतम संख्या निर्धारित करने के लिए 30 इंडेक्स का उपयोग करता है।