implémentation python du clustering k-means. k-means est une technique d'apprentissage non supervisée qui tente de regrouper des points de données similaires dans un nombre de groupes spécifié par l'utilisateur. L'exemple ci-dessous montre la progression des clusters pour l'ensemble de données Iris à l'aide de l'algorithme d'initialisation du centroïde k-means++.
k-means tente d'identifier un nombre k (<N) de clusters spécifié par l'utilisateur à partir d'un ensemble de N vecteurs à valeur réelle de dimension d. L'algorithme procède en tentant de minimiser la somme des carrés des distances entre un centre de cluster et les membres du cluster. L'algorithme canonique se déroule en trois phases :
Le résultat de l'algorithme est une affectation de cluster pour chaque point de données et un niveau final de « distorsion ». L'algorithme ne produit pas de solution dont il est prouvé qu'elle est optimale, et les centres de cluster initiaux peuvent bloquer l'algorithme dans une solution localement optimale qui est clairement sous-optimale (voir l'exemple de base en 2D dans la section Résultats).
De nombreuses recherches se sont concentrées sur :
Plutôt que d'initialiser des centroïdes aléatoires comme à l'étape 1 ci-dessus, k-means++ étale de manière probabiliste les centroïdes initiaux pour éviter une mauvaise configuration initiale, l'algorithme est le suivant :
Cette technique privilégie les points de données qui ne sont pas proches d'un autre centroïde initial et utilise une politique de sélection qui rappelle la sélection à la roulette (ou proportionnelle à la condition physique) souvent utilisée dans les algorithmes génétiques.
K-Means est décrit dans les 10 meilleurs algorithmes pour l'exploration de données ;
K-Means est décrit dans Théorie de l'information, inférence et algorithmes d'apprentissage, extrait ici ;
Le professeur Andrew Moore de la CMU a ici quelques bonnes notes ;
Exemple d'Edureka, utilisant des données sur la criminalité
K-Means++, et article complet ici
Une étude comparative des méthodes d'initialisation efficaces pour l'algorithme de clustering K-Means
SciPy a une implémentation de k-means. L'objectif de ce travail est de construire une implémentation Python pure à des fins d'apprentissage et d'aider les autres à apprendre l'algorithme k-means. Les lecteurs intéressés ayant seulement une expérience minimale de Python seront capables de lire et de parcourir ce code sans la complexité supplémentaire d'une bibliothèque telle que SciPy. Il n'est en aucun cas destiné à un usage en production :)
Exécutez le code avec l'interpréteur python :
python kmeans.py ./resources/<config.cfg>
Où config.cfg est un fichier de configuration en texte brut. Le format du fichier de configuration est un dict python avec les champs suivants :
{
'data_file' : '\resources\iris.csv',
'data_project_columns' : ['sepal_length','sepal_width','petal_length','petal_width','class'],
'k' : 3,
'cluster_atts' : ['sepal_length','sepal_width','petal_length','petal_width'],
'init_cluster_func' : 'kmeans_plus_plus',
'plot_config' :
{'output_file_prefix' : 'iris',
'plots_configs': [
{'plot_atts' : ['sepal_length','sepal_width']},
{'plot_atts' : ['sepal_length','petal_length']},
{'plot_atts' : ['sepal_length','petal_width']},
{'plot_atts' : ['sepal_width','petal_length']},
{'plot_atts' : ['sepal_width','petal_width']},
{'plot_atts' : ['sepal_width','petal_width']}
]
}
}
Vous devez préciser :
L'ensemble de données Iris (iris.config), de Lichman, M. (2013). Référentiel d'apprentissage automatique UCI . Irvine, Californie : Université de Californie, École d'information et d'informatique., est un ensemble de données très connu dans la communauté de l'apprentissage automatique. Voici les résultats de mes clusters initiaux aléatoires :
Ces données ont été générées à des fins de débogage (voir basic2d.config) et illustrent l'effet d'un mauvais choix de clusters aléatoires initiaux. Les résultats ci-dessous démontrent une configuration initiale du centroïde qui empêche l'algorithme d'atteindre l'affectation de cluster évidente. Dans ce cas, l'emplacement du centroïde rouge signifie que le centroïde bleu capture tous les points de données dans les quadrants inférieur gauche et inférieur droit.
L'ensemble de données sur la criminalité (crime.config) provient d'Edureka, ici.