l'ensemble de données est pandas dataframe. Ceci est sklearn.cluster.KMeans
km = KMeans(n_clusters = n_Clusters)
km.fit(dataset)
prediction = km.predict(dataset)
Voici comment je décide quelle entité appartient à quel cluster:
for i in range(len(prediction)):
cluster_fit_dict[dataset.index[i]] = prediction[i]
Voici à quoi ressemble l'ensemble de données:
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 k-means?
Pour savoir si votre dataframe dataset
a un contenu approprié, vous pouvez explicitement le 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
(généralement numpy.float64
) alors ça devrait aller pour scikit-learn 0.15.2 et plus tard. Vous devrez peut-être encore normaliser les données avec sklearn.preprocessing.StandardScaler
par exemple.
Si votre bloc de données est typé de manière hétérogène, le dtype
du tableau numpy correspondant sera object
, ce qui ne convient pas pour scikit-learn. Vous devez extraire une représentation numérique pour toutes les fonctionnalités pertinentes (par exemple en extrayant des variables fictives pour les fonctionnalités catégorielles) et supprimer les colonnes qui ne sont pas des fonctionnalités appropriées (par exemple, des exemples d'identificateurs).
En supposant que toutes les valeurs de la trame de données 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 Pandas .