Alors que l'algorithme KMeans regroupe de grands ensembles de données, afin de trouver la valeur optimale de K, nous pouvons utiliser l'extrait de code suivant:
model = KMeans() visualizer = KElbowVisualizer(model, k=(min_value, max_value), timings=False, locate_elbow=True) visualizer.fit(data) no_of_clusters= visualizer.elbow_value_
En cela, nous spécifions la plage (min_value et max_value ) dans laquelle nous devrions obtenir la valeur K. Pour les grands ensembles de données (par exemple: 1 million de lignes), comment trouver la meilleure combinaison de ces plages afin de gagner beaucoup de temps d'exécution?
4 Réponses :
En fait, le choix du cluster dépend principalement de votre application.
Mais dans mon cas, je respecte les valeurs suivantes: 1. Pour les petites données et les applications moins critiques: Kmin = 2 et Kmax = 10 2. Pour les petites données et les applications plus critiques: Kmin = 2 et Kmax = max jusqu'à 20 3. Pour les données volumineuses et les applications moins critiques: Kmin = 2 et Kmax = entre 5 et 10 4. Pour les données volumineuses et les applications plus critiques: Kmin = 2 et Kmax = 10 - 15
Dans tous les cas, n'allez pas au-delà de 30.
Merci pour l'info! Mais cela peut-il être une solution universelle? Surtout dans le cas de grands ensembles de données, cela entraînera la présence de nombreuses valeurs aberrantes dans chaque cluster à droite. Pour mon cas particulier, j'aurais besoin d'un grand nombre de clusters afin que le nombre de valeurs aberrantes soit très inférieur dans chaque cluster et que les éléments à l'intérieur soient très similaires les uns aux autres.
@RahulMonish si dans les grandes données les valeurs aberrantes sont trop importantes, il est bon de former moins de clusters afin que les valeurs aberrantes soient facilement identifiées. Parce qu'il essaiera de former un groupe séparé de valeurs aberrantes et si vous augmentez les groupes, il peut arriver que les valeurs aberrantes soient divisées en différents groupes, ce qui augmente notre travail d'analyse des données.
@RahulMonish Si vous sentez qu'il y a beaucoup trop de valeurs aberrantes, il serait logique de traiter les valeurs aberrantes avant de recourir à l'application de KMeans car l'algo est sensible aux valeurs aberrantes. Je suppose également que vous avez effectué une normalisation sur l'ensemble de données. Pourriez-vous partager quelques lignes ou le lien de l'ensemble de données, si possible?
Bonne question sur la façon d'arriver à une fourchette raisonnable pour K. Il existe plusieurs scénarios dans lesquels vous souhaitez placer votre problème.
Scénario 1: Nous connaissons le contexte commercial, c'est-à-dire comment le résultat serait utile. Disons si nous essayons de regrouper les pays en certains groupes - pays en développement, pays développés et pays sous-développés. Ici, nous connaissons la gamme approximative de valeurs qui sont déterminées par les entreprises. Dans ce cas, vous pourriez envisager d'augmenter la portée de quelques clusters.
Scénario 2: Nous avons la moindre idée de l'utilisation commerciale des clusters. Dans de tels cas, vous pouvez essayer d'utiliser des mesures telles que le score de silhouette pour chaque valeur de K et vous arrêter à une valeur où vous trouvez le score de silhouette maximum. Un petit ajustement ici consiste à augmenter la valeur de K de 2/3 plutôt que de 1 à chaque fois au cas où le nombre de clusters que vous regardez est de l'ordre de 10s.
https://scikit-learn.org/stable /modules/generated/sklearn.metrics.silhouette_score.html
Avant de répondre à cette science des données, vous trouverez votre Intuition avec Trial & Error. Nous n'obtenons pas la solution d'un seul coup. Utilisez le score de silhouette pour évaluer les meilleures valeurs de K. Ou Utilisez 3 valeurs à la fois et calculez les scores de silhouette, puis voyez s'ils vous donnent un bon score.
Sous-échantillonnez vos données.
K-means est basé sur des moyennes. La précision des moyennes ne s'améliore pas beaucoup avec plus de données. Alors utilisez simplement des objets 10k, c'est assez.