Nous trouvons les centres de cluster et attribuons des points à k différents groupes de cluster dans le clustering k-means, qui est un algorithme très bien connu et qui se retrouve presque dans tous les packages d'apprentissage automatique du réseau. Mais la partie manquante et la plus importante à mon avis est le choix d’un k correct. Quel est le meilleur rapport qualité-prix? Et qu'entend-on par meilleur ?
J'utilise MATLAB pour le calcul scientifique où regarder les tracés de silhouette est donné comme un moyen de décider de k discuté ici . Cependant, je serais plus intéressé par les approches bayésiennes. Toutes les suggestions sont appréciées.
clustering
k-means
petrichor
la source
la source
R
plus iciRéponses:
Cela a été demandé à quelques reprises sur stackoverflow: ici , ici et ici . Vous pouvez regarder ce que la foule là-bas pense de cette question (ou d'une petite variante de celle-ci).
Permettez-moi également de copier ma propre réponse à cette question sur stackoverflow.com:
Malheureusement, il n’existe aucun moyen de définir automatiquement le "droit" K et il n’existe pas non plus de définition de ce que "droit" est. Il n’existe pas de méthode statistique fondée sur des principes, simple ou complexe, permettant de définir le "bon K". Il existe des heuristiques, des règles empiriques qui fonctionnent parfois, parfois non.
La situation est plus générale, car de nombreuses méthodes de regroupement utilisent ce type de paramètres, ce qui constitue un gros problème en suspens dans la communauté des chercheurs en apprentissage par regroupement / non supervisé.
la source
Tout d'abord une mise en garde. Dans le clustering, il n’existe souvent aucune "bonne réponse": un cluster peut être meilleur qu’un autre par une métrique, et l’inverse peut être vrai en utilisant une autre métrique. Et dans certaines situations, deux regroupements différents pourraient être également probables sous la même métrique.
Cela dit, vous voudrez peut-être jeter un coup d’œil sur les processus de Dirichlet . Voir aussi ce tutoriel .
Si vous commencez avec un modèle de mélange gaussien, vous rencontrez le même problème qu'avec k-means - vous devez choisir le nombre de clusters. Vous pouvez utiliser des preuves de modèle, mais elles ne seront pas robustes dans ce cas. L’astuce consiste donc à utiliser un processus de Dirichlet avant les composants de mélange, ce qui vous permet d’avoir un nombre potentiellement infini de composants de mélange, mais le modèle trouvera (généralement) automatiquement le nombre "correct" de composants (sous les hypothèses de le modèle).
Notez que vous devez toujours spécifier le paramètre de concentration du processus de Dirichlet avant. Pour les petites valeurs de , les échantillons d'un PD sont probablement composés d'un petit nombre de mesures atomiques de poids élevé. Pour les grandes valeurs, la plupart des échantillons seront probablement distincts (concentrés). Vous pouvez utiliser un hyper-prior sur le paramètre de concentration, puis déduire sa valeur à partir des données. Cet hyper-prior peut être suffisamment vague pour autoriser de nombreuses valeurs possibles. Cependant, avec suffisamment de données, le paramètre de concentration cessera d'être si important et cet hyper-préalable pourrait être abandonné.αα α
la source
J'utilise la méthode du coude :
La raison en est que, après cela, vous augmentez le nombre de clusters mais le nouveau cluster est très proche de certains des existants.
la source
La taille des clusters dépend fortement de vos données et de l'utilisation des résultats. Si vous utilisez vos données pour diviser des éléments en catégories, essayez d’imaginer le nombre de catégories que vous souhaitez d’abord. Si c'est pour la visualisation de données, rendez-le configurable, afin que les gens puissent voir à la fois les grands groupes et les plus petits.
Si vous avez besoin de l’automatiser, vous pouvez ajouter une pénalité pour augmenter k et calculer ainsi le cluster optimal. Ensuite, vous pondérez simplement k selon que vous voulez une tonne de grappes ou très peu.
la source
Vous pouvez également vérifier la mise en cluster optimale optimisée non supervisée qui traite le problème que vous avez mentionné (recherche du nombre de clusters) et dont une version modifiée est implémentée ici.
la source
J'ai réussi à utiliser la "méthode L" pour déterminer le nombre de grappes dans une application géographique (c'est-à-dire un problème essentiel, même si techniquement non euclidien).
La méthode L est décrite ici: Détermination du nombre de clusters / segments dans les algorithmes de clustering / segmentation hiérarchique Stan Salvador et Philip Chan
Essentiellement, cela évalue l'ajustement pour différentes valeurs de k. Un graphe en forme de "L" apparaît avec la valeur k optimale représentée par le coude dans le graphe. Un simple calcul de la droite des moindres carrés à deux lignes est utilisé pour trouver le point du genou.
J'ai trouvé la méthode très lente car les k-moyennes itératives doivent être calculées pour chaque valeur de k. Aussi, j’ai trouvé que k-means fonctionnait mieux avec plusieurs exécutions et choisissait le meilleur à la fin. Bien que chaque point de données n'ait que deux dimensions, une simple distance de Pythagore ne peut pas être utilisée. Donc, cela fait beaucoup de calculs.
Une solution consiste à ignorer toutes les autres valeurs de k (disons) à la moitié des calculs et / ou à réduire le nombre d'itérations k-moyennes, puis à lisser légèrement la courbe obtenue pour obtenir un ajustement plus précis. J'ai posé la question à ce sujet chez StackOverflow - IMHO, la question du lissage reste une question de recherche ouverte.
la source
Vous devez reconsidérer ce que fait k-mean. Il essaie de trouver le partitionnement optimal de Voronoï de l'ensemble de données en cellules. Les cellules de Voronoï sont des cellules de forme étrange, structure orthogonale d'une triangulation de Delaunay.k
Mais que se passe-t-il si votre ensemble de données ne correspond pas vraiment au schéma de Voronoï?
Très probablement, les clusters réels ne seront pas très significatifs. Cependant, ils peuvent toujours fonctionner pour tout ce que vous faites. Même en séparant un "vrai" cluster en deux parties, car votre est trop élevé, le résultat peut très bien fonctionner, par exemple, pour la classification. Je dirais donc: le meilleur est celui qui convient le mieux à votre tâche.kk k
En fait, lorsque vous avez grappes dont la taille et l’espace ne sont pas égaux (et ne rentrent donc pas dans le schéma de partitionnement de Voronoï), il peut être nécessaire d’augmenter k pour obtenir k-moyennes afin d’obtenir de meilleurs résultats.k
la source
Globalement, vous pouvez choisir le nombre de clusters dans deux chemins différents.
axée sur les connaissances: vous devriez avoir quelques idées du nombre de clusters dont vous avez besoin du point de vue commercial. Par exemple, vous regroupez des clients, vous devriez vous demander, après avoir obtenu ces clients, que dois-je faire ensuite? Peut-être aurez-vous un traitement différent pour différentes grappes? (par exemple, publicité par courriel ou par téléphone). Alors combien de traitements possibles envisagez-vous? Dans cet exemple, vous sélectionnez 100 grappes n’auront pas beaucoup de sens.
Basé sur les données: plus de grappes sont sur-ajustées et moins de grappes sont sous-ajustées. Vous pouvez toujours diviser les données en deux et exécuter une validation croisée pour voir combien de clusters sont bons. Notez que dans le clustering, vous avez toujours la fonction de perte, similaire au réglage supervisé.
Enfin, vous devez toujours combiner les connaissances et les données dans le monde réel.
la source
Comme personne ne l’a encore souligné, je pensais partager cela. Il existe une méthode appelée X-moyennes ( voir ce lien ) qui estime le nombre approprié de grappes en utilisant le critère d’information bayésien (BIC). Essentiellement, cela reviendrait à essayer K signifie avec différents K, calculer le BIC pour chaque K et choisir le meilleur K. Cet algorithme le fait efficacement.
Il existe également une implémentation de weka , dont les détails peuvent être trouvés ici .
la source
Une autre approche consiste à utiliser un algorithme évolutif dont les individus ont des chromosomes de différentes longueurs. Chaque individu est une solution candidate: chacun porte les coordonnées des centroïdes. Le nombre de centroïdes et leurs coordonnées sont évolués afin de parvenir à une solution donnant le meilleur score d'évaluation en clustering.
Ce document explique l'algorithme.
la source