Pandas dataframe object fonctionnera-t-il avec sklearn kmeans clustering?

l'ensemble de données est pandas dataframe. C'est sklearn.cluster.KMeans

 km = KMeans(n_clusters = n_Clusters)

 km.fit(dataset)

 prediction = km.predict(dataset)

C'est ainsi que je décide quelle entité appartient à quel cluster:

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

C'est comment dataset ressemble:

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

où A,B, C sont des indices

Est-ce la bonne façon d'utiliser les k-means?

22
demandé sur Jason Sundram 2015-01-19 05:17:48

2 réponses

Pour savoir si votre dataframe dataset a un contenu approprié que vous pouvez explicitement convertir en un tableau numpy:

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

si le tableau a un numérique homogène dtype (typiquement numpy.float64) alors ça devrait aller pour scikit-learn 0.15.2 et plus tard. Vous pourriez encore besoin de normaliser les données avec sklearn.preprocessing.StandardScaler par exemple.

si votre base de données est typée de façon hétérogène, le dtype du tableau numpy correspondant sera object qui ne convient pas pour scikit-learn. Vous devez extraire une représentation numérique pour toutes les caractéristiques pertinentes (par exemple en extrayant des variables fictives pour les caractéristiques catégoriques) et laisser tomber les colonnes qui ne sont pas des caractéristiques appropriées (par exemple des identificateurs d'échantillon).

13
répondu ogrisel 2015-01-19 08:47:42

en Supposant que toutes les valeurs dans le dataframe sont numériques,

# Convert DataFrame to matrix
mat = dataset.values
# 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

alternativement, vous pouvez essayer KMeans++ pour les Pandas.

21
répondu user666 2018-09-26 17:02:36