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?
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).
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.