Apprentissage automatique : le clustering K-Means | Lazy Programmer Inc | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Apprentissage automatique : le clustering K-Means

teacher avatar Lazy Programmer Inc

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Vidéo d'introduction au clustering K-Means

      3:03

    • 2.

      Une introduction facile au clustering K-Means

      6:55

    • 3.

      Exercice : trouver des centres de clusters

      9:03

    • 4.

      Solution : trouver des centres de clusters

      10:59

    • 5.

      Exercice : trouver des tâches de cluster

      4:54

    • 6.

      Solution : trouver les tâches de cluster

      6:59

    • 7.

      Exercice : K-Moyens dans son intégralité

      6:45

    • 8.

      Solution : K-Means dans son intégralité

      16:13

    • 9.

      Objectif K-Means (théorie)

      12:52

    • 10.

      Objectif K-Means (code)

      5:04

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

81

apprenants

--

projets

À propos de ce cours

L'analyse de cluster est un élément de base de l'apprentissage automatique non supervisé et de la science des données.

Il est très utile pour l'exploration de données et le big data car il trouve automatiquement des modèles dans les données, sans avoir besoin d'étiquettes, contrairement à l'apprentissage automatique supervisé.

Dans un environnement réel, vous pouvez imaginer qu'un robot ou une intelligence artificielle n'aura pas toujours accès à la réponse optimale, ou peut-être qu'il n'y a pas de réponse optimale correcte. Vous voudriez que ce robot soit capable d'explorer le monde par lui-même et d'apprendre des choses simplement en recherchant des motifs.

Vous êtes-vous déjà demandé comment nous obtenons les données que nous utilisons dans nos algorithmes d'apprentissage automatique supervisés ?

Nous semblons toujours avoir un beau fichier CSV ou un tableau, avec des X et des Y correspondants.

Si vous n'avez pas été impliqué dans l'acquisition de données vous-même, vous n'y avez peut-être pas pensé, mais quelqu'un doit créer ces données !

Ces « Y » doivent venir de quelque part, et la plupart du temps, cela implique un travail manuel.

Parfois, vous n'avez pas accès à ce type d'information ou il est peu réalisable ou coûteux à acquérir.

Mais vous voulez quand même avoir une idée de la structure des données. Si vous faites de l'analyse de données, l'automatisation de la reconnaissance des motifs dans vos données serait inestimable.

C'est là que l'apprentissage automatique non supervisé entre en jeu.

Dans ce cours, nous allons d'abord parler de clustering. C'est là qu'au lieu de nous entraîner sur les étiquettes, nous essayons de créer nos propres étiquettes ! Nous le ferons en regroupant des données qui se ressemblent.

Dans ce cours, vous apprendrez à construire l'algorithme de clustering k-means.

Prérequis :

  • Mathématiques de base
  • Codage Python de base

Rencontrez votre enseignant·e

Teacher Profile Image

Lazy Programmer Inc

Enseignant·e
Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. K-Means Clustering Vidéo d'introduction: À tous et bienvenue dans mes derniers cœurs d'apprentissage automatique avec le clustering k-means en Python. Alors qui suis-je et pourquoi devriez-vous m'écouter ? Eh bien, je suis un programmeur paresseux et je suis l'auteur de plus de 30 cours en ligne sur la science des données, l'apprentissage automatique et l'analyse financière. J'ai deux masters en ingénierie et en statistiques. Ma carrière dans ce domaine s' étend sur plus de 15 ans. J'ai travaillé dans plusieurs entreprises que nous appelons aujourd'hui Big Tech et dans plusieurs startups. Grâce à la science des données, j'ai augmenté mes revenus de plusieurs millions de dollars grâce aux équipes que je dirige. Mais surtout, je suis très enthousiaste à l'idée de vous proposer cette technologie essentielle. Alors, quel est l'objet de ce cours ? Ce cours vise à vous enseigner l'un des algorithmes fondamentaux et de l'apprentissage automatique, connu sous le nom de clustering k-means. Voici un exemple d'algorithme d' apprentissage automatique non supervisé. Cela signifie qu'il est destiné à être utilisé sur des ensembles de données qui n'ont pas d'étiquettes. Ce cours vise à vous apprendre comment fonctionne l'algorithme et à vous aider à acquérir une solide compréhension implémentant vous-même chez k-means. Ces compétences sont essentielles si vous souhaitez faire de la science des données et de l'apprentissage automatique dans le monde réel. Alors, qui doit suivre ce cours et comment vous y préparer ? Ce cours est conçu pour les étudiants qui s' intéressent à la science des données et à l'apprentissage automatique et qui ont déjà une certaine expérience des bibliothèques de calcul numérique telles que NumPy et Matplotlib. Notez que cela implique également que vous avez une certaine expérience des mathématiques vectorielles et matricielles, qui seront utilisées dans ce cours. La deuxième compétence dont vous aurez besoin est la programmation de base. N'importe quel langage convient, mais comme ce cours utilise Python, ce serait idéal. Heureusement, Python est un langage très facile à apprendre. Donc, si vous connaissez déjà une autre langue, vous ne devriez pas avoir de mal à rattraper votre retard. Et pour ces deux sujets, ou une compréhension au niveau du lycée devrait être suffisante et une compréhension de premier cycle serait encore meilleure. Donc, en termes de ressources, quelles ressources aurez-vous besoin pour suivre ce cours ? Heureusement, pas grand-chose. Vous aurez besoin d'un ordinateur, d'un navigateur Web et d'une connexion à Internet. Et si vous regardez cette vidéo, vous remplissez déjà ces conditions. Voyons maintenant pourquoi vous devriez suivre ce cours et ce à quoi vous devez vous attendre. En termes simples, le clustering K-means est l'un des principaux algorithmes abordés dans tout programme d'apprentissage automatique. C'est fondamental, que vous travailliez en finance, biologie ou dans tout autre domaine impliquant l'analyse de données. clustering K-means sera un outil utile. À la fin de ce cours, vous aurez suffisamment appris pour utiliser ce que vous avez appris sur des ensembles de données du monde réel. J'espère donc que vous êtes tout aussi enthousiaste que moi à l'idée de découvrir cet algorithme incroyable. Merci de m'avoir écouté, et je vous verrai lors de la prochaine conférence. 2. Une introduction facile au clustering K-means: Dans cette conférence, je vais vous présenter l'intuition qui sous-tend le clustering K-means et son fonctionnement. Tout d'abord, nous savons que puisqu'il s'agit d'un algorithme d'apprentissage automatique, nous allons travailler sur des données. Essayons donc de visualiser certaines données que nous pourrions obtenir. La première chose que vous remarquerez à propos de ces données est que tous ces points sont de la même couleur. C'est parce que nous faisons de l'apprentissage non supervisé. n'y a donc aucune classe donnée à ces points. Chaque point n'est que le vecteur, et c'est tout ce que nous savons de chaque point. Nous ne savons pas s'il doit être rouge, bleu ou autre. Mais il y a une caractéristique importante de cet ensemble de données. Que remarquez-vous à ce sujet ? Eh bien, nos capacités de reconnaissance des formes humaines nous permettent constater immédiatement qu'il semble y avoir trois groupes de données ici. En d'autres termes, nous n'avons pas besoin de l'ensemble de données pour nous indiquer que ces trois groupes sont distincts. Nos propres capacités de reconnaissance des nous permettent de voir cela très clairement. C'est ce que nous entendons par apprentissage non supervisé. Ce n'est pas supervisé car personne n' a besoin de nous donner la réponse. Il s'agit également d'un concept clé de l' intelligence générale artificielle. Si nous voulons créer une IA capable de naviguer dans le monde réel. Pratiquement parlant, il doit probablement avoir une certaine intuition générale et capacité de reconnaissance des formes, car il serait impossible de lui fournir des données d'entraînement pour toutes les situations possibles. rencontre. C'est donc un point très important. Nous utilisons nos propres capacités de reconnaissance des pour différencier ces clusters. Cela ne se trouve pas dans les données elles-mêmes. Mais vous avez peut-être remarqué que ce que nous venons d'examiner était une situation tout à fait unique et très spécifique. La première limite de ces données était qu'elles étaient bidimensionnelles. Cela est bien sûr nécessaire car si nous avions, disons, un jeu de données à 100 dimensions, vous ne pourriez pas le voir. L'univers lui-même ne possède que trois dimensions de l'espace. C'est donc tout ce que tu peux voir. Parfois, j'ai des étudiants qui ne sont pas convaincus de ce fait. Donc, si vous êtes convaincu que vous pouvez voir au-delà des trois dimensions, essayez de dessiner un cube en dix dimensions et voyez ce qui se passe. Maintenant. Pourquoi est-ce que je le mentionne ? Eh bien, la plupart des ensembles de données du monde réel ne sont pas bidimensionnels. Par conséquent, vous ne pouvez pas voir la plupart des données du monde réel. Par conséquent, vos propres compétences en reconnaissance ne sont pas utiles dans ce scénario. Ce serait bien si nous avions un algorithme pour trouver que les clusters sont des groupes de données qui peuvent fonctionner quelle que soit la dimensionnalité des données. Bien sûr, c'est le but de tout ce cours. Vous pouvez donc être sûr connaître la réponse à cette question la fin de ce cours. Voici un autre problème. Dans les données originales que je vous ai montrées. Je l'ai généré pour qu'il affiche très clairement trois clusters distincts. Mais que se passerait-il si nos données ressemblaient à cela ? Et si nos données ressemblaient à ceci ? Vous pouvez maintenant voir que les clusters ne sont pas si clairs. En général, nous aimerions savoir si le cluster que j'ai trouvé est bon ou non ? Dans ce cours, nous allons également répondre à cette question. Donc, comme première étape pour comprendre le clustering k-means, examinons deux types de vérités fondamentales concernant les clusters de l'ensemble de données. Supposons qu'on me dise que ces points jaunes, violets et verts sont les centres de certains groupes. Et j'aimerais savoir à quel centre appartient ce nouveau point bleu ? Et je pense qu'il est logique que ce point, bien sûr, appartienne au centre le plus proche. Donc, pour décider à quel cluster appartient un point de données, je choisis le centre de cluster le plus proche. Assez intuitif. Examinons maintenant le deuxième fait fondamental concernant les clusters. Supposons qu'on me dise que les points de données que vous voyez ici appartiennent tous au même cluster. Appelons-les de X1 à X C. Nous aimerions savoir quel est le centre de ce cluster. Bien entendu, ce n'est que la moyenne de tous ces points de données. C'est ce que l'on appelle aussi le centroïde, si vous pensez de manière géométrique. Et comme vous le savez, pour trouver la moyenne d'un ensemble de vecteurs, il faut les additionner et les diviser par le nombre de vecteurs. C'est ainsi que vous trouvez le centre du cluster. La grande question, c'est que nous avons ces deux faits fondamentaux sur les clusters. Est-il possible de combiner ces deux idées pour nous donner un algorithme de clustering ? Croyez-le ou non, ces deux faits fondamentaux sont tout ce dont vous avez besoin pour implémenter le clustering K-Means. Il s'avère que si j' initialise les centres du cluster de manière aléatoire, puis si je répète ces deux étapes encore et encore, je convergerai vers une réponse. Donc, pour résumer, nous commençons par sélectionner des points aléatoires comme centres de notre cluster. Ensuite, je peux utiliser le fait que chaque point de mon jeu de données appartient simplement au cluster dont le centre est le plus proche. J'assigne donc tous mes points de données au centre de cluster le plus proche. Maintenant que je sais que chaque point de données appartient à un cluster, je peux calculer de nouveaux centres de cluster fonction de tous les points qui lui appartiennent. Je reviens ensuite à la première étape, qui consiste à attribuer des points de données aux nouveaux centres de clusters. Encore une fois. Plus loin dans cette section, nous verrons des démonstrations visuelles de la façon dont les attributions de clusters et les centres de clusters évoluent à chaque itération. Résumons cette conférence. Depuis lors, il était certain que des idées très importantes avaient été introduites. abord, nous avons parlé du fait qu' il est parfois très facile pour nous de voir les clusters. Nous n'avons pas besoin que l'ensemble de données nous indique l'étiquette de chaque point de données. Nous pouvons facilement voir quel point de données appartient à quel cluster. Cela signifie que nous avons appris à comprendre les données de manière non supervisée. Ensuite, il est important de comprendre en quoi cet exemple a été limité. Parfois, les limites entre les données peuvent ne pas être aussi clairement définies. Et le plus souvent, nous ne serons pas en mesure d' examiner nos données car elles ne seront pas bidimensionnelles. Nous aimerions donc avoir un algorithme automatique capable un algorithme automatique trouver des clusters pour nous à partir de n'importe quel ensemble de données arbitraire. Enfin, nous avons examiné deux faits fondamentaux concernant les clusters. Le fait que chaque point doit être affecté au cluster dont il est le plus proche. Et le fait que chaque centre de cluster doit simplement être le centre de chaque point qui lui appartient. Nous avons vu que lorsque nous combinons ces deux faits, nous obtenons l'algorithme de clustering k-means. 3. Invitation d'exercice 1: Dans cette conférence, nous allons vous lancer et exercer vos compétences en matière de codage. Ce cours est conçu pour être un cours pratique. Ainsi, pour chaque sujet que vous découvrirez, vous l'implémenterez dans du code. Comme je le dis, si vous pouvez l'implémenter, vous ne le comprenez pas. En fait, j'ai récemment découvert le célèbre physicien Richard Feynman avait dit une chose très similaire. Il a dit : Ce que je ne peux pas créer, je ne le comprends pas. Donc, si vous n'êtes pas d'accord avec moi, vous n'êtes pas non plus d'accord avec l'un des physiciens les plus célèbres de tous les temps. D'accord, alors comment pouvez-vous mettre en pratique ce que vous venez d'apprendre ? Eh bien, dans cette conférence, votre exercice consistera à implémenter une partie du clustering K-means. Voici donc l'exercice. abord, vous allez générer un ensemble de données synthétique aléatoire appelé x. Comme vous vous en souvenez, pour l'apprentissage automatique, x doit être bidimensionnel, n par d comme nombre d' échantillons et d est le nombre de fonctionnalités. Vous allez également créer un tableau unidimensionnel d'identités de clusters appelé « pourquoi ». Pourquoi devrait également être de taille n, le nombre d'échantillons. En effet, pour chacun des échantillons, vous allez lui attribuer une identité de cluster. N'oubliez pas qu' il doit s'agir de nombres entiers compris entre zéro et k moins un inclus, ce qui indique que vous avez K clusters au total. Ainsi, par exemple le premier X peut appartenir au cluster zéro, le second X peut appartenir au cluster un et ainsi de suite. Maintenant, la façon dont vous créez ces données dépend entièrement de vous. Vous pouvez créer les données de manière aléatoire ou essayer de générer des données appropriées pour le clustering. Personnellement, j'opterais pour ce dernier car le résultat aura plus de sens et sera finalement plus agréable visuellement. Supposons pour notre exemple que n est égal à 300, d est égal à deux et k est égal à trois. Cela signifie que les identités de votre cluster prendront les valeurs 01,2. Je suggère de faire en sorte que vos données soient réparties de manière égale entre les trois clusters. Vous aurez donc 100 points de données appartenant au cluster 1 100 points de données appartenant au cluster 2 100 points de données appartenant au cluster 3. OK ? Alors, une fois que vous avez généré les données, que faites-vous avec elles ? Donc, pour résumer, ce que nous avons jusqu'à présent est x, qui est de taille n par d, et y, qui est de taille n. L'étape suivante, qui est la pièce maîtresse de cet exercice, consiste à calculer la moyenne de chaque groupe. Alors, qu'est-ce que cela implique ? Supposons que j' ai trois clusters, donc k est égal à trois. Ensuite, vous devez parcourir en boucle chacune des valeurs du cluster. C'est 01,2. Pour chacun de ces clusters, recherchez tous les points de données qui appartiennent à ce cluster. Donc, pour les besoins de cet exemple, supposons que vous choisissiez le cluster zéro. Vous voulez donc trouver tous les points de données dans x qui appartiennent au cluster zéro. Comme vous vous en souvenez, ces informations sont stockées dans y, alors vous voulez trouver la moyenne de tous ces points de données. Dans le cadre d'un exercice, pensez à la taille du résultat. Je vais vous donner une minute pour y réfléchir ou vous pouvez mettre cette vidéo en pause jusqu'à ce que vous ayez la réponse. OK, alors, quelle est la taille du vecteur moyen de tous les points de données appartenant à un cluster spécifique ? Eh bien, n'oubliez pas que tous nos points de données sont des vecteurs de caractéristiques qui vivent dans un espace de dimension D. Dans notre exemple, d est simplement égal à la moyenne d' un groupe de vecteurs de dimension d. En d'autres termes, cela signifie simplement que vous avez un ensemble de points de données et que vous souhaitez trouver le point de données qui se trouve au centre de gravité ou au centre de gravité. Et bien sûr, pour ce faire, il suffit d'additionner tous les vecteurs et de les diviser par le nombre total de vecteurs. OK ? Supposons maintenant que pour chacun des k clusters, vous calculez les vecteurs moyens de dimension d. Cela signifie que vous avez k vecteurs, chacun de taille d. Bien entendu, vous pouvez les stocker dans un tableau bidimensionnel de taille k par d. Ce devrait être le résultat de cet exercice. Une matrice k par d qui contient les vecteurs moyens de dimension d pour chacun des k clusters est notre résultat souhaité. Regardons ce problème d'une manière différente, juste au cas où vous ne l'auriez pas compris la première fois. Bon, supposons que nous ayons n points de données, X1, X2, jusqu'à x n. Chacun de ces axes est un vecteur de dimension d. De plus, nous avons n, les identités de cluster correspondantes Y1 et Y2, jusqu'à YN. Chacun de ces y est un entier qui peut aller de zéro à k exclusif. N'oubliez pas que si nous combinons tous ces x en une seule matrice, un grand X, c'est la matrice n par d à laquelle je faisais référence tout à l'heure. Nous pouvons faire la même chose pour tous les y pour obtenir un gros vecteur y de longueur n. Rendons cet exemple un peu plus concret. Supposons que Y prenne les valeurs que vous voyez ici. Donc, Y1 est égal à zéro, Y2 est égal à un, Y3 est égal à y quatre est égal à un, y est égal à deux, y est égal à zéro, Y est égal à zéro, y est égal à un et y neuf est égal à deux. Il doit être clair que n est égal à neuf. Maintenant, votre travail consiste à trouver la moyenne de tous les x qui appartiennent à chacun des clusters. Pour le cluster zéro, vous devez trouver la moyenne de X1, X6, X7. C'est parce que E1, E6 et E7 sont nuls. Pour le cluster 1, vous devez trouver la moyenne de x2, x4, annexe huit. C'est parce que Y2, y quatre et y sont égaux à un. Pour le cluster 2, vous devez trouver la moyenne de X3, x5, X9. C'est parce que Y3, Y cinq et Y neuf ou égal à deux. Appelons cela signifie m1, m2 et m3. Logiquement, ils devraient tous être des vecteurs de longueur d, puisqu'ils ne sont que la moyenne des vecteurs de longueur D. Enfin, vous devez combiner ces trois vecteurs moyens en une seule matrice de taille k par d, où dans cet exemple, k est égal à trois. Et n'oubliez pas que les données que nous utiliserons pour cet exercice seront générées de manière aléatoire par vous. Comme mentionné précédemment, vous pouvez le rendre complètement aléatoire ou le faire ressembler à des données, ce qui est approprié pour le clustering. Vous vous demandez peut-être pourquoi nous ne pouvons pas utiliser de données réelles pour cet exercice. C'est une question importante pour les débutants. N'oubliez pas que toutes les données sont identiques. Par conséquent, cet exercice serait le même quel que soit le type de données que nous utilisons. La génération des données vous-même vous permet de comprendre la forme et la nature des données, plutôt que de simplement les charger dans un fichier CSV. Cela nécessite donc une meilleure compréhension, ce qui est une bonne chose. De plus, étant donné que nous disposons de nombreux ensembles de données pratiques du monde réel utilisés ailleurs dans le cours. Ce n'est pas le moment de le faire. Maintenant, je tiens à préciser que nous ne faisons pas encore d'apprentissage automatique. Il s'agit simplement d'un exercice de programmation très simple pour vous échauffer. Tout ce que nous faisons, c'est un peu de géométrie, et j'espère que vous serez d'accord avec moi sur ce point. Nous disons : « Voici un tas de points de données, et chacun des points de données appartient à un groupe différent. Déterminez maintenant la moyenne de chaque point de données au sein de chaque groupe. D'accord, donc j'espère que vous serez d'accord avec moi pour dire qu'il ne s'agit que d'un simple exercice de programmation géométrique. Et il n'y a rien à craindre à ce stade. En prime, étant donné que nos données sont bidimensionnelles, nous pouvons également les tracer sur une grille bidimensionnelle. Donc, votre deuxième travail est le suivant. Premier diagramme, toutes les données sur une grille bidimensionnelle à l'aide du nuage de points. Dans ce nuage de points, vous devez également coder par couleur chaque point de données en fonction des identités de cluster stockées dans le tableau y. Peu importe les couleurs réelles, il suffit que chaque point de données d' même cluster doit avoir la même couleur. Enfin, maintenant que vous avez les moyennes de chaque agrégat, vous devez également tracer les centres de chaque agrégat sur le même nuage de points. Vous devez utiliser un style différent afin de pouvoir différencier les centres du cluster des points de données réels. Comme vous pouvez le voir sur ce graphique, j'ai utilisé des étoiles. OK, donc c'est l'exercice numéro un pour le regroupement de K-means. Bonne chance et à bientôt lors de la prochaine conférence. 4. Solution d'exercice 1 (trouver des centres de cluster): Dans cette conférence, nous allons examiner la solution à l'exercice précédent, l'exercice k-means numéro un. Notez qu'actuellement je ne vais pas fournir le code pour cet exercice car il est très court. Et parce que votre travail dans ce cours consiste à apprendre à coder par vous-même, cela inclut la saisie, la conception et la bonne syntaxe. À tout le moins, vous devriez pouvoir copier ce que je fais, même si je ne le recommande pas. Si vous faites les exercices conformément aux instructions, vous ne devriez pas avoir besoin d'un fichier de code contenant les solutions à ces exercices. saisie sur le clavier permet de développer la mémoire musculaire, une compétence inestimable à posséder lors du codage. Si vous avez une raison légitime pour laquelle vous ne pouvez pas saisir le code vous-même, veuillez me le faire savoir et je ferai mon mieux pour vous répondre. OK, alors allons-y. abord, nous allons importer numpy et matplotlib dans des bibliothèques standard pour le calcul numérique en Python. Ensuite, nous allons définir nos paramètres de configuration. Comme mentionné précédemment. Cela signifie que la dimensionnalité des données correspond au nombre de clusters de trois et au nombre de points de données de 300. Ensuite, nous allons créer les données. C'est peut-être la partie la plus difficile du scénario. Parlons donc de ce que nous voulons faire à un niveau élevé. abord, l'idée de base est que je veux avoir trois nuages de points de données afin que chaque nuage puisse être considéré comme un cluster différent. C'est l'image que vous devriez avoir en tête lorsque vous pensez au regroupement. Alors, comment pouvons-nous générer de tels nuages ? Eh bien, une idée possible est de prélever des échantillons à partir de trois distributions gaussiennes différentes, chacune avec une moyenne différente. Comme vous vous en souvenez, une distribution gaussienne se caractérise par sa moyenne et sa covariance. La moyenne nous indiquera où se trouve la Gaussienne. Et la covariance nous indiquera comment les points de données de la Gaussienne seraient répartis. Commençons donc par définir trois moyens correspondant aux trois Gaussiens. Je dirai que mon un est 00, qui est à l'origine, dira que mon deux est 55. Et nous dirons que mon trois a 50 ans. Ensuite, je vais créer un tableau N par D appelé x. C'est là que nous allons stocker les données pour remplir x, nous allons commencer par les 100 premiers points, comme vous vous en souvenez, les deux-points. Ensuite, le 100 signifie sélectionner les indices de zéro à 100. Ensuite, sur le côté droit, je dis générer un tableau de taille 100 par d à partir de la normale standard, puis j'ajoute un mu1. en résulte 100 points de données avec une dimension deux centrée sur mu et un avec une covariance d'identité. Ensuite, je vais faire la même chose. Mais pour les 100 prochains points de données, cette fois, les indices seront compris entre 100 et 200. Et sur le côté droit, les points de données seront centrés sur mu deux. Enfin, nous ferons de même pour les 100 derniers points de données, pour les indices, 200, 300. Ces points de données seront centrés sur mu trois. Ensuite, je vais créer le tableau y, qui nous indique l'identité du cluster correspondant à chacun des axes. Comme nous venons de créer les axes et qu'ils sont tous en ordre, la structure de Y est très simple. C'est juste 100 zéros suivis de 100 1 suivis de 100 deux. Comme vous vous en souvenez, si vous créez une liste et que vous la multipliez par un entier, elle répète simplement cet élément de la liste autant de fois. Ensuite, lorsque nous utilisons l' opération plus sur ces listes, le résultat est la concaténation des listes. Enfin, nous avons transféré le résultat dans un tableau NumPy. Comme il est plus facile de travailler avec des tableaux NumPy, comparez deux listes. Notez que bien que nos données aient une structure spéciale avec tous les clusters dans l'ordre, le code suivant ne suppose pas cela. En d'autres termes, le code que nous allons écrire fonctionnera avec des données de n'importe quelle structure. OK, la prochaine étape consiste donc à visualiser les données que nous venons de créer. Pour ce faire, nous allons créer un nuage de points en appelant la fonction de dispersion. Nous passons le premier argument dans la première colonne de x. Dans le second argument, nous passons dans la deuxième colonne de x. Dans le troisième argument nommé, nous spécifions la couleur correspondant à notre des points de données et nous passons en y. Notez que y est juste un tas de zéros, de un et de deux. À l'aide de ce schéma, matplotlib décidera couleurs réelles à attribuer à nos points de données. Bien entendu, vous pouvez avoir un meilleur contrôle du grain si vous souhaitez choisir vous-même les couleurs. Mais c'est suffisant pour nous. OK, alors j'espère que c'est ce que tu t'attendais à voir. Nous pouvons voir que nous avons trois nuages de points de données, et chacun d'eux est coloré selon y. Ensuite, nous allons examiner la question, étant donné un tableau bidimensionnel de taille n par d, par convention, comment puis-je obtenir la taille D, ce vecteur moyen de ce tableau ? C'est-à-dire que je voulais prendre la moyenne pour chacun des n échantillons. Maintenant, vous devez faire attention, car si vous appelez simplement point mean par lui-même, vous obtiendrez un scalaire unique, qui est la moyenne de chaque élément de X. Nous ne voulons pas cela, depuis ce que nous devrait aboutir à un vecteur moyen, pas à un scalaire. Pour obtenir ce que nous voulons, nous devons passer l'axe des arguments égal à zéro, ce qui signifie prendre la moyenne le long de la dimension n. Si vous passez un axe égal à un, vous obtiendrez la moyenne le long de la dimension d. Comme toujours, nous vous encourageons à essayer ces choses par vous-même afin d'avoir une meilleure idée de leur fonctionnement. Ne me croyez pas sur parole. Ok, donc quand on lance ça et qu'on vérifie la forme du résultat, on en obtient deux comme prévu. Ensuite, nous allons utiliser ce que nous venons de découvrir pour calculer la moyenne de chaque cluster en utilisant les identités de cluster fournies dans le tableau y. Pour commencer, nous allons créer un tableau de taille K par D a appelé des moyens. Ensuite, nous allons calculer la moyenne de chaque cluster un par un, commençant par le cluster zéro. D'accord, donc ce code est assez compact, mais en fait, il se passe beaucoup de choses à la fois. Si vous ne comprenez pas cela au premier coup d'œil, j'espère que vous avez fait l'exercice d'une manière qui n'avait aucun sens pour vous. Vous n'aurez donc jamais à trouver la même solution que moi. Il suffit de trouver la même réponse. Votre code peut être complètement différent du mien. Comme vous le savez, le code peut être lu de l'intérieur vers l'extérieur. Commençons donc par ce qui se trouve le plus à l'intérieur, qui est y égal, égal à zéro. Si vous ne savez pas à quoi cela sert, je vous recommande de l'isoler et de l'imprimer lui-même afin de mieux comprendre. Essentiellement, cela renvoie un tableau booléen. Comme vous le savez, égal, égal doit renvoyer vrai ou faux. Mais puisque nous l' utilisons sur un tableau, c'est pourquoi le résultat sera également un tableau. Puisque nous disons égal à zéro, le tableau résultant sera vrai à chaque emplacement où y est égal à zéro et faux dans le cas contraire. OK, alors que se passe-t-il lorsque nous indexons x avec ce tableau booléen ? Eh bien, comme vous l'avez peut-être deviné, compte tenu de l'exercice que nous faisons, cela sélectionne tous les éléments de X où l'indice est vrai. OK, alors j'espère que c'est logique. Comme vous vous en souvenez, X est un tableau de n lignes. Pourquoi y a-t-il aussi un tableau avec n éléments ? Lorsque nous disons que y est égal à zéro, cela renvoie un tableau booléen avec n éléments. Ensuite, en indexant x avec ce tableau booléen, nous ne récupérons que les parties de X où l'indice était vrai. C'est-à-dire que nous obtenons uniquement les lignes de x correspondant au moment où y est égal à zéro. De manière équivalente, nous n'obtenons que les lignes de X qui appartiennent au cluster zéro. Enfin, nous prenons la moyenne en utilisant la fonction moyenne, passer un axe est égal à zéro. Ensuite, nous assignons le vecteur moyen obtenu à notre tableau de moyennes sur le côté gauche à l'indice zéro. Ensuite, nous faisons la même chose pour calculer les moyennes pour le groupe un et le groupe deux. OK, donc techniquement, c' est la fin de l'exercice. Mais ce serait bien si nous pouvions visualiser ce que nous venons de découvrir. La prochaine étape consiste donc à redessiner notre nuage de points. Mais avec le cluster, nous avons calculé précédemment. abord, nous allons commencer par dessiner le même nuage de points que précédemment. Ensuite, nous appelons à nouveau scatter, mais cette fois en utilisant le tableau des moyens que nous venons de créer. Comme avant. Le premier argument est la première colonne de moyennes, qui fait référence à la première dimension. Et le deuxième argument est la deuxième colonne de moyens, qui fait référence à la deuxième dimension. Ensuite, je vais transmettre quelques arguments supplémentaires pour rendre l'intrigue plus facile à voir. abord, je vais transmettre un S égal à 500, qui contrôle la taille des points de données. Cela fera en sorte que la moyenne soit beaucoup plus grande que les données. Ensuite, je passe et C est égal au rouge pour que chacun des centres du cluster soit rouge. Cela permettra de différencier davantage ces points de mes données. En guise de remarque, cet exemple montre comment définir la couleur des points de données dans le nuage de points de données manuellement, alors que nous n'avions pas choisi les couleurs dans le diagramme de dispersion précédent. Enfin, nous allons définir un marqueur égal à une étoile, sorte qu'au lieu de simplement apparaître sous la forme d'un cercle, les moyens ressemblent à des étoiles, ce qui les rendra encore plus faciles à voir. OK, alors exécutons-le. OK, alors j'espère que c'est ce que vous vous attendez à ce qu'il voie. Chaque vecteur moyen apparaît approximativement au centre de chaque agrégat. Comme indiqué, ils représentent les centres de masse ou les centroïdes de chaque groupe. De plus, nous pouvons voir qu'ils se trouvent approximativement aux centres gaussiens d'origine. L'une des étoiles est à 00, une autre à 05, une autre à 55. 5. Prompt 2 d'exercice de K-Means: Dans cette conférence, nous allons passer directement à votre deuxième exercice pour cette section. Auparavant, votre exercice consistait à prendre un ensemble de points de données et un ensemble d'identités de clusters. Ensuite, vous deviez trouver la moyenne des points de données pour chaque cluster. Cette fois, tu vas prendre la direction opposée. Maintenant, vous recevrez un ensemble de moyens ainsi qu'un ensemble de points de données. Votre travail consistera à utiliser ces moyens et ces points de données et à découvrir à quel cluster appartient chaque point de données. Rappelez-vous donc que cela se fait fonction de la distance euclidienne ou, de manière équivalente, de la distance euclidienne au carré. Notez que puisque les carrés fonction augmente de façon monotone, que vous preniez le carré ou non, ne changent pas la réponse. C'est-à-dire que si vous comparez des distances, disons 2,4, si vous les mettez au carré, vous obtiendrez 4,16. Ainsi, la relation selon laquelle deux est inférieur à quatre est préservée car quatre est également inférieur à 16. Et ce ne sont que les distances relatives qui comptent, car tout ce que vous essayez de faire est de trouver la moyenne la plus proche. La distance réelle elle-même n'apparaît pas dans la réponse. D'accord, donc comme avant , pensons à un exemple très simple de la façon dont cela fonctionnera. Supposons que nous ayons trois moyennes, m , zéro, M1 et M2. Nous avons également neuf points de données, x1, x2, x3, jusqu'à X9. Alors, que pouvons-nous voir ? Ce que nous pouvons voir, c'est que X1, X2 et X3 sont tous plus proches de zéro que de M1 et M2. Par conséquent, X1, X2 et X3 appartiennent au cluster zéro. De la même manière, nous pouvons voir que X4, X5 et X6 sont plus proches de M1 que de zéro ou de M2. Par conséquent, X4, X5 et X6 appartenaient au cluster 1. Enfin, X7, X8 et X9 sont plus proches de M2 qu'ils ne le sont de m zéro ou m1. Par conséquent, X7, X8, X9 appartiennent au cluster 2. J'espère donc que cela a du sens. Le défi est de mettre cette intuition visuelle dans le code. Voici comment votre code doit fonctionner à un niveau élevé. abord, vous allez générer un ensemble de moyennes dans une matrice de taille k par d, comme dans l'exercice précédent. Vous pouvez également utiliser les mêmes valeurs pour n, d et k que précédemment. Donc n est égal à 300, d est égal à deux et k est égal à trois. N'oubliez pas que d est égal à deux est utile car nous pouvons le voir visuellement. Ensuite, vous allez également générer une matrice de données de taille n par d. Comme précédemment, vous pouvez créer ces matrices de manière aléatoire, mais il peut être utile de les générer de manière logique à partir d'un clustering perspective. soit la façon dont vous le faites, cela dépend de vous. Personnellement. Je pense qu'il est plus utile de générer les données manière structurée afin qu' une fois que vous avez trouvé la réponse, vous puissiez tracer les résultats sous forme de vérification de santé. En parlant de cela en prime, je vous encourage à tracer les résultats avec les résultats de l'exercice. En sortie, vous devez avoir un vecteur de longueur n, qui nous indique l'identité de cluster de chaque point de données. Donc, par exemple si le premier x appartient au cluster zéro, alors la première valeur de votre tableau de sortie doit être zéro. Enfin, je tiens à souligner qu'il existe de nombreuses façons de réaliser cet exercice. Vous avez peut-être entendu dire que lorsque vous utilisez NumPy, il n'est pas bon de l'utiliser pour les boucles parce que c'est pour les boucles ou pour le slow. Au lieu de cela, on vous a peut-être dit qu'il était préférable d'utiliser des opérations vectorisées. C'est-à-dire que normalement, vous aimeriez trouver une fonction numpy capable de faire ce que vous voulez en même temps. Personnellement, je pense que pour cet exercice, il est plus instructif de le faire avec des boucles pour car cela permet de réfléchir à ce qui se passe de manière algorithmique. En fin de compte, c'est à vous de décider si vous décidez de l'utiliser pour les boucles ou non. Enfin, je tiens à répéter que, tout comme l'exercice numéro un, s'agit pas encore tout à fait d'apprentissage automatique. En fait, il ne s'agit que d'un simple échauffement de programmation en géométrie. Ce que nous faisons, c'est prendre un ensemble de points de données et de centres. Et nous essayons simplement de déterminer pour chaque point de données quel centre est le plus proche. J'espère donc que vous serez d'accord avec moi pour dire que cet exercice n'est qu'un autre simple exercice de programmation géométrique. Bon, donc bonne chance pour l' exercice numéro deux, et je vous verrai lors de la prochaine conférence. 6. Solution d'exercice 2 de K-Means (trouver des attributions de cluster): Dans cette conférence, nous allons examiner la solution pour l' exercice numéro deux de k-means. Comme précédemment, veuillez vous assurer d'avoir terminé l'exercice avant de regarder cette conférence. Notez que pour le moment je ne vais pas fournir le code pour cet exercice car il est très court. Et parce que c'est votre travail dans ce cours d'apprendre à coder par vous-même. Cela inclut la saisie, la conception et l'obtention de la syntaxe correcte. À tout le moins, vous devriez pouvoir copier ce que je fais, bien que je ne recommande pas de le faire. Si vous faites les exercices conformément aux instructions, vous ne devriez pas avoir besoin d'un fichier de code contenant les solutions à ces exercices. Taper sur le clavier et développer la mémoire musculaire , une compétence inestimable à posséder lors du codage. Si vous avez une raison légitime pour laquelle vous ne pouvez pas saisir le code vous-même, veuillez me le faire savoir et je ferai de mon mieux pour vous répondre. OK, alors allons-y. Nous allons donc commencer par importer numpy et matplotlib, comme avant. Ensuite, nous initialisons nos paramètres de configuration. C'est n, le nombre d' échantillons égal à 300, d, le nombre d'entités est égal à deux, et k, le nombre de clusters égal à trois. Ensuite, nous initialisons trois moyens qui nous permettront de définir nos centres de clusters. Pour plus de commodité, j'ai utilisé les mêmes moyens que précédemment. Ensuite, nous allons générer les données. Nous commençons par initialiser un tableau de tous les zéros appelé X de la forme N par D. Ensuite, nous définissons les 100 premiers points qui seront normalement distribués centrés sur la moyenne avec une covariance d'identité. Ils iront donc dans les indices de zéro à 100. Ensuite, nous définissons les 100 points de données suivants pour qu'ils soient distribués normalement centrés sur la deuxième moyenne, également avec une covariance d'identité. Ils figureront sur les indices 100 à 200. Enfin, nous avons défini les 100 derniers points de données comme étant distribués normalement, centrés sur la troisième moyenne, également avec une covariance d'identité. Ils iront sur les indices 200 à 300. Ensuite, nous avons notre boucle principale, qui est au cœur de cet exercice. Il s'agit de la boucle dans laquelle nous allons attribuer les identités du cluster. Nous allons commencer par créer un tableau appelé Y rempli de tous les zéros de taille n. Bien entendu, il doit avoir la taille n car nous avons besoin d'une identité de cluster pour chacun de nos N points de données en x. Donc y est le tableau qui stockera l'identité de votre cluster. Ensuite, nous parcourons les n points de données en boucle. Comme indiqué dans l'invite d'exercice précédente, il existe de nombreuses façons de le faire, même sans que vous ayez à écrire vous-même des boucles pour. Cependant, cela n'est pas vraiment utile pour cet exercice, car écrire les choses de cette façon vous aide à réfléchir plus clairement à l' algorithme. OK, il devrait donc être clair que puisque nous parcourons en boucle les n points de données, nous allons trouver la meilleure identité de cluster un par un pour chaque point de données. L'idée de base est la suivante. Pour chaque point de données, x sous le petit n, nous allons parcourir chacune des moyennes du cluster. Pour chacun de ces moyens, nous allons vérifier la distance par rapport à x du petit n deux. Ça veut dire. Nous garderons une trace de toutes ces distances afin de trouver celle qui est minimale. Donc, si signifie que zéro est le plus proche, cela signifie que l'identité du cluster est nulle. Si la valeur moyenne est la plus proche, cela signifie que l' identité du cluster est une et ainsi de suite. OK, nous allons donc commencer par initialiser une variable appelée k le plus proche à moins un. Nous utilisons moins un comme valeur sentinelle. Cela sera remplacé au fur et à mesure que nous parcourrons la boucle interne. De même, nous initialisons une variable appelée min dist à l'infini. Il est clair que cette variable stockera la distance minimale entre x de n et toutes les moyennes. En l'initialisant à l'infini, toute distance trouvée dans la boucle sera plus petite. OK, donc ensuite, nous allons parcourir petit k égal à zéro jusqu'au grand K. C'est-à-dire que nous allons passer en boucle par le centre de chaque cluster. À l'intérieur de la boucle, nous trouvons la distance au carré entre x du petit n et la moyenne de k, la moyenne k eth. Si vous ne comprenez pas pourquoi il s'agit la formule de la distance carrée, je vous recommande de revoir la définition de la distance euclidienne carrée. Nous appellerons cette variable D. Ensuite, nous vérifierons si d est inférieur ou non à min dist. Bien entendu, la première fois que nous parcourons cette boucle, cela est garanti puisque Mendez commence par infini et que tout nombre fini est inférieur à l'infini. Si cette condition est vraie, nous faisons deux choses. abord, nous mettons à jour min dist comme étant la distance actuelle d. C'est-à-dire que min dist est la plus petite distance que nous ayons trouvée jusqu'à présent. Ensuite, nous assignons k le plus proche comme étant le k actuel. Et encore une fois, cela signifie que k le plus proche est l'indice du centre d'agrégat le plus proche nous avons trouvé jusqu'à présent. Vous devez être convaincu qu'à la fin de cette boucle, K le plus proche stockera l'indice du centre du cluster le plus proche et Min dist stockera la distance correspondante. Ainsi, à ce stade, nous pouvons attribuer k le plus proche à y, indexer ce petit n. En d'autres termes, k le plus proche est l'identité de cluster pour le point de données x du petit terrain. Lorsque la boucle externe sera terminée, nous aurons trouvé les identités des clusters pour tous les Big N data points. Donc, à titre de vérification de santé, nous aimerions tracer nos résultats. Heureusement, vous savez déjà comment procéder, car nous l'avons fait lors de la conférence précédente. Allons-y. OK, alors j'espère que c'est ce que vous vous attendez à ce qu'il voie. Nous pouvons voir que tous les points de données sont assignés à la bonne couleur, en fonction de la moyenne dont ils sont les plus proches. Ce sont tous les points les plus proches de 00 ou d'une couleur, qui semble être violette. Tous les points les plus proches de 05, ou d'une couleur différente, qui semble être verte. Enfin, tous les points de données les plus proches de 55, ou d'une autre couleur, qui semble être jaune. 7. Invitation d'exercice 3: Dans cette conférence, nous allons poursuivre notre discussion sur le clustering K-means. Une chose surprenante que vous allez apprendre est qu'en faisant les deux exercices précédents, vous avez pratiquement accompli 90 % du travail. Vous vous souvenez peut-être que j'ai dit que les deux exercices précédents ne sont que de très simples échauffements. ne s'agissait que de simples exercices de programmation pour faire de la géométrie. Et pourtant, en même temps, vous verrez que le clustering k-means n'est rien d'autre que ces deux simples exercices géométriques répétés encore et encore. Plus tôt. Au début de cette section, nous avons énoncé deux intuitions fondamentales concernant les clusters. Rappelons-nous ce qu'ils sont. Les faits numéro un sont que l'identité de cluster de chaque point de données doit être le centre du cluster est le plus proche. Je veux dire, c'est tout simplement logique. Supposons, par exemple, que nous ayons deux groupes d'étudiants, qui est très grand, disons 6 pieds en moyenne , et l'autre qui est très petit, disons 5 pieds en moyenne. Si votre taille est de cinq pieds 10 pouces, il devrait être évident que vous appartenez à la grande grappe et non à la grappe courte. Pourquoi ? Parce que vous êtes plus proche de 6 pieds, vous êtes de 5 pieds. J'espère donc que c'est intuitif. Voici donc le fait numéro deux. Le centre du cluster est simplement la moyenne ou moyenne de tous les points de données appartenant à ce cluster. Cela est également logique si nous avons cinq personnes dans notre groupe, alors ce que l'on appelle le centre serait la taille moyenne de tous les membres de notre groupe. J'espère que c'est aussi intuitif que le facteur numéro un. De plus, vous devez reconnaître que ces deux faits ne sont que les deux exercices précédents. Plus tôt, j'ai dit que clustering k-means se trouve être une boucle qui répète simplement ces deux opérations encore et encore. Alors, qu'est-ce que cela implique ? Eh bien, cela signifie qu'en faisant les deux exercices précédents, vous avez déjà implémenté le clustering at k-means. ne reste plus qu' à les assembler. D'un autre côté, il semble y avoir un léger problème. Ce que l'on pourrait considérer comme un problème de poulet et d'œufs. Vous voyez que chacune des deux étapes semble dépendre des résultats de l'autre. Pour trouver les moyens, vous avez besoin des identités du cluster. Mais pour trouver les identités des clusters, vous avez besoin du moyen qui est arrivé en premier, la poule ou l'œuf. La réponse à cette question s'appelle l'étape d'initialisation. Dans ce cas, k-means permet de savoir si c' la poule ou l'œuf qui passe en premier. En gros, nous assignons centres du cluster à des points de données choisis au hasard dans x. Il s'agit donc d'une étape que nous effectuons avant en revue les deux étapes dont nous avons parlé précédemment. Le résultat final est donc le suivant. Pour initialiser les K-means, nous commençons par sélectionner k points aléatoires dans x et les assigner comme centres de clusters. Ensuite, nous entrons dans une boucle. À l'intérieur de la boucle, nous utilisons le fax numéro un. Nous attribuons chaque point de données en x à nos centres de clusters actuels. la première exécution, ces centres de clusters seront simplement un sous-ensemble des points de x. Le résultat de cette étape est un nouvel ensemble d'identités de cluster. Ensuite, nous utilisons des faits et, deuxièmement, nous recalculons les centres de chacun des clusters en fonction des dernières identités de clusters. Le résultat de cette étape est donc un nouvel ensemble de centres de clusters. Ensuite, nous répétons ce processus encore et encore jusqu'à ce que l' algorithme converge. Alors, comment savoir quand l'algorithme converge ? Eh bien, c'est à ce moment que les identités du cluster cessent de changer. Lorsque les identités des clusters cessent de changer, il est évident que les centres des clusters cesseront également de changer. Et il ne sert à rien de poursuivre la boucle, puisque la réponse ne changera plus. un détail crucial que vous devez savoir sur le clustering K-means. Bien que le processus que je viens décrire semble assez simple, il n'aboutit pas à la même réponse à chaque fois que vous l'exécutez. C'est-à-dire que k-means ne trouve jamais de solution optimale à l'échelle mondiale. Au lieu de cela, il est uniquement possible de trouver un optimum local. Une solution simple consiste à exécuter k-means plusieurs fois , puis à choisir la meilleure réponse. Nous définirons ce que signifie le mieux plus loin dans cette section. Pratiquement parlant, c'est à peu près tout ce que vous pouvez faire. Et dans le monde réel, c'est très bien. J'espère donc que le prochain exercice ne sera pas une surprise. Votre travail, avant de passer à la prochaine conférence, sera d' implémenter k-means dans le code. N'oubliez pas que vous avez déjà effectué la majeure partie du travail des exercices 1.2 de cette section. Tout ce que vous avez vraiment à faire est mettre ces deux choses en boucle. Le schéma de base de votre code doit être le suivant. abord, vous allez générer un jeu de données appelé X de forme n par d. Cette fois, vous voulez vraiment générer un jeu approprié pour le clustering k-means. C'est-à-dire qu'il ne faut pas générer un jeu de données à partir d'un seul gaussien sans agrégats clairement discernables. Plus loin dans cette section, nous examinerons des ensembles de données réels. Mais pour l'instant, nous voulons simplement nous assurer que votre version de k-means fait ce qu'elle est censée faire. Ensuite, vous allez initialiser les centres du cluster en sélectionnant k points sélectionnés aléatoirement parmi x. Puisque vous avez créé les données vous-même, vous pouvez choisir les valeurs de N, D, E, et K. Je recommande quand même d'utiliser d est égal à deux afin que vous puissiez visualiser les résultats. Ensuite, vous allez entrer dans une boucle qui exécute les deux étapes dont nous avons parlé précédemment. À l'intérieur de la boucle, vous devez vérifier la convergence. d'autres termes, lorsque les identités du cluster cessent de changer à ce stade, vous devez quitter la boucle. Enfin, si vous choisissez D est égal à deux, vous devriez visualiser les résultats. Pour ce faire, dessinez un nuage de points des données ainsi que des identités de cluster que vous avez trouvées. En outre, vous devez également dessiner les centres de clusters correspondants. Puisque vous avez déjà appris à le faire, ne devriez pas avoir beaucoup de mal à le refaire. Bon, alors bonne chance pour cet exercice, et je vous verrai lors de la prochaine conférence. 8. Solution d'exercice de K 3 K-Means en intégralité): Dans cette conférence, nous allons implémenter le clustering et le code k-means. Comme toujours, j'espère que vous avez eu l'occasion de terminer cet exercice avant de regarder cette conférence. Si ce n'est pas le cas, je vous recommande d'arrêter cette vidéo maintenant jusqu'à ce que vous ayez terminé l'exercice. N'oubliez pas que c'est dans l' intérêt de votre apprentissage. J'espère donc que vous avez passé du temps de qualité à implémenter ce code. En fait, le troisième exercice aurait dû être beaucoup plus facile que les deux premiers. Puisque le troisième exercice consiste simplement assembler les deux premiers exercices. J'espère donc que vous avez trouvé que c'est le cas. OK, alors allons-y. D'abord. Nous allons à nouveau importer numpy et matplotlib. Vous savez maintenant comment nous utilisons ces bibliothèques. Ensuite, nous définissons à nouveau les paramètres de configuration R. C'est que d est égal à k égal à trois et n est égal à 300. La dimensionnalité des données est donc de deux, le nombre de clusters est de trois et le nombre d' échantillons est de 300. Ensuite, nous créons les données. Nous commençons par créer les vrais moyens mu un, mu deux et mu 31. Il est important de garder à l'esprit que ces moyennes réelles ne sont pas connues par l'algorithme K-means. Nous les connaissons parce que nous les utilisons pour créer les données. Mais k-means ne les utilise pas du tout. Vous pouvez consulter le code vous-même pour vérifier ce fait. Donc, comme précédemment, nous allons utiliser la moyenne 0,055,05. Ensuite, nous créons notre matrice X de taille n par d. Nous définissons les 100 premiers points comme une gaussienne centrée sur mu une covariance d'identité. Nous avons défini les 100 points suivants comme une gaussienne centrée sur mu deux, toujours avec une covariance d'identité. Enfin, nous avons défini les 100 derniers points comme étant une gaussienne centrée sur mu trois, toujours avec une covariance d'identité. J'espère donc que vous vous souvenez de tout cela des exercices précédents. Maintenant, vous pourriez vous demander, maintenant que nous créons le véritable code de clustering K-means, pourquoi n'utilisons-nous toujours pas de données réelles ? C'est donc une bonne question pour les débutants et tous les débutants devraient être en mesure d'y répondre avant la fin de ce cours, si ce n'est déjà fait. OK, donc tout d'abord, n'oubliez pas que nous avons fait un bon nombre d'exemples sur données du monde réel en dehors de cette conférence. L'objectif de cette conférence est de mettre en œuvre K-Means. Le type de données que nous utilisons n'est pas pertinent. Pourquoi n'est-ce pas pertinent ? Eh bien, n'oubliez pas que quelles que soient les données, ce code pour le clustering k-means ne changerait pas. n'y a donc aucun avantage réel à utiliser des données réelles à ce stade. En fait, il n'y a qu'un inconvénient. Alors pourquoi ? Eh bien, cela nous amène au point numéro deux , à savoir que l'utilisation de données synthétiques nous permet de tester si notre code fonctionne comme prévu. C'est une chose importante et, en apprentissage automatique, lorsque vous écrivez du code, vous devez tester si cela fonctionne ou non. Mais vous ne pouvez pas le faire si vous utilisez votre code sur un ensemble de données de grande dimension inconnu. autre côté, il s' agit d'un ensemble de données que nous avons créé nous-mêmes et qui est bidimensionnel, donc nous pouvons le voir. Et surtout, nous savons quelle devrait être la réponse. C'est donc un bon moyen de tester si notre code fonctionne ou non. J'espère donc que vous comprenez maintenant bien pourquoi les données synthétiques sont importantes. De plus, vous comprenez que nous allons toujours examiner des données réelles ailleurs dans le cours. Vous n'avez donc perdu aucune occasion de consulter des données réelles. OK, donc à ce stade, tracons nos données pour nous rappeler à quoi elles ressemblent. Cette fois, nous allons uniquement tracer x car c'est la seule chose donnée à notre algorithme k-means, comme vous le verrez bientôt. Auparavant, lors de nos deux premières missions d'échauffement, nous avons supposé que l'on nous avait donné les centres du cluster ou que l'on nous avait donné les identités des clusters. Nous sommes maintenant dans un scénario plus réaliste où nous ne savons ni l'un ni l'autre, nous ne connaissons que x. Cependant, même en traçant x seul, nous pouvons voir intuitivement où les clusters devraient se trouver. OK, alors dessinons notre intrigue. J'espère donc que vous conviendrez que les regroupements de clusters sont très intuitifs. Plus tard, lorsque vous apprendrez des techniques plus avancées, vous comprendrez pourquoi la génération de nos données à partir de nuages gaussiens est en fait le cas d'utilisation idéal. Ensuite, nous commençons le code pour le clustering k-means. Nous allons commencer par effectuer l'initialisation. Comme vous vous en souvenez, cela implique d'attribuer aléatoirement les centres des clusters en utilisant des points choisis aléatoirement à partir de x. Donc, d'abord, nous commençons par créer un tableau de centres d'agrégat de forme K par D. C'est parce qu' il sont k centres de clusters, chaque dimension de largeur B. Ensuite, nous faisons une boucle, k fois. À l'intérieur de la boucle, nous choisissons un indice aléatoire de zéro à n moins un. Si cela vous intéresse, vous pouvez vérifier qu' ils sont choisis à partir d'une distribution uniforme. Nous appelons le résultat I et I est un entier compris entre zéro et n moins un. Ensuite, nous assignons x sub I comme centre du cluster KF. Nous prenons donc notre tableau de centres de clusters et nous l'indexons à k. Ensuite, nous faisons notre boucle k-means. Comme vous vous en souvenez, cela implique deux étapes répétées encore et encore. Et ces deux étapes sont simplement les deux exercices précédents que vous avez déjà effectués. Nous allons donc commencer par définir une variable appelée max itérations à 20. Cela définira une limite supérieure sur le nombre d'itérations de notre boucle. Normalement, k-means converge assez rapidement. Vous constaterez donc que toutes les itérations ne sont pas nécessaires. Ensuite, nous créons un tableau vide pour stocker les identités des clusters. Comme précédemment, il s'agira d'un tableau de longueur n, qui stocke des nombres entiers compris entre zéro et k moins un inclus. Ensuite, à des fins de débogage, je vais commencer une liste vide appelée identités de cluster enregistrées . Pour nous aider à visualiser ce que k-means fait à chaque étape, nous allons enregistrer les identités des clusters à chaque itération de la boucle. Ensuite, nous entrons dans notre boucle. Donc, je passe de zéro à max iter est exclusif. Dans la boucle, nous faisons d' abord une copie du tableau des identités du cluster en appelant la fonction copy. Nous allons l'attribuer à une variable appelée anciennes identités de cluster. N'oubliez pas que c' est ainsi que nous vérifierons si les K-means ont convergé ou non. Si les identités des clusters n' ont pas changé d'une itération à l'autre, cela ne sert à rien de continuer car si les identités des clusters sont les mêmes, les moyens seront également même. Par conséquent, les deux étapes entraîneraient aucun changement. Ensuite, nous enregistrons également les anciennes identités de cluster dans notre liste Enregistrer les identités de cluster. Ensuite, nous effectuons la première étape. Comme vous vous en souvenez, il s'agit de déterminer si les identités du cluster sont définies en fonction des centres du cluster actuel. Notez que la première fois que vous exécutez cette boucle, les centres des clusters ne sont que des points aléatoires dans X. C'est Y. Lors des exercices précédents, il n'était pas nécessaire de donner belle apparence aux données comme je l'ai fait. K signifie qu'à un moment donné, nous allons calculer les identités des clusters pour lesquels les moyennes des clusters se trouvent au mauvais endroit. C'est pourquoi j'ai donné l'instruction que vous pouviez créer n'importe quel x et n'importe quel ensemble de moyens de cluster. Il s'agissait uniquement d' écrire du code de travail. Ok, donc en gros, vous devez reconnaître que toute cette boucle est exactement la même que ce que nous avions avant. Je vais le parcourir plus rapidement cette fois, puisque vous l'avez déjà vu. Tout d'abord, nous avons parcouru en boucle tous les n points de données. Dans cette boucle, nous initialisons k le plus proche à moins un, une valeur sentinelle. Ensuite, nous initialisons min dist à l'infini. Ainsi, toute distance finie que nous calculons soit plus petite. Ensuite, nous avons parcouru toutes les moyennes du cluster k. C'est parce que nous voulons savoir lequel d'entre eux est le plus proche du nième point de données. À l'intérieur de la boucle, nous calculons la distance euclidienne au carré entre x sub n et le centre de l' agrégat KF. Nous l'appellerons D. Ensuite, nous vérifierons si d est inférieur à la valeur minimale actuelle. Si c'est le cas, nous enregistrons le B actuel comme nouvelle distribution masculine, et nous enregistrons k comme k plus proche. Lorsque nous sommes en dehors de la boucle, nous assignons k le plus proche comme étant la nième identité du cluster. Ensuite, nous passons à la deuxième étape, qui était l'autre exercice que nous avons fait. Il s'agit de calculer les nouvelles moyennes de clusters en fonction des identités de clusters que nous venons de trouver. Encore une fois, vous devez reconnaître ce code antérieur avec quelques ajustements de dénomination. Comme vous vous en souvenez, nous travaillons de l'intérieur vers l'extérieur. abord, nous utilisons égal à égal pour obtenir un tableau booléen nous indiquant quels points de données appartiennent au cluster 01 ou deux. Ensuite, nous utilisons ce tableau booléen comme index dans x. Ensuite, nous appelons la fonction moyenne pour obtenir la moyenne de tous ces points de données. Et nous lui passons un axe égal à zéro, sorte que nous prenons la moyenne le long des lignes. Ensuite, nous l' attribuons à notre tableau, qui contient les centres du cluster. Une fois les étapes 1 et 2 terminées, nous pouvons vérifier la convergence. Encore une fois, vous pouvez voir que nous utilisons le terme « égal à égal ». Nous voulons savoir si nos anciennes identités de cluster ou si elles sont égales aux nouvelles identités de cluster que nous venons de trouver comme précédemment, puisque les opérandes pour equal égaux à nos tableaux NumPy, cela renverra un tableau NumPy de booléens contenant uniquement des vrais et des faux, vrais lorsque les deux côtés sont identiques et faux dans le cas contraire. Notez que notre algorithme n'a convergé que si toutes les valeurs sont vraies. En gros, nous faisons une grande déclaration. Nous disons donc si la première position est vraie, si la deuxième position est vraie, et si la troisième position est vraie et ainsi de suite. ce faire, un raccourci consiste à appeler la fonction np point all. Cela retournera vrai si le tableau que vous transmettez contient toutes les valeurs vraies de l'instruction if, ce qui ne se produit que si la condition est vraie. Nous imprimons l' itération vers laquelle nous avons convergé , puis nous appelons break pour terminer la boucle externe. OK, alors exécutons-le. Très bien, comme vous pouvez le voir, K-means a convergé en moins de 20 étapes. Ensuite, comme dans notre exercice précédent, nous allons tracer le résultat de notre algorithme. Réfléchissons donc à cela à un niveau élevé. Au départ, nous n'avions que le tableau x. Oui, nous avions les véritables moyens du cluster, mais nous prétendons ne pas les connaître. Et en fait, lorsque vous pensez à ce que vous auriez avec un jeu de données réel, vous ne les connaissez pas. Notre diagramme d'origine était donc un tracé des données uniquement, sans aucune couleur et sans aucun centre de cluster. Maintenant, après avoir lancé K-means, nous avons plus d'informations. Nous avons maintenant des identités de clusters, qui nous permettent de donner à chaque point chaque cluster une couleur différente. De plus, nous avons également les centres des clusters, ce qui nous permet de les dessiner également sur notre graphique. Comme vous vous en souvenez, nous les avons dessinées auparavant sous forme de grandes étoiles rouges. D'accord, alors j'espère que vous pourrez reconnaître ce code plus tôt. La première ligne crée un nuage de points des données, colorant chaque point de données selon les identités des clusters. Donc, tous les points appartenant au groupe zéro, nous aurons une couleur, tous les points appartenant au groupe un, nous aurons une autre couleur, et ainsi de suite. Ensuite, nous appelons la fonction scatter. Mais cette fois sur les moyennes, comme avant, on passe S égal à 500, agrandit ces points de données et on passe en Z égal au rouge pour les rendre rouges. Et nous avons placé le marqueur égal à l'étoile, sorte qu'ils apparaissent sous forme d'étoiles. OK, alors exécutons-le. Très bien, alors j'espère que c'est ce que vous vous attendez à ce qu'il voie. Ce sont les mêmes données qu'auparavant, mais elles ont maintenant des couleurs en fonction des identités de cluster trouvées par K-means. De plus, nous avons marqué les centres des clusters avec des étoiles rouges. Ce sont toutes les informations que nous n'avions pas avant de lancer K-means où nous ne disposons que des données elles-mêmes. Ensuite, nous avons une courte boucle pour visualiser le processus de formation. Comme vous vous en souvenez, nous avons enregistré les identités des clusters à chaque étape de k-means. Ainsi, en traçant les données en fonction des identités des clusters à chaque étape, nous pouvons voir comment les clusters évoluent à mesure que l'algorithme apprend. OK, donc si tu veux comprendre ce code, je vais le parcourir très rapidement. abord, nous avons saisi le nombre d'identités de cluster que nous avons stockées. Notez que c'est une variable, puisque nous ne savons pas combien fois la boucle d'entraînement se déroulera, nous l'assignerons à une variable appelée m. Ensuite, nous appellerons la fonction des sous-parcelles plt.plot pour définir la taille de la parcelle. Le premier argument définit la largeur et le second indique la hauteur. J'ai choisi le nombre de cinq arbitrairement, ce qui est assez grand pour moi. Mais l'important est de régler la hauteur, qui est m, multipliée par la taille de la largeur. C'est parce que nous allons en faire des intrigues secondaires et que nous voulons qu'elles s'adaptent toutes. Chacune des sous-parcelles individuelles sera de cinq par cinq. Ok, donc ensuite on fait une boucle m fois. À l'intérieur de la boucle, nous appelons plt.show subplot. Cette fonction comporte trois arguments . premier est le nombre de lignes de notre diagramme, et le second est le nombre de colonnes de notre diagramme. Nous allons donc avoir m lignes et une colonne. C'est-à-dire que nous allons créer des parcelles et qu'elles seront toutes superposées. Le troisième argument indique quel tracé est en dehors des tracés m par un. En gros, c'est juste I plus un, puisque la première valeur de i sera zéro. Ensuite, nous obtenons y, qui sera attribué aux identités des clusters lors de l'itération i. Ensuite, nous appelons plt.show scatter en transmettant nos données et pourquoi les paramètres de couleur actuels. OK, alors exécutons-le. Très bien, j'espère que ce graphique vous sera utile pour voir la progression de k-means. Vous pouvez voir que nous commençons avec tout de la même couleur car nous initialisons les identités des clusters pour qu'elles soient un tableau de zéros. Nous pouvons alors constater que progressivement la séparation des clusters s'améliore. Finalement, nous obtenons les identités finales du cluster, après quoi nous arrêtons la formation. est important de noter que les identités des clusters s' améliorent lentement à chaque étape. En définissant les identités des clusters de manière intelligente, les identités des clusters ne s'aggravent pas, mais seulement s'améliorent. Dans des conférences ultérieures, nous quantifierons cette idée. 9. Objectif de K-Means (théorie): Dans cette conférence, nous allons parler de la fonction objective k-means. Pour introduire cette idée, il est utile d'avoir d'abord de l'expérience avec d'autres modèles d'apprentissage automatique, tels que la régression linéaire et la régression logistique. Donc, si vous le faites, cela vous sera très utile. Mais si vous ne le faites pas, faites de votre mieux pour suivre. Donc, essentiellement, la régression linéaire, régression logistique et le regroupement de K-means sont tous des exemples d'apprentissage automatique. Le mot clé de cette phrase est l'apprentissage. La question importante à se poser est donc qu'entendons-nous par apprentissage ? D'une manière générale, notre modèle a généralement un certain objectif. Oui, vous pouvez dire que notre objectif est d'apprendre, mais nous voulons être plus précis et plus particuliers. L'objectif est un chiffre. Dans l'apprentissage supervisé tel que régression linéaire et la régression logistique, ce nombre est l'erreur. Vous pouvez penser à l'objectif, comme au nombre d' erreurs que je fais. Ainsi, apprendre, c'est configurer son cerveau de manière à faire de moins en moins d'erreurs. J'espère donc que l'analogie avec l'apprentissage humain est claire. Apprendre revient à configurer votre cerveau ou votre modèle du monde pour réduire le nombre d'erreurs. En régression linéaire, notre objectif est la somme des erreurs quadratiques. Il y a plusieurs raisons pour lesquelles cela a du sens, mais en voici une simple. régression linéaire consiste à trouver la ligne qui convient le mieux. En d'autres termes, nous aimerions que la ligne soit aussi proche que possible des points. Sur ce graphique, vous pouvez voir que parfois notre ligne de meilleur ajustement surestime lorsqu' elle fait une prédiction, et d'autres fois elle sous-estime. Ainsi, l'erreur peut être en fait positive ou négative. Bien entendu, vous ne voulez pas simplement additionner les zones, car si vous ajoutez un nombre positif et un nombre négatif identiques, vous obtiendrez zéro. Par exemple, si l'une des erreurs est plus cinq et l'autre erreur moins cinq, plus cinq plus moins cinq sont nuls. Et il est évident que vous ne voulez pas que l'erreur totale soit nulle alors que votre modèle a réellement commis une erreur différente de zéro. Par conséquent, nous trions les erreurs manière à ce qu'elles soient toutes positives. Pour les transformer en un seul nombre, nous les additionnons, d'où la somme des erreurs au carré. C'est ce que nous appelons la somme des erreurs carrées ou fonction de coût. Notez qu'il existe d'autres types de fonctions de coût, telles que l'entropie croisée, qui est utilisée pour la régression logistique. Cependant, pour ce cours, nous nous intéressons principalement à l'erreur quadratique. Lorsque vous entraînez un modèle de régression linéaire ou de régression logistique, l'étape suivante un modèle de régression linéaire ou de régression logistique consiste à déterminer comment mettre à jour les paramètres du modèle afin de réduire l'erreur. manière exacte de procéder n'entre pas dans le cadre de ce cours, mais nous vous encourageons à en apprendre davantage sur la régression linéaire et la régression logistique si vous êtes curieux. L'important est de noter que, tout comme le clustering k-means, cela se fait de manière itérative. C'est-à-dire que nous avons une certaine boucle. Dans la boucle, nous mettons à jour les paramètres du modèle. À chaque itération de la boucle, nous espérons mettre à jour les paramètres du modèle de manière à ce que l' erreur s'améliore toujours. Encore une fois, la façon dont nous procédons dépasse le cadre de ce cours, mais nous reconnaissons que c'est possible. noter que l'analogie avec l'apprentissage humain a également du sens dans ce contexte. Vous pouvez considérer chaque itération de la boucle comme un passage à travers les données d'entraînement. C'est-à-dire que chaque fois que vous voyez les données d'entraînement, votre compréhension de celles-ci s'améliore, de sorte que vous réduisez les zones que vous gagnez. Cela vaut aussi bien pour les humains que pour les machines. Plus je pratique, plus je deviens intelligent. D'accord, il s'avère que de nombreux algorithmes d'apprentissage automatique sont entraînés de cette manière. La méthode est, nous pensons à une fonction de coût utile. Ensuite, nous dérivons une règle de mise à jour telle sorte que si nous continuons à appliquer cette règle de mise à jour, le modèle améliore son erreur. Finalement, l'erreur converge vers une valeur minimale, à laquelle vous pouvez voir que vous avez terminé cet apprentissage. Dans ces situations, il est utile de tracer votre coût par itération lorsque la formation est terminée afin de pouvoir vérifier que le processus de formation a bien fonctionné. Encore une fois, de nombreux algorithmes utilisent cette méthode d'apprentissage. Comme indiqué précédemment, cela s'applique à l'agrégation de k moyennes, régression linéaire et à la régression logistique. Elle s'applique également aux réseaux neuronaux profonds, l'apprentissage par renforcement et à la factorisation matricielle, pour ne citer que quelques exemples supplémentaires. OK, donc c'est l'idée de apprentissage et des fonctions de coût en général. Mais qu'est-ce que la fonction coût ou la fonction objective pour k-means ? En guise de remarque, rappelons que coût et objectif et perte et erreur sont tous synonymes. Si jamais j'utilise l'un de ces termes à la place de l'autre, ne vous inquiétez pas. Ils ont tous la même signification. Quoi qu'il en soit, si vous êtes à l'aise avec la somme des erreurs au carré pour une régression linéaire, vous serez également à l'aise avec la fonction de coût pour k-means, qui semble très similaire. OK, donc passons en revue cela lentement pour que vous compreniez chaque composante de l'objectif. abord, vous pouvez voir que c'est sous la forme d'une somme d'erreurs au carré. Nous additionnons les n points de données et nous quadrillons l'objet à l'intérieur. Notez que comme x sub n et m sub k sont des vecteurs, nous indiquons la distance euclidienne avec des barres doubles. C'est notre notation pour la norme. La partie qui prête à confusion pour certaines personnes, c'est l' étrange notation. C'est ce qu'on appelle une fonction d' indicateur. Il a la valeur 1 lorsque l'argument est vrai et zéro dans le cas contraire. Comme vous vous en souvenez, y sub n stocke l'identité de cluster du nième point de données. Nous pouvons donc interpréter cela comme suit. Bien que nous additionnions toutes les valeurs de k, une seule d'entre elles contribue au coût. C'est celui qui est égal à y de n. Et c'est parce que y de n assigne X de n à un cluster. Par conséquent, le coût est la distance au carré entre x sub n et la moyenne de l' agrégat auquel il appartient. J'espère donc que cela a du sens. Nous additionnons l'ensemble des n points de données. Pour chacun des n points de données, nous ajoutons une distance carrée unique. La distance quadratique que nous ajoutons est la distance au carré entre x sub n et la moyenne de l' agrégat auquel il appartient. Donc, si x sub n appartient au cluster k, alors on ajoute la distance au carré entre x de n et m sous k. En guise de remarque, vous pouvez voir que le petit k est la somme de un à un grand K. Dans le code. petits cas vont de zéro à k moins un. Cela est simplement dû au fonctionnement de la programmation en Python. Soyez donc conscient de cette différence. Lorsque nous écrivons des équations, il est généralement plus facile de compter à partir de un au lieu de zéro. Il convient également d'expliquer pourquoi cet objectif est logique. Pour comprendre cela, nous pouvons envisager différents scénarios. Examinons d'abord le scénario dans lequel les clusters sont très clairement définis. Tous les points de données appartenant à un cluster sont très proches du centre du cluster. Puisque c'est le cas, toutes les distances carrées seront très faibles. Par conséquent, la somme totale des distances au carré sera également très faible. Bon, maintenant, considérons un deuxième scénario. Cette fois, les clusters sont moins bien définis. Désormais, les points de données peuvent être très éloignés du centre du cluster. ce fait, les distances au carré sont plus grandes et, par conséquent, la somme totale des distances au carré sera plus grande. La fonction de coût ne favorise pas ce scénario car les clusters sont moins bien définis qu'auparavant. Considérons maintenant un troisième scénario dans lequel les attributions de clusters réelles sont erronées dans ce cas, car les points de données ne sont pas affectés au centre de cluster le plus proche. La distance quadratique entre chaque point de données et le centre du cluster auquel il est réellement affecté sera très grande. Comme ces distances sont très grandes, la somme totale des distances au carré sera également très importante. Il est donc clair que pour réduire les coûts, nous devons attribuer chaque point de données au centre du cluster le plus proche, minimisant ainsi la distance. Notez que grâce à l'algorithme k-means, nous pouvons écrire la fonction objective d'une manière alternative et peut-être que celle-ci sera plus facile à comprendre. Donc, dans ce forum, nous n'avons plus besoin de faire la somme de k. Nous savons que x de n sera assigné à deux, quel que soit le cluster dont il est le plus proche. Par conséquent, la partie interne du coût est simplement la distance au carré entre x de n et la moyenne la plus proche l'utilisation de la racine carrée de la distance euclidienne. Dans cette forme, nous prenons la distance minimale directement en utilisant la notation Min. une autre façon d'écrire l'objectif k-means. Nous pouvons définir une quantité appelée matrice de responsabilité, désignée par la lettre R. En gros, c'est la même chose que la fonction indicatrice que nous avons vue plus tôt. Mais maintenant, il s'agit d'une matrice au lieu d'une fonction, essentiellement r de n k, c'est-à-dire que la valeur de la ligne n, la colonne k est égale à un. Si x de n appartient au cluster k, sinon c'est zéro. Vous devriez être en mesure de vérifier que chaque ligne de notre correspondance à un seul point de données dans X ne contient qu'un seul et que le reste des valeurs doit être nul. C'est parce que x ne peut appartenir qu'à un seul cluster. En d'autres termes, x ne peut avoir qu' une seule identité de cluster. Encore une fois, nous sommes dans cette situation où même si nous additionnons toutes les valeurs de k, techniquement, en réalité, un seul de ces termes est zéro et les autres sont nuls parce que la valeur de responsabilité est nul lorsque x n'appartient pas à ces clusters. Un fait intéressant est que pour k-means, nous n'avons pas dérivé l'algorithme d'apprentissage de la fonction de coût. Tout ce que nous avons fait, c'est partir de deux faits simples sur clustering qui semblaient pertinents. Ensuite, nous avons découvert que si nous répétions ces deux faits simples en boucle, nous obtiendrions k-means. Pour résumer, ces deux faits sont les suivants. Premièrement, les identités des clusters doivent être attribuées de telle sorte que X de n appartienne au centre du cluster le plus proche. Et deuxièmement, les centres du cluster ne sont que la moyenne de tous les x qui lui appartiennent. Cependant, si l'on se fie à ce que nous savons des fonctions de coût, cela ne semble pas très rigoureux. Vous vous demandez peut-être si la régression linéaire et les réseaux de neurones peuvent dériver leurs règles d'apprentissage à partir de la fonction objective, pourquoi pouvons-nous faire cela pour la moyenne K ? À ce stade, nous ne sommes pas encore prêts à comprendre comment cet algorithme peut être dérivé. Mais si vous souhaitez en savoir plus, nous vous invitons à vous renseigner sur les modèles de mélanges gaussiens, également connus sous le nom de GMM. Gmm est ou un modèle probabiliste, qui peut être considéré comme une généralisation de l' agrégation des K-moyennes à travers le prisme du GMM, vous pouvez dériver l'algorithme de mise à jour pour les K-moyennes en termes de probabiliste quantités. Donc, si vous recherchez une dérivation plus rigoureuse, ce serait la prochaine étape à explorer. L'objectif principal de cette conférence est de comprendre l'idée que k-means a une fonction objective en premier lieu. Vous ne l'auriez pas su uniquement grâce à l'algorithme lui-même. C'est pourquoi nous n'en avons pas discuté jusqu'à présent. Le deuxième point est que cela nous permet d'écrire plus de code. En particulier, votre prochain exercice est le suivant. Prenez le code k-means que nous avions précédemment et ajoutez-en plus de code afin qu'après l'entraînement, nous puissions tracer la fonction objectif à chaque itération. Nous nous attendons à ce qu'à chaque itération du clustering k-means, l'objectif diminue de plus plus jusqu'à ce qu'il converge vers une valeur minimale. Veuillez donc écrire ce code et confirmer que c'est vrai. Très bien, donc c'est l'exercice. Bonne chance, et à bientôt lors de la prochaine conférence. 10. Objectif des moyens K (Code): Dans cette conférence, nous allons terminer le prochain exercice d' implémentation de k-means, qui consiste à tracer la fonction de coût pendant le processus de formation. Une fois cela fait, nous pouvons considérer notre implémentation de k-means est terminée. Comme vous le verrez, il s'agit simplement d'une simple modification du code que nous avons déjà écrit. Puisque nous avons terminé la plupart des travaux de la conférence précédente. Comme toujours, assurez-vous d'avoir terminé cet exercice avant de regarder cette conférence, car c'est votre devoir pour ce cours. En d'autres termes, ne cherchez pas les solutions pour les devoirs avant de les avoir terminés. OK, alors allons-y. abord, vous pouvez voir que toutes les parties initiales du code sont identiques. Les entrées sont les mêmes, les données sont les mêmes. Ce qui nous intéresse, c'est la boucle d'entraînement K-means. Nous allons donc faire défiler la page jusqu'à cette partie du carnet. Vous avez peut-être supposé que nous aurions une fonction distincte pour calculer le coût, mais il s'avère qu'il est plus simple à calculer dans notre boucle d'entraînement. Notez que nous allons utiliser la version du coût qui contient l'opérateur Min. Dans ce cas, il n'est pas nécessaire de faire une double sommation sur les n échantillons et les k clusters. La vraie raison pour laquelle vous devez additionner les k clusters est que vous devez déterminer à quel cluster appartient chaque point de données x de n. En K-means, cela est défini par la distance minimale entre x de n et chacune de ces moyennes. Cependant, vous vous souviendrez que nous l'avons déjà trouvé dans le code. Ainsi, si nous créions une fonction pour cela, nous répéterions le travail que nous avons déjà fait, ce qui serait inefficace. OK, donc regardons le code afin où nous avons déjà effectué ce calcul. abord, avant même d' entrer dans la boucle d'entraînement, nous allons créer deux nouvelles variables. Nous avons des disques Min, au pluriel, qui sont un tableau qui stockera les distances minimales pour les n échantillons. Ensuite, nous avons une liste pour stocker les coûts. Il s'agit d'une liste et non d'un tableau car le nombre d' itérations est variable. Cela va donc stocker le coût à chaque itération. OK, donc dans la boucle, examinons attentivement l'étape numéro un. Vous remarquerez que nous faisons deux boucles, l'une sur les n points de données et l'autre sur les k clusters. Pour chacun des k clusters, nous calculons la racine carrée de la distance euclidienne entre la moyenne de l'agrégat, le nième point de données. De plus, vous vous souviendrez que nous stockons cela dans une variable appelée min dist. C'est exactement ce dont nous avons besoin pour le coût. Par conséquent, tout ce que nous avons à faire, c'est que notre boucle interne soit complète. Enregistrez simplement le disque Men dans la matrice de disques minimum. Une fois la première étape terminée, nous avons maintenant tous les disques N Min, qui sont les distances euclidiennes au carré entre chaque point de données et le centre de cluster le plus proche. Comme vous le savez, le coût total n' est que la somme de ces éléments. Par conséquent, nous appelons la fonction Sum sur les hommes ainsi pour obtenir le coût, et nous l'enregistrons dans notre liste de voitures. Après cela, le reste du code est le même. Ainsi, une fois la formation terminée, nous pouvons appeler plt.plot pour tracer le coût par itération. Comme vous pouvez le constater, le coût par itération diminue à chaque itération et finit par converger vers une valeur minimale, comme promis. Et encore une fois, rappelons-nous pourquoi c'est important. C'est important de le faire chaque fois que vous entraînez un modèle à l'aide d'un algorithme itératif. Cela implique généralement de minimiser ou de maximiser certains objectifs. Par conséquent, vous souhaitez tracer cet objectif à chaque itération pour vérifier que votre code fonctionne comme prévu. En fait, parfois, comme dans le deep learning, même si votre code est correct, les choses peuvent tout de même échouer en raison d' une sélection sous-optimale des hyperparamètres. C'est donc une autre raison pour laquelle vous devez tracer le coût par itération. Si ce n'est pas le cas, vous ne savez pas si votre modèle a appris ce qu'il était censé apprendre simplement parce que votre code est correct. Cela ne signifie pas que les hyperparamètres que vous avez choisis sont également corrects. La leçon à tirer est que chaque fois que vous avez un algorithme itératif, il est toujours important de tracer le coût par itération.