Initialisation des centres K-means au moyen de sous-échantillons aléatoires de l'ensemble de données?


13

Si j'ai un certain ensemble de données, comment serait-il intelligent d'initialiser des centres de cluster à l'aide d'échantillons aléatoires de cet ensemble de données?

Par exemple, supposons que je veuille 5 clusters. Je prends la 5 random samplesparole size=20%de l'ensemble de données d'origine. Puis-je alors prendre la moyenne de chacun de ces 5 échantillons aléatoires et utiliser ces moyennes comme mes 5 centres de cluster initial? Je ne sais pas où j'ai lu ceci mais je voulais savoir ce que vous en pensez.


MISE À JOUR: Veuillez consulter ce fil Initialisation du clustering K-means: quelles sont les méthodes existantes? pour la discussion générale sur les différentes méthodes d'initialisation.


11
Si vous divisez l'échantillon au hasard en 5 sous-échantillons, vos 5 moyennes coïncideront presque. Quel est le sens de faire de ces points proches les centres de cluster initiaux? Dans la plupart des implémentations de K-means, la sélection par défaut des centres de cluster initiaux est basée sur l'idée opposée: trouver les 5 points les plus éloignés et en faire les centres initiaux.
ttnphns

2
@ttnphns Ce serait une bonne réponse.

2
Je pense qu'il serait beaucoup mieux de choisir la moyenne globale comme un point et d'en choisir d'autres qui sont loin de ce centre dans diverses directions.
Michael R. Chernick

1
Logique. Comment pourrais-je faire le tour pour trouver ces 5 points éloignés? Je vous remercie!
JEquihua

@JEquihua, j'ai posté mon commentaire comme réponse et ajouté les détails que vous demandez.
ttnphns

Réponses:


16

Si vous divisez l'échantillon au hasard en 5 sous-échantillons, vos 5 moyennes coïncideront presque. Quel est le sens de faire de ces points proches les centres de cluster initiaux?

Dans de nombreuses implémentations de K-means, la sélection par défaut des centres de grappes initiaux est basée sur l'idée opposée: trouver les 5 points les plus éloignés et en faire les centres initiaux. Vous vous demandez peut-être comment trouver ces points éloignés? Voici ce que fait K-means de SPSS pour cela:

Prenez tout k cas (points) de l'ensemble de données comme centres initiaux. Tous les cas restants sont en cours de vérification pour la capacité de les remplacer comme centres initiaux, par les conditions suivantes:

  • a) Si le boîtier est plus éloigné du centre le plus proche de lui que la distance entre deux centres les plus proches les uns des autres, le boîtier se substitue au centre des deux derniers dont il est le plus proche.
  • b) Si le boîtier est plus éloigné du deuxième centre le plus proche de lui que la distance entre le centre le plus proche et le centre le plus proche de celui-ci, le boîtier se substitue au centre le plus proche.

Si la condition (a) n'est pas satisfaite, la condition (b) est vérifiée; s'il n'est pas satisfait, le cas ne devient pas un centre. À la suite de tels cas traversés, nous obtenons k cas extrêmes dans le nuage qui deviennent les centres initiaux. Le résultat de cet algo, bien que suffisamment robuste, n'est pas totalement insensible au choix de départ de k cas" et à l'ordre de tri des cas dans l'ensemble de données; ainsi, plusieurs tentatives de démarrage aléatoires sont toujours les bienvenues, comme c'est toujours le cas avec K-means.

Voir ma réponse avec une liste de méthodes d'initialisation populaires pour k-means. La méthode de division en sous-échantillons aléatoires (critiquée ici par moi et d'autres) ainsi que la méthode décrite utilisée par SPSS - sont également sur la liste.


1
Une fois que j'ai fait ce que vous décrivez, quelle statistique pourrais-je utiliser pour déterminer quel point d'initialisation conduit à une meilleure partition? Merci pour tout.
JEquihua

Utiliser les points les plus élevés comme centres initiaux une fois ne garantit pas d'obtenir la meilleure partition à la fin, pensant qu'ils (par rapport aux centres initiaux aléatoires) diminuent les chances d'être piégés dans un "optimum local", et ils accélèrent le processus de convergence . En changeant l'ordre des cas, effectuez l'intégralité de la partition k-means 2 à 5 fois, enregistrez les centres finaux obtenus , faites-les la moyenne et saisissez-les en tant que centres initiaux pour une clusterisation finale. Cette partition est sûrement la meilleure. Vous n'avez en fait besoin d'aucune statistique spéciale pour le vérifier, sauf si vous allez comparer des partitions de différents k.
ttnphns

1
Je veux comparer des partitions de différents k. Que pourrais-je utiliser? Quelle est une bonne idée? merci de m'avoir tant aidé. @ttnphns.
JEquihua

Il existe un grand nombre de critères de clustering "internes" . L'un des plus appropriés pour les k-moyennes est Calinski-Harabasz (F de Fisher multivarié). Google pour cela ou pour d'autres.
ttnphns

7

Les moyens seront beaucoup trop similaires. Vous pourriez tout aussi bien trouver la moyenne de l'ensemble de données, puis placer les centroïdes initiaux dans un petit cercle / sphère autour de cette moyenne.

Si vous voulez voir un schéma d'initialisation plus solide pour k-means, jetez un œil à k-means ++. Ils ont mis au point une méthode assez intelligente pour semer les k-means.

  • Arthur, D. et Vassilvitskii, S. (2007).
    k-means ++: les avantages d'un ensemencement soigné ".
    Actes du dix-huitième symposium annuel ACM-SIAM sur les algorithmes discrets

Diapositives de l'auteur: http://www.ima.umn.edu/~iwen/REU/BATS-Means.pdf


J'ai lu ceci, il semble assez intuitivement avantageux mais je pense qu'il reste à prouver qu'il fonctionne mieux que de simplement prendre beaucoup de points d'initialisation aléatoires. J'ai trouvé ce code simple au cas où vous voudriez l'essayer: kmpp <- fonction (X, k) {n <- nrow (X) C <- numérique (k) C [1] <- échantillon (1: n, 1) pour (i en 2: k) {dm <- distmat (X, X [C,]) pr <- appliquer (dm, 1, min); pr [C] <- 0 C [i] <- échantillon (1: n, 1, prob = pr)} kmeans (X, X [C,])}
JEquihua

Il est connu de réduire considérablement le nombre d'itérations jusqu'à la convergence et de produire en moyenne de meilleurs résultats. Je peux confirmer que dans mes propres expériences, kmeans ++ est la voie à suivre. J'utilise l'implémentation ELKI.
A QUIT - Anony-Mousse

Qu'est-ce que l'implémentation ELKI? où puis-je le chercher? salutations!
JEquihua


4

L'utilisation des moyens d'échantillons aléatoires vous donnera l'opposé de ce dont vous avez besoin, comme l'a souligné ttnphns dans son commentaire. Il nous faudrait un moyen de trouver des points de données assez éloignés les uns des autres.

Idéalement, vous pouvez parcourir tous les points, trouver les distances entre eux, déterminer où les distances sont les plus grandes ...

Pas pour contourner l'intention de l'OP, mais je pense que la "solution" est intégrée dans l'algorithme k-means. Nous effectuons plusieurs itérations et recalculons les centroïdes de cluster en fonction des itérations précédentes. Nous exécutons également généralement l'algorithme kmeans plusieurs fois (avec des valeurs initiales aléatoires) et comparons les résultats.

Si l'on a des connaissances a priori, des connaissances de domaine, cela pourrait conduire à une méthode supérieure pour identifier où les centres de cluster initiaux devraient être. Sinon, il s'agit probablement de sélectionner des points de données aléatoires comme valeurs initiales, puis d'utiliser plusieurs exécutions et plusieurs itérations par exécution.


Une fois que j'ai fait ce que vous décrivez, quelle statistique pourrais-je utiliser pour déterminer quel point d'initialisation conduit à une meilleure partition? Merci pour tout.
JEquihua

2

Les réponses proposées sont toutes efficaces, mais sont beaucoup plus difficiles à opérationnaliser que votre proposition d'origine. Un moyen très simple d'initialiser est de prendrekobservations aléatoires comme points d'origine. La probabilité de rapprochement de deux points initiaux est assez faible et l'algorithme s'exécute rapidement pour tous les cas sauf les plus extrêmes.


Cela a beaucoup de sens. Puis-je vous demander la même chose que j'ai demandé à Aman. Supposons que je prenne un zillion de points initiaux aléatoires. Que puis-je utiliser pour déterminer laquelle des partitions résultantes est la meilleure? Salutations! @gmacfarlane
JEquihua

Typiquement, k- signifie que les algorithmes itèrent jusqu'à ce que l'erreur quadratique moyenne (ou l'erreur absolue moyenne) soit minimisée et stable entre les itérations. Dans un ensemble de données donné, il y aura un nombre fini de combinaisons qui minimisent vraiment cette MSE. Donc, un zillion s'exécute produira probablement entre un et dix schémas de partition (en fonction de l'étrangeté de vos données), et je choisirais celui qui avait le MSE le plus bas parmi tous les groupes.
gregmacfarlane

Je dois noter que si vos partitions sont très sensibles à la sélection initiale des points, cela signifie que vos données n'ont pas de clusters naturels et k-signifie que l'algorithme de clustering n'est peut-être pas la meilleure chose à utiliser. Ou, vous essayez d'adapter plus de clusters que les données naturellement présentes.
gregmacfarlane
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.