2015-01-19 9 views
20

डेटासेट पांडा डेटाफ्रेम है। यह sklearn.cluster.KMeansक्या पांडस डेटाफ्रेम ऑब्जेक्ट काम sklearn kmeans क्लस्टरिंग के साथ करेगा?

km = KMeans(n_clusters = n_Clusters) 

km.fit(dataset) 

prediction = km.predict(dataset) 

है यह मैं का निर्धारण कैसे इकाई अंतर्गत आता है है जो करने के लिए क्लस्टर:

A 1 2 3 4 5 6 
B 2 3 4 5 6 7 
C 1 4 2 7 8 1 
... 

जहां ए, बी:

for i in range(len(prediction)): 
    cluster_fit_dict[dataset.index[i]] = prediction[i] 

यह कैसे डाटासेट लग रहा है , सी सूचकांक

क्या यह के-साधनों का उपयोग करने का सही तरीका है?

+1

आपका प्रश्न थोड़ा अस्पष्ट है, sklearn आम तौर पर इनपुट के रूप में numpy arrays स्वीकार करता है और इसलिए पांडा डेटाफ्रेम संगत हैं, कुछ मामलों में मुझे पता चला है कि आपको एक numpy सरणी के लिए वापस पूछने की आवश्यकता है: 'df.values' या df। col.values' एक उदाहरण के रूप में, इसलिए मूल रूप से इसे काम करना चाहिए, कृपया कोशिश करें और यदि आप एक स्नैग दबाते हैं तो कोड और डेटा – EdChum

उत्तर

12

पता करने के लिए आप स्पष्ट रूप से एक numpy सरणी में बदल सकते हैं यदि आपके dataframe dataset उपयुक्त सामग्री है: एक सजातीय संख्यात्मक dtype (आमतौर पर numpy.float64) तो यह के लिए ठीक होना चाहिए scikit सीखने सरणी

dataset_array = dataset.values 
print(dataset_array.dtype) 
print(dataset_array) 

हैं 0.15.2 और बाद में। उदाहरण के लिए आपको अभी भी sklearn.preprocessing.StandardScaler के साथ डेटा को सामान्यीकृत करने की आवश्यकता हो सकती है।

यदि आपका डेटा फ्रेम विषम रूप से टाइप किया गया है, तो इसी numpy सरणी के dtypeobject होगा जो कि विज्ञान-सीखने के लिए उपयुक्त नहीं है। आपको सभी प्रासंगिक विशेषताओं के लिए संख्यात्मक प्रतिनिधित्व निकालने की आवश्यकता है (उदाहरण के लिए स्पष्ट सुविधाओं के लिए डमी चर निकालने के द्वारा) और उन स्तंभों को छोड़ दें जो उपयुक्त सुविधाएं नहीं हैं (उदा। नमूना पहचानकर्ता)। आप KMeans++ for Pandas की कोशिश कर सकते

17

मान लिया जाये कि सभी dataframe में मान सांख्यिक,

# Convert DataFrame to matrix 
mat = dataset.as_matrix() 
# Using sklearn 
km = sklearn.cluster.KMeans(n_clusters=5) 
km.fit(mat) 
# Get cluster assignment labels 
labels = km.labels_ 
# Format results as a DataFrame 
results = pandas.DataFrame([dataset.index,labels]).T 

वैकल्पिक रूप से, कर रहे हैं।

+2

के साथ वापस आते हैं ध्यान दें कि परिणाम बनाने का एक बेहतर तरीका 'परिणाम = pd.DataFrame (डेटा = लेबल , कॉलम = ['क्लस्टर'], इंडेक्स = collapsed.index) ', जो ट्रांसपोज़र की आवश्यकता को हटा देता है, उचित इंडेक्सिंग और लेबल – FooBar

+0

@FooBar जो ढह गया/collapsed.index है? –

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