2012-02-20 15 views
9

मैं सुविधाओं के एम एक्स एन मैट्रिक्स को क्लस्टर करने के लिए SciPy के पदानुक्रमिक समूह क्लस्टरिंग विधियों का उपयोग कर रहा हूं, लेकिन क्लस्टरिंग पूर्ण होने के बाद, मुझे लगता है कि परिणामी क्लस्टर से सेंट्रॉइड कैसे प्राप्त किया जाए।SciPy के पदानुक्रमिक समूह क्लस्टरिंग से सेंट्रॉइड कैसे प्राप्त करें?

Y = distance.pdist(features) 
Z = hierarchy.linkage(Y, method = "average", metric = "euclidean") 
T = hierarchy.fcluster(Z, 100, criterion = "maxclust") 

मैं, सुविधाओं में से मेरी मैट्रिक्स ले रहा हूँ उन दोनों के बीच की गणना इयूक्लिडियन दूरी, और फिर उन्हें श्रेणीबद्ध क्लस्टरिंग विधि पर गुजर: नीचे मेरी कोड इस प्रकार है। वहां से, मैं फ्लैट क्लस्टर्स बना रहा हूं, अधिकतम 100 क्लस्टर

अब फ्लैट क्लस्टर टी के आधार पर, मैं 1 एक्स एन सेंट्रॉइड कैसे प्राप्त करूं जो प्रत्येक फ्लैट क्लस्टर का प्रतिनिधित्व करता है?

+1

तो अंत में क्या हुआ के साथ वेक्टर के रूप में विभाजन है? क्या आपने समस्या हल की? कैसे? –

+0

मैं वास्तव में scikit का उपयोग कर समाप्त हुआ- इसके लिए सीखो। –

+0

scikit pleasE में कौन सा फ़ंक्शन? –

उत्तर

0

आप इस (D = आयाम की संख्या) की तरह कुछ कर सकते हैं:

# Sum the vectors in each cluster 
lens = {}  # will contain the lengths for each cluster 
centroids = {} # will contain the centroids of each cluster 
for idx,clno in enumerate(T): 
    centroids.setdefault(clno,np.zeros(D)) 
    centroids[clno] += features[idx,:] 
    lens.setdefault(clno,0) 
    lens[clno] += 1 
# Divide by number of observations in each cluster to get the centroid 
for clno in centroids: 
    centroids[clno] /= float(lens[clno]) 

यह आपको कुंजी और मान के रूप में विशिष्ट क्लस्टर के केन्द्रक के रूप में क्लस्टर संख्या के साथ एक शब्दकोश दे देंगे।

1

एक संभावित समाधान एक फ़ंक्शन है, जो में kmeans जैसे सेंट्रॉइड के साथ एक कोडबुक देता है। केवल एक चीज आप की जरूरत फ्लैट समूहों part और मूल टिप्पणियों X

def to_codebook(X, part): 
    """ 
    Calculates centroids according to flat cluster assignment 

    Parameters 
    ---------- 
    X : array, (n, d) 
     The n original observations with d features 

    part : array, (n) 
     Partition vector. p[n]=c is the cluster assigned to observation n 

    Returns 
    ------- 
    codebook : array, (k, d) 
     Returns a k x d codebook with k centroids 
    """ 
    codebook = [] 

    for i in range(part.min(), part.max()+1): 
     codebook.append(X[part == i].mean(0)) 

    return np.vstack(codebook) 
संबंधित मुद्दे