Apprentissage Automatique et Réseaux Neuronaux - page 67

 

2.1 Introduction à NN (L02 : Méthodes du plus proche voisin)



2.1 Introduction à NN (L02 : Méthodes du plus proche voisin)

Bonjour à tous et bienvenue à nouveau ! J'espère que vous avez passé une excellente première semaine. Récapitulons brièvement ce que nous avons couvert. Dans la leçon 1, nous avons présenté le concept d'apprentissage automatique et discuté de la question la plus courante, qui concernait le projet de classe. Je ferai bientôt une annonce séparée sur le projet. Une chose que j'aimerais mentionner est que j'ai activé une fonction sur Piazza qui vous permet de trouver des membres d'équipe pour le projet. Plus de détails seront partagés dans une annonce séparée.

Passons maintenant à la leçon 2. Aujourd'hui, nous nous concentrerons principalement sur l'algorithme k-plus proche voisin (KNN), qui est un algorithme d'apprentissage automatique classique et encore largement utilisé aujourd'hui. Je considère qu'il s'agit de l'introduction la plus douce et la plus simple à l'apprentissage automatique, car elle nous permet de comprendre le fonctionnement des algorithmes d'apprentissage automatique. Bien que KNN ne soit plus l'algorithme le plus populaire, je vous recommande fortement de l'inclure dans vos projets. Il sert de référence de performance pour les tâches de classification et même pour prédire les sorties continues. KNN peut fournir des informations sur la précision des prédictions et l'efficacité des calculs.

En parlant d'aspects informatiques, tout en expliquant le fonctionnement de KNN, nous aborderons également le concept de notation Big O. Cette notation est couramment utilisée en informatique pour analyser l'efficacité de différents algorithmes. Bien que cela puisse sembler technique, comprendre la notation Big O est utile non seulement pour l'apprentissage automatique, mais également pour la programmation générale.

Vers la fin de cette conférence, je montrerai quelques exemples en Python pour vous montrer comment utiliser KNN. Cependant, veuillez noter qu'il s'agira d'un bref aperçu et que nous approfondirons Python, y compris l'installation et les principales bibliothèques telles que NumPy et scikit-learn, dans la leçon 3.

Alors, commençons avec la conférence 2 ! Nous nous concentrerons principalement sur les méthodes du plus proche voisin, y compris une introduction à KNN. J'ai structuré la conférence en six parties pour la rendre plus accessible :

  1. Applications des méthodes du plus proche voisin : nous explorerons les applications réelles de KNN, telles que l'exploration de données d'utilisation du Web, la biométrie, la classification d'images et l'analyse de protéines. Ces exemples aideront à motiver le sujet.

  2. Méthode du plus proche voisin : avant de plonger dans KNN, nous allons discuter du cas le plus simple, qui est la méthode du plus proche voisin. Cette méthode consiste à rechercher le point de données le plus similaire à un point de requête et à utiliser son étiquette comme prédiction.

  3. Limite de décision de la méthode du plus proche voisin : nous examinerons comment la méthode du plus proche voisin détermine la limite de décision, ce qui permet de mieux comprendre son fonctionnement interne.

  4. Introduction aux méthodes K-plus proches voisins : nous allons passer à KNN, où nous considérons plusieurs voisins les plus proches au lieu d'un seul. Nous couvrirons les classificateurs et les régresseurs K plus proches voisins.

  5. Complexité d'exécution Big O des algorithmes K-plus proches voisins : nous explorerons l'efficacité de calcul de KNN en utilisant la notation Big O. Ce sujet est crucial pour analyser les performances des algorithmes.

  6. Améliorer les algorithmes du K-plus proche voisin : dans cette partie, je présenterai des idées et des astuces pour améliorer les performances de KNN. Cette section se concentre sur l'optimisation de l'algorithme.

Après avoir couvert ces parties conceptuelles, nous passerons à l'application de KNN en Python. Bien que cela puisse être la partie la plus agréable pour certains, il est essentiel de saisir les concepts avant de plonger dans la mise en œuvre pratique.

Dans la prochaine conférence, Conférence 3, nous approfondirons l'installation de Python et couvrirons les principales bibliothèques, y compris NumPy et scikit-learn. Alors, assurez-vous de rester à l'écoute! Commençons la leçon 2, où nous explorons les méthodes du plus proche voisin et l'algorithme du K-plus proche voisin et nous continuons ce processus pour tous les points de données de l'ensemble d'apprentissage. À la fin de la boucle, nous aurons identifié le point de données le plus proche du point de requête.

Après avoir trouvé le point le plus proche, nous utilisons son étiquette comme étiquette prédite pour le point de requête. Dans les problèmes de classification, l'étiquette est souvent une valeur catégorielle représentant une classe ou une catégorie. Dans les problèmes de régression, l'étiquette est une valeur continue.

Pour résumer l'étape de prédiction de l'algorithme du plus proche voisin :

  1. Initialisez la distance la plus proche à l'infini et le point le plus proche à Aucun.
  2. Pour chaque point de données de l'ensemble d'apprentissage :
    • Calculez la distance entre le point de données actuel et le point de requête.
    • Si la distance est inférieure à la distance la plus proche :
      • Mettre à jour la distance la plus proche avec la distance actuelle.
      • Définissez le point le plus proche comme point de données actuel.
  3. Utilisez l'étiquette du point le plus proche comme étiquette prédite pour le point de requête.

Maintenant que nous avons discuté de la méthode du plus proche voisin, passons au cas plus général des k plus proches voisins. L'algorithme k plus proche voisin étend le concept de recherche du point de données le plus proche à la recherche des k points de données les plus proches. Au lieu de ne considérer que le voisin le plus proche, nous considérons les k points de données de l'ensemble d'apprentissage les plus proches du point de requête.

Dans le cas de la classification, l'étiquette prédite est déterminée par un vote majoritaire parmi les k plus proches voisins. Le vote de chaque voisin est pondéré de manière égale et la classe avec le plus grand nombre de votes devient l'étiquette prédite.

Pour les problèmes de régression, l'étiquette prédite est souvent la moyenne ou la médiane des étiquettes des k plus proches voisins. La méthode spécifique de combinaison des étiquettes dépend de la nature du problème et du résultat souhaité.

Pour illustrer la limite de décision de la méthode du plus proche voisin, considérons un espace de caractéristiques bidimensionnel. Nous avons deux classes, la classe 0 et la classe 1, représentées par des symboles différents (par exemple, des triangles et des carrés). La frontière de décision est la ligne ou la courbe qui sépare les régions de différentes classes.

Dans le cas de la méthode du plus proche voisin, la frontière de décision suit le contour des points de données d'apprentissage. Chaque point de l'espace des caractéristiques est classé en fonction de l'étiquette du point de données d'apprentissage le plus proche. La limite de décision n'est pas une courbe lisse mais plutôt un ensemble de petites régions autour de chaque point d'apprentissage.

Lors de l'utilisation de la méthode des k plus proches voisins avec k supérieur à 1, la frontière de décision devient plus lisse. Au fur et à mesure que nous considérons plus de points voisins, l'influence des points de données d'entraînement individuels diminue, ce qui entraîne une frontière plus généralisée. La limite de décision est déterminée par le vote majoritaire des k plus proches voisins, conduisant à une séparation plus douce et plus continue entre les classes.

Comprendre le concept de frontière de décision est crucial pour évaluer les performances et les limites de l'algorithme du k plus proche voisin. La forme et la complexité de la limite de décision peuvent avoir un impact sur la capacité de l'algorithme à classer ou à prédire avec précision de nouveaux points de données.

En plus de discuter de l'algorithme du k plus proche voisin, nous aborderons également le sujet de l'efficacité de l'algorithme. La notation Big O est un moyen courant d'analyser et de comparer l'efficacité de différents algorithmes. Il fournit une mesure de la complexité temporelle de l'algorithme, indiquant comment le temps d'exécution augmente à mesure que la taille de l'entrée augmente.

L'analyse de la complexité d'exécution de l'algorithme k plus proche voisin nous aide à comprendre son efficacité de calcul. Nous allons brièvement explorer ce sujet et discuter de la façon dont l'efficacité de l'algorithme peut avoir un impact sur ses performances sur de grands ensembles de données.

Vers la fin de cette conférence, nous plongerons dans des exemples pratiques d'implémentation de l'algorithme k plus proche voisin en utilisant Python. Nous montrerons comment utiliser l'algorithme pour les tâches de classification et de régression, en présentant son application dans des scénarios réels. Cependant, avant de se lancer dans l'implémentation, il est essentiel de saisir les concepts et principes sous-jacents des k plus proches voisins.

Pour récapituler, dans la deuxième leçon, nous avons couvert la méthode du plus proche voisin comme un cas simple d'algorithmes du plus proche voisin. Nous avons exploré comment l'algorithme détermine le point de données le plus proche d'un point de requête et comment il utilise l'étiquette du point le plus proche pour la prédiction. Nous avons également introduit le concept de frontière de décision et sa forme dans la méthode du plus proche voisin. De plus, nous avons discuté de l'algorithme k plus proche voisin, qui considère plusieurs voisins les plus proches au lieu d'un seul. Nous avons mentionné comment l'étiquette prédite est déterminée par le vote majoritaire dans les problèmes de classification et la moyenne ou la valeur médiane dans les problèmes de régression. De plus, nous avons brièvement abordé la notation Big O et son application dans l'analyse de l'efficacité des algorithmes, y compris l'algorithme k plus proche voisin.

Dans la prochaine conférence, Conférence 3, nous nous plongerons dans l'implémentation de l'algorithme k plus proche voisin en Python. Nous couvrirons les étapes, les bibliothèques et les techniques nécessaires pour utiliser efficacement cet algorithme. Alors, assurez-vous de me rejoindre lors de la prochaine conférence !

2.1 Introduction to NN (L02: Nearest Neighbor Methods)
2.1 Introduction to NN (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This first video of lecture 2 introduces nearest neighbor methods, going over some applications of nearest neighbors and covering the 1-nearest neighbor algo...
 

2.2 Limite de décision du voisin le plus proche (L02 : méthodes du plus proche voisin)



2.2 Limite de décision du voisin le plus proche (L02 : méthodes du plus proche voisin)

Dans cette deuxième vidéo, nous examinerons la limite de décision de l'algorithme du plus proche voisin, en nous concentrant spécifiquement sur le classificateur du plus proche voisin. Nous utiliserons un ensemble de données bidimensionnel à des fins d'illustration car il est plus facile à visualiser pour les humains.

L'ensemble de données se compose de cinq points de données représentés par des points bleus. Zoomons sur les points A et B et explorons la frontière de décision entre eux. La frontière de décision est une ligne ou une frontière qui sépare les points A et B. Si nous ajustons un modèle du voisin le plus proche à l'ensemble de données, à quoi ressemblerait cette frontière de décision ?

Pour répondre à cette question, nous devons comprendre le concept d'équidistance. Tout point situé sur la limite de décision doit être équidistant des points A et B. Prenez un moment pour mettre la vidéo en pause et réfléchissez à ce à quoi ressemblerait la limite de décision. La limite de décision pour les points A et B serait une ligne tracée à l'aide d'une métrique de distance euclidienne. Tout point sur cette ligne est équidistant des points A et B, ce qui signifie que la distance entre le point sur la ligne et les points A et B est la même partout sur la ligne. Passons maintenant aux points A et C et déterminons leur frontière de décision. La frontière de décision pour les points A et C serait une ligne perpendiculaire à la ligne reliant A et C. Chaque point de cette ligne est équidistant des points A et C.

Nous pouvons poursuivre cet exercice pour toutes les paires de points du jeu de données, telles que C et D, afin de déterminer leurs limites de décision respectives. En assemblant toutes ces frontières de décision pour chaque paire de points, nous obtenons la frontière de décision du classificateur le plus proche voisin, comme indiqué dans le coin inférieur droit.

Si nous regardons attentivement le diagramme, nous pouvons remarquer qu'il ressemble à un diagramme de Voronoi ou à une tessellation de Voronoi. Ce diagramme divise le jeu de données en régions, chaque région correspondant à la limite de décision entre une paire de points. Chaque point d'une ligne frontière est équidistant des deux points adjacents.

Cependant, nous n'avons pas encore fini. Dans la diapositive précédente, nous n'avons montré que les régions de décision sans tenir compte des étiquettes de classe réelles. Réintroduisons maintenant les étiquettes de classe dans l'ensemble de données. Les triangles représentent la classe 1 et les carrés représentent la classe 0.

Pour obtenir les régions de décision que l'algorithme du plus proche voisin utiliserait pour la classification, nous devons prendre l'union des régions appartenant à la même étiquette de classe. Par exemple, les triangles rouges ont une région de décision délimitée par les frontières correspondant aux points les plus proches des triangles rouges. De même, les carrés bleus ont leur propre région de décision. En remplissant ces régions avec leurs couleurs respectives, nous obtenons la frontière de décision du classificateur le plus proche voisin.

Pour tester votre compréhension, posons une question simple. Compte tenu des cinq points de données de l'ensemble de données, quel point est le plus proche du point d'interrogation ? Mettez la vidéo en pause pendant un moment et réfléchissez à votre réponse. Pour répondre à cette question, il faut connaître la mesure de distance utilisée pour déterminer la proximité. Dans ce cas, nous utilisons la distance euclidienne, mais d'autres mesures de distance peuvent également être utilisées. Selon la mesure de distance choisie, le point le plus proche du point d'interrogation peut varier.

Dans la vidéo, deux mesures de distance ont été démontrées : la distance euclidienne et la distance de Manhattan. La distance euclidienne mesure la distance en ligne droite entre deux points, tandis que la distance de Manhattan mesure la distance en additionnant les différences absolues entre les coordonnées.

De plus, la vidéo mentionne brièvement la distance de Mahalanobis, qui tient compte de la distribution des caractéristiques. Il considère la distance d'un point de données à sa distribution en termes d'écarts types. La similitude cosinus, qui mesure l'angle entre deux vecteurs, est également mentionnée comme mesure de distance.

En pratique, le choix de la mesure de distance dépend du problème spécifique et des caractéristiques de l'ensemble de données. Il peut être considéré comme un hyperparamètre de l'algorithme du plus proche voisin qui doit être soigneusement choisi en fonction du problème à résoudre.

Parlons maintenant de l'algorithme du k plus proche voisin, qui est une extension de l'algorithme du plus proche voisin. Dans l'algorithme des k plus proches voisins, au lieu de ne considérer que le point le plus proche, nous considérons les k points les plus proches du point de requête. La limite de décision de l'algorithme du k plus proche voisin est déterminée par un mécanisme de vote. Chaque point dans la région de décision d'une classe particulière contribue au vote pour cette classe. La classe avec le plus grand nombre de votes parmi les k voisins les plus proches est affectée comme classe prédite pour le point de requête.

Par exemple, supposons que nous ayons un point de requête représenté par une étoile verte. Si nous utilisons un algorithme des 3 plus proches voisins, nous regardons les trois points les plus proches du point de requête. Si deux de ces points appartiennent à la classe 0 et un appartient à la classe 1, le vote majoritaire attribuerait le point de requête à la classe 0. De même, si nous augmentons la valeur de k à 5, nous considérerions les cinq points les plus proches de la requête indiquer. Si trois de ces points appartiennent à la classe 1 et deux appartiennent à la classe 0, le vote majoritaire attribuerait le point de requête à la classe 1.

Le choix de la valeur de k est une considération importante dans l'algorithme du k plus proche voisin. Une valeur plus petite de k peut conduire à un surajustement, où l'algorithme devient trop sensible aux fluctuations locales des données. D'autre part, une valeur plus élevée de k peut entraîner un sous-ajustement, où la frontière de décision devient trop lisse et ne parvient pas à capturer des détails plus fins. Comme pour tout algorithme, il y a des compromis à faire, et le choix de k dépend de l'ensemble de données et du problème à résoudre. Il est courant d'expérimenter différentes valeurs de k et d'utiliser des techniques telles que la validation croisée pour trouver la valeur optimale.

L'algorithme du k plus proche voisin étend l'algorithme du plus proche voisin en considérant les k points les plus proches. La frontière de décision est déterminée par un mécanisme de vote basé sur les étiquettes de classe des k plus proches voisins. Le choix de k est un hyperparamètre qui doit être soigneusement sélectionné pour équilibrer le surajustement et le sous-ajustement.

2.2 Nearest neighbor decision boundary (L02: Nearest Neighbor Methods)
2.2 Nearest neighbor decision boundary (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This second video covers the intuition behind the 1-nearest neighbor's decision boundary. Also, it lists some of the common distance measures.-------This vid...
 

2.3 K-voisins les plus proches (L02 : Méthodes des plus proches voisins)



2.3 K-voisins les plus proches (L02 : Méthodes des plus proches voisins)

Dans la vidéo précédente, j'ai mentionné que toutes les mesures de distance discutées précédemment ne sont pas des métriques. Par exemple, la similarité cosinus n'est pas considérée comme une métrique appropriée car elle ne satisfait pas l'inégalité triangulaire. L'inégalité triangulaire indique que la distance entre deux points de données, notés A et C, doit être inférieure ou égale à la somme des distances entre A et B, et B et C. Cependant, bien qu'il ne s'agisse pas d'une métrique appropriée, le cosinus la similarité est toujours très utile en pratique dans des contextes spécifiques.

Passons maintenant à l'approche des k-plus proches voisins (k-NN), qui est une extension de la méthode du plus proche voisin dont nous avons parlé précédemment. Le modèle k-NN est relativement simple car il généralise la méthode du plus proche voisin en considérant plusieurs voisins les plus proches au lieu d'un seul.

Dans cette vidéo, je présente un exemple de modèle k-NN. Nous avons deux caractéristiques, x1 et x2, et un ensemble de données de jouets avec différentes classes représentées par des croix, des cercles et des triangles. Notre objectif est de classer un point de données indiqué par un point d'interrogation au centre. Pour faire des prédictions, nous considérons les points de données dans un certain rayon autour du point d'interrogation, en utilisant une mesure de distance euclidienne.

Maintenant, la question est : Quelle serait la valeur de k dans cette approche k-NN pour l'exemple donné ? Si vous prenez un moment pour réfléchir, vous vous rendrez compte que k est 5 parce que nous considérons les cinq points de données les plus proches du point que nous voulons classer.

En considérant les cinq voisins les plus proches, nous comptons les occurrences de chaque classe. Par exemple, si nous trouvons un triangle, un cercle et trois croix, le vote majoritaire attribue l'étiquette de classe prédite au point de requête. Dans ce cas, l'étiquette de classe prédite serait un triangle car elle apparaît le plus parmi les cinq voisins les plus proches.

Bien que nous ayons techniquement un "vote à la majorité" dans k-NN, il est communément appelé "vote à la majorité" dans la pratique. Lorsqu'il y a égalité dans le processus de vote, où plusieurs classes ont le même nombre, les progiciels sélectionnent généralement une étiquette au hasard ou choisissent l'étiquette avec l'indice d'étiquette de classe inférieur.

Pour fournir une définition plus formelle du vote majoritaire, considérons le sous-ensemble D sub k, qui représente les k plus proches voisins. Nous définissons le vote majoritaire comme l'étiquette de classe (y) qui maximise la somme des fonctions delta. La fonction delta renvoie 1 si a est égal à b (étiquettes correspondantes) et 0 sinon. En additionnant les valeurs delta pour chaque voisin, nous pouvons trouver l'étiquette de classe qui se produit le plus fréquemment.

Pour l'analyse de régression utilisant k-NN, le processus est plus simple. Au lieu d'étiquettes de classe, nous traitons des valeurs cibles continues. La prédiction (h) pour la régression k-NN est la moyenne des valeurs cibles des k plus proches voisins.

Dans la vidéo suivante, nous aborderons le sujet de l'analyse Big O, qui consiste à analyser la complexité d'exécution de l'algorithme des k plus proches voisins. Comprendre l'efficacité d'un algorithme est crucial pour évaluer ses performances et son évolutivité. L'analyse Big O fournit un moyen d'estimer la croissance du temps d'exécution de l'algorithme à mesure que la taille de l'entrée augmente. Cette analyse nous aide à prendre des décisions éclairées sur la sélection et l'optimisation des algorithmes.

Pour effectuer une analyse Big O sur l'algorithme des k plus proches voisins, nous devons prendre en compte deux facteurs principaux : le nombre d'instances d'entraînement (n) et le nombre de caractéristiques (d). Ces facteurs déterminent le coût de calcul de la recherche des k voisins les plus proches pour un point de requête donné.

Dans l'implémentation la plus simple des k plus proches voisins, nous calculerions la distance entre le point de requête et chaque instance d'apprentissage, ce qui donnerait une complexité temporelle de O(nd). Cela signifie que le temps d'exécution de l'algorithme augmente de manière linéaire avec le nombre d'instances d'entraînement et le nombre de fonctionnalités.

Cependant, il existe des moyens d'optimiser l'algorithme des k plus proches voisins et de réduire son coût de calcul. Une approche courante consiste à utiliser des structures de données qui accélèrent la recherche des plus proches voisins, comme les kd-trees ou les ball trees. Ces structures de données partitionnent les instances de formation de manière hiérarchique, permettant des recherches de voisins plus efficaces.

En utilisant ces structures de données, nous pouvons atteindre un temps de recherche réduit de O(log n) ou même O(1) dans certains cas. Cette amélioration accélère considérablement l'algorithme, en particulier pour les grands ensembles de données.

Il est important de noter que le choix de la métrique de distance affecte également la complexité d'exécution de l'algorithme. Certaines métriques de distance, telles que la distance euclidienne, peuvent être calculées efficacement, tandis que d'autres, comme la distance de Manhattan, peuvent nécessiter davantage de ressources de calcul.

En plus de la complexité temporelle, nous devons également considérer la complexité spatiale de l'algorithme des k plus proches voisins. La complexité de l'espace fait référence à la quantité de mémoire requise pour stocker les instances d'apprentissage et toutes les structures de données supplémentaires utilisées pour une recherche efficace des voisins. La complexité spatiale est typiquement O(nd) ou O(n) pour des implémentations optimisées.

Dans l'ensemble, comprendre les complexités d'exécution et d'espace de l'algorithme des k plus proches voisins nous aide à évaluer son évolutivité et à prendre des décisions éclairées lorsque nous travaillons avec de grands ensembles de données ou des applications en temps réel.

Dans la vidéo suivante, nous explorerons ces concepts plus en détail et fournirons une analyse plus détaillée de l'efficacité de l'algorithme. Restez à l'écoute pour une discussion approfondie sur l'analyse Big O pour les k plus proches voisins.

2.3 K-nearest neighbors (L02: Nearest Neighbor Methods)
2.3 K-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This third video extends the 1-nearest neighbor concepts to the k-nearest neighbors method for classification and regression.-------This video is part of my ...
 

2.4 Big O des K plus proches voisins (L02 : Nearest Neighbor Methods)



2.4 Big O des K plus proches voisins (L02 : Nearest Neighbor Methods)

Maintenant, plongeons dans le sujet de la complexité d'exécution, en nous concentrant spécifiquement sur la notation Big O et la complexité d'exécution de l'algorithme des k plus proches voisins (KNN).

La notation Big O est un concept utilisé en informatique pour analyser l'efficacité des algorithmes. Il fait principalement référence à la complexité d'exécution, qui détermine le comportement de la vitesse d'exécution d'un algorithme à mesure que la taille de l'entrée augmente. De plus, la notation Big O peut également être utilisée pour analyser l'efficacité de la mémoire d'un algorithme, indiquant la quantité de mémoire requise pour son exécution.

Dans le cas de KNN, l'étape d'apprentissage consiste à enregistrer l'ensemble de données d'apprentissage, ce qui peut être gourmand en mémoire. Le stockage d'un ensemble de données d'entraînement volumineux peut nécessiter une quantité importante de RAM ou d'espace de stockage sur le disque dur. Bien que l'espace de stockage soit devenu moins cher au fil du temps, il peut toujours poser des limites lorsqu'il s'agit de jeux de données volumineux, tels que des millions d'images.

Cependant, concentrons-nous sur la complexité d'exécution de KNN lors de l'étape de prédiction. Avant de continuer, introduisons brièvement la notation Big O. C'est une notation utilisée pour décrire l'efficacité des algorithmes, généralement désignée par des fonctions. Ces fonctions représentent la complexité d'exécution des algorithmes, avec des exemples courants tels que O(1) (constante), O(log n) (logarithmique), etc. Ces fonctions indiquent comment le temps d'exécution d'un algorithme évolue avec la taille d'entrée (n).

Pour mieux comprendre la complexité d'exécution, nous pouvons organiser les fonctions par ordre croissant d'efficacité, de O (1) à la complexité exponentielle. Dans ce contexte, une fonction constante est idéale car elle n'est pas affectée par la taille de l'entrée, garantissant une vitesse d'exécution constante. Les fonctions logarithmiques et linéaires sont également efficaces, mais pas aussi idéales que les fonctions constantes. Cependant, à mesure que la complexité augmente en quadratique, cubique et exponentielle, l'efficacité de l'algorithme se détériore considérablement. La complexité exponentielle est particulièrement préjudiciable et doit être évitée, en particulier lorsqu'il s'agit de grands ensembles de données en apprentissage automatique.

Pour visualiser la complexité d'exécution en termes de n (taille d'entrée), un tracé peut être créé, où l'axe des x représente n et l'axe des y représente la complexité de l'algorithme. Lorsque n augmente, certaines fonctions présentent des performances de plus en plus médiocres. Il est essentiel d'éviter les algorithmes de complexité élevée, tels que quadratique, cubique ou exponentiel, car ils peuvent conduire à des temps d'exécution trop longs.

Maintenant, explorons comment nous dérivons la notation Big O pour une fonction donnée. Par exemple, considérons une fonction quadratique f(x) = ax^2 + bx + c. Lors de la dérivation de la notation Big O, nous nous concentrons sur le terme dominant qui croît le plus rapidement. Dans ce cas, le terme dominant est x^2. Par conséquent, la notation Big O pour cette fonction serait O(x^2), indiquant une complexité quadratique.

Considérons une autre fonction pour illustrer davantage ce processus. Supposons que nous ayons une fonction f(x) = ax(log x). Encore une fois, nous identifions le terme dominant, qui est x(log x). Ici, nous négligeons le facteur constant a et nous concentrons sur le terme x(log x). Par conséquent, la notation Big O pour cette fonction serait O (x log x), indiquant une complexité log-linéaire.

Il convient de mentionner que la base du logarithme (par exemple, log base 2 ou logarithme naturel) n'a pas d'impact sur la notation Big O. Différentes bases introduisent uniquement un facteur d'échelle, qui peut être ignoré lors de la détermination de la complexité d'exécution. Par conséquent, pour simplifier, nous considérons généralement le logarithme naturel (log) sans spécifier la base.

Pour renforcer davantage votre compréhension, examinons une fonction Python pour la multiplication matricielle, démontrant l'application de la notation Big O aux algorithmes de calcul. La fonction effectue une multiplication matricielle entre deux matrices, A et B. Bien que l'implémentation soit intentionnellement inefficace à des fins d'illustration, elle nous permet d'analyser sa complexité d'exécution.

La fonction commence par initialiser une matrice vide C de taille nxn, où n est la dimension des matrices d'entrée. Ensuite, il parcourt chaque ligne i de la matrice A et chaque colonne j de la matrice B. Dans les boucles imbriquées, il calcule le produit scalaire de la ligne i de la matrice A et de la colonne j de la matrice B, stockant le résultat dans la cellule correspondante de matrice C

Voici le code Python pour la fonction de multiplication matricielle :

def matrix_multiplication(A, B):
    n = len(A)  # Assuming square matrices of size n x n
    C = [[ 0 ] * n for _ in range(n)]  # Initialize matrix C
    
     for i in range(n):
         for j in range(n):
             for k in range(n):
                C[i][j] += A[i][k] * B[k][j]  # Calculate dot product and update C[i][j]
    
    return C
Pour analyser la complexité d'exécution de cette fonction, décomposons-la. La boucle externe itère n fois, représentant les lignes de la matrice A. La deuxième boucle itère également n fois, représentant les colonnes de la matrice B. À l'intérieur de ces boucles, il y a une boucle imbriquée qui itère également n fois, représentant le calcul du produit scalaire. Ainsi, la complexité globale est O(n^3), indiquant la complexité cubique.

Il est important de noter que la complexité cubique n'est pas idéale, en particulier pour les grandes valeurs de n. À mesure que la taille de l'entrée augmente, le temps d'exécution de cette fonction augmente considérablement. Par conséquent, pour les matrices plus grandes, un algorithme plus efficace doit être utilisé pour effectuer la multiplication matricielle, tel que l'algorithme de Strassen ou d'autres approches optimisées qui permettent d'obtenir de meilleures complexités d'exécution, telles que O (n ^ 2,81).

En résumé, la compréhension de la complexité d'exécution des algorithmes, notée par la notation Big O, est cruciale pour évaluer leur efficacité et leur évolutivité. Cela nous permet d'estimer les performances d'un algorithme à mesure que la taille de l'entrée augmente, ce qui nous permet de choisir les algorithmes les plus appropriés pour différents scénarios et d'éviter ceux qui sont inefficaces pour les grands ensembles de données.

2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
In this video, we are looking at the Big-O runtime complexity of a naive implementation of k-nearest neighbors-------This video is part of my Introduction of...
 

2.5 Amélioration des k-plus proches voisins (L02 : Méthodes des plus proches voisins)



2.5 Amélioration des k-plus proches voisins (L02 : Méthodes des plus proches voisins)

Dans cette vidéo, nous approfondirons le sujet de l'amélioration de l'algorithme des K plus proches voisins grâce à certaines modifications et à la prise en compte des hyperparamètres. Dans la vidéo précédente, nous avons discuté de l'utilisation d'une file d'attente prioritaire comme structure de données pour améliorer l'efficacité de la recherche des voisins les plus proches. Cette file d'attente prioritaire permet d'éviter de rechercher l'intégralité de l'ensemble d'apprentissage pour chaque nouveau voisin.

Explorons maintenant une autre approche pour améliorer les performances de calcul de l'algorithme des K plus proches voisins en utilisant des structures de données de partitionnement d'espace. L'une de ces structures de données est le tas, qui sert de structure de partitionnement d'espace pour accélérer le processus de recherche sur les exemples d'apprentissage. En divisant l'ensemble de données en sous-ensembles au sein de la structure de données, nous pouvons minimiser le besoin de calculs de distance pour chaque point de données d'apprentissage.

Une méthode de partitionnement de l'espace est appelée compartimentage. Cela implique de diviser le jeu de données en sous-ensembles ou compartiments en fonction de critères spécifiques, tels que des compartiments de taille égale ou des limites définies par des mesures d'entités. Ce faisant, nous pouvons éviter de rechercher l'intégralité de l'ensemble d'apprentissage et nous concentrer uniquement sur les points pertinents dans un compartiment particulier lors de la recherche de voisins d'un point de requête. Cette optimisation améliore considérablement l'efficacité du processus de recherche.

Une autre technique de partitionnement de l'espace est l'arbre KD, qui construit des hypercubes pour diviser l'ensemble de données. Cette méthode diffère du bucketing mais partage l'objectif d'améliorer l'efficacité de la recherche en réduisant le nombre de calculs de distance. Les arbres KD sont particulièrement adaptés aux jeux de données avec un grand nombre de fonctionnalités.

De même, l'algorithme d'arbre à billes crée des hypersphères en tant que partitions d'espace. Le choix entre les arbres KD et les arbres à billes dépend des caractéristiques du jeu de données. Pour les ensembles de données à haute dimensionnalité, l'algorithme de l'arbre à boules est souvent préféré. Il convient de noter que la bibliothèque d'apprentissage automatique scikit-learn, un outil largement utilisé, offre différentes options pour l'algorithme du classificateur K-plus proche voisin, sélectionnant automatiquement l'algorithme de partitionnement d'espace le plus efficace en fonction de l'ensemble de données. Cependant, vous pouvez remplacer manuellement ce paramètre si vous le souhaitez.

De plus, nous pouvons améliorer les performances des K plus proches voisins en utilisant des techniques de réduction de dimensionnalité. La réduction de la dimensionnalité se présente sous deux formes : l'extraction de caractéristiques et la sélection de caractéristiques. L'extraction d'entités implique la transformation ou la combinaison d'entités existantes pour créer une représentation de dimension inférieure des données. D'autre part, la sélection de fonctionnalités implique de sélectionner un sous-ensemble des fonctionnalités disponibles sans en créer de nouvelles. En réduisant le nombre de caractéristiques, nous pouvons réduire le coût de calcul des calculs de distance et potentiellement améliorer l'efficacité de l'algorithme. De plus, les ensembles de données de grande dimension souffrent souvent de la malédiction de la dimensionnalité, ce qui peut entraîner de mauvaises performances de généralisation en raison d'un surajustement. Ainsi, la réduction de la dimensionnalité peut également aider à atténuer ce problème.

Pour optimiser les performances de calcul des K plus proches voisins, nous pouvons explorer des techniques d'édition ou d'élagage. L'élagage consiste à supprimer les points de données inutiles de l'ensemble d'apprentissage sans affecter la limite de décision. En éliminant les points redondants, nous pouvons réduire le nombre de comparaisons et de calculs de distance, rendant l'algorithme plus efficace. De même, la création de prototypes implique le remplacement d'une région dense de points de données d'apprentissage par un seul point représentatif. Cette stratégie réduit les besoins en espace de stockage tout en préservant la précision prédictive de l'algorithme.

De plus, le réglage des hyperparamètres joue un rôle crucial dans l'amélioration des performances prédictives de l'algorithme des K plus proches voisins. Les hyperparamètres sont des paramètres réglables qui affectent le comportement de l'algorithme mais ne sont pas appris à partir des données d'apprentissage. Ils incluent la valeur de K (le nombre de voisins à prendre en compte), la mise à l'échelle des entités, la mesure de distance utilisée et le schéma de pondération pour le calcul de la distance. Le choix de valeurs appropriées pour ces hyperparamètres peut avoir un impact significatif sur les performances de l'algorithme. Cependant, il est essentiel d'être prudent et d'éviter de surajuster le modèle aux données d'apprentissage.

En tirant parti des structures de données de partitionnement spatial, en utilisant des techniques de réduction de la dimensionnalité, en appliquant des méthodes d'édition et d'élagage et en affinant les hyperparamètres, nous pouvons améliorer à la fois les performances de calcul et de prédiction de l'algorithme des K plus proches voisins.

2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This video summarizes some of the common tricks for making k-nearest neighbors more efficient in terms of computational performance and predictive performanc...
 

2.6 K-voisins les plus proches en Python (L02 : Méthodes des voisins les plus proches)



2.6 K-voisins les plus proches en Python (L02 : Méthodes des voisins les plus proches)

Après une discussion approfondie sur les K voisins les plus proches, le texte présente un exemple Python qui présente l'implémentation des K voisins les plus proches à l'aide de la populaire bibliothèque scikit-learn. L'auteur reconnaît que tous les aspects ne sont peut-être pas immédiatement clairs et assure aux lecteurs que les futures conférences approfondiront Python, NumPy et scikit-learn. Néanmoins, l'exemple fourni sert de teaser pour offrir une perspective descendante sur le fonctionnement de ces outils.

Pour soutenir l'exemple d'implémentation, l'auteur se réfère à un site Web où les lecteurs peuvent trouver des exemples de code. De plus, l'auteur explique le processus de téléchargement d'un référentiel à partir de GitHub en utilisant soit le fichier zip, soit en le clonant. Soulignant l'importance de GitHub en tant qu'outil du monde réel, l'auteur suggère qu'avoir un profil GitHub et partager des projets peut être avantageux pour présenter son travail à des employeurs potentiels.

Le texte fournit ensuite des instructions détaillées sur la manière de cloner un référentiel à l'aide du lien GitHub et de la commande "git clone". Tout en reconnaissant que le processus peut varier légèrement pour les utilisateurs de Windows, l'auteur recommande de rechercher des tutoriels ou de l'aide du TA (assistant pédagogique). Une fois le référentiel cloné avec succès, l'auteur demande aux lecteurs de naviguer jusqu'au dossier et explique que les mises à jour peuvent être obtenues à l'aide de la commande "git pull".

Passant aux exemples de code, l'auteur montre comment ouvrir un Jupyter Notebook, en particulier Jupyter Lab, et exécuter des commandes étape par étape. Pour éviter de submerger les lecteurs, l'auteur souligne l'importance d'effacer les sorties après chaque exécution. De plus, l'auteur mentionne l'utilité de l'extension de filigrane dans Jupyter Notebooks, qui affiche les versions des progiciels utilisés. Ces informations facilitent le dépannage et garantissent la reproductibilité des résultats. Des packages essentiels tels que Pandas, NumPy, Matplotlib et scikit-learn sont installés pour faciliter la mise en œuvre.

Ensuite, l'auteur charge l'ensemble de données Iris à partir d'un fichier CSV et présente l'utilisation de commandes telles que "head" et "tail" pour prévisualiser l'ensemble de données. Les données sont chargées dans un Pandas DataFrame à l'aide de la fonction "read_csv". Tout en notant que l'apprentissage automatique utilise généralement des tableaux NumPy, l'auteur souligne que scikit-learn prend également en charge les DataFrames. Pour illustrer cela, l'auteur fournit un exemple d'extraction de colonnes spécifiques du DataFrame pour créer un tableau NumPy. La forme du tableau, indiquant le nombre d'exemples d'apprentissage et de fonctionnalités, est affichée à l'aide de la commande "forme".

Le texte décrit une série d'étapes constituant un flux de travail d'apprentissage automatique utilisant Python et la bibliothèque scikit-learn. Voici un résumé détaillé de ces étapes :

  1. Mélange d'indices et d'étiquettes : l'auteur lance le flux de travail en discutant du processus de mélange d'indices et d'étiquettes dans un ensemble de données. Le but du brassage est de rendre aléatoire l'ordre des points de données, en veillant à ce que chaque étiquette corresponde à la ligne correcte dans la matrice de caractéristiques.

  2. Division de l'ensemble de données : l'ensemble de données est divisé en un ensemble d'apprentissage et un ensemble de test. L'auteur sélectionne manuellement les 105 premiers exemples pour l'ensemble d'apprentissage et réserve les 45 exemples restants pour l'ensemble de test. Cette division est cruciale pour évaluer les performances du modèle d'apprentissage automatique.

  3. Introduction à scikit-learn et à l'ensemble de données Iris : l'auteur présente la bibliothèque scikit-learn, en particulier l'implémentation de l'ensemble de données Iris et de la fonction "train_test_split". L'ensemble de données Iris est un ensemble de données populaire largement utilisé pour les tâches de classification. La fonction "train_test_split" mélange automatiquement l'ensemble de données et le divise dans les proportions spécifiées pour l'entraînement et les tests.

  4. Visualisation à l'aide d'une matrice de nuages de points : l'auteur fournit une fonction pratique appelée "matrice de nuages de points" pour visualiser l'ensemble de données. Cette fonction utilise la bibliothèque matplotlib pour créer une matrice de nuages de points avec des histogrammes affichés sur la diagonale. La matrice de nuages de points représente visuellement les relations entre les différentes entités du jeu de données.

  5. Démonstration de la matrice de nuages de points : l'auteur démontre l'utilisation de la matrice de nuages de points en traçant l'ensemble de données Iris. Différentes couleurs sont attribuées pour représenter différentes classes de fleurs. Notamment, l'auteur souligne que des caractéristiques spécifiques, telles que la longueur et la largeur des pétales, sont particulièrement utiles pour distinguer les différentes classes de fleurs.

  6. Introduction au classificateur des k-plus proches voisins (k-NN) : L'auteur poursuit en expliquant le classificateur des k-plus proches voisins (k-NN), qui est un algorithme simple qui classe les points de données en fonction de leur proximité avec les points de données voisins. Pour instancier le classificateur k-NN, l'auteur crée un objet avec trois voisins.

  7. Ajustement du classificateur k-NN : Le classificateur k-NN est ajusté à l'ensemble d'apprentissage à l'aide de la méthode "fit". Cette étape entraîne le modèle à l'aide des données d'entraînement fournies.

  8. Prédiction sur l'ensemble de test : l'auteur utilise le classificateur k-NN ajusté pour faire des prédictions sur l'ensemble de test à l'aide de la méthode "prédire". Les prédictions sont stockées dans une variable appelée "pred".

  9. Évaluation des performances : pour évaluer les performances du modèle, l'auteur compare les étiquettes prédites (stockées dans "pred") avec les véritables étiquettes de l'ensemble de test (stockées dans "y_test"). En calculant le nombre de prédictions correctes, la précision du modèle sur l'ensemble de test peut être déterminée.

  10. Conclusion et exploration approfondie : la conférence se termine en encourageant les lecteurs à explorer la documentation scikit-learn pour obtenir des informations supplémentaires sur l'algorithme des k plus proches voisins et ses différentes options. De plus, l'auteur pose une question aux lecteurs concernant la métrique de distance par défaut utilisée par le classificateur k-NN et suggère un exercice pour étudier et discuter de cet aspect.

La conférence fournit une explication complète de divers sujets, y compris le concept de K-plus proches voisins, un exemple d'implémentation à l'aide de la bibliothèque scikit-learn, des directives pour le téléchargement et le clonage de référentiels à partir de GitHub, une introduction à Jupyter Notebook et Jupyter Lab, le chargement d'un ensemble de données dans un Pandas DataFrame, et démontrant l'extraction de colonnes et la conversion en tableaux NumPy.

2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
  • 2020.09.10
  • www.youtube.com
In this video, we are talking about using k-nearest neighbors in Python using scikit-learn. Jupyter Notebook: https://github.com/rasbt/stat451-machine-learni...
 

3.1 (Facultatif) Présentation de Python



3.1 (Facultatif) Présentation de Python

J'espère que vous passez tous une bonne semaine jusqu'à présent et que vous appréciez les conférences. Aujourd'hui, je veux discuter de quelques sujets importants abordés dans les conférences récentes.

Tout d'abord, nous avons eu une conférence sur l'amélioration de Canaan, suivie d'une conférence sur l'implémentation de kin en Python à l'aide de l'apprentissage psychique. Sur la base de vos commentaires sur le quiz d'introduction pour apprendre à vous connaître, j'ai découvert que la plupart d'entre vous ont une formation en programmation ou ont déjà suivi un cours de programmation. C'est une excellente nouvelle car cela vous sera très bénéfique dans ce cours. Cependant, j'ai remarqué que seulement environ la moitié d'entre vous ont une solide expérience avec Python. Par conséquent, avant de plonger dans l'informatique scientifique avec Python et d'explorer l'apprentissage psychique plus en détail, j'ai pensé qu'il serait utile de fournir une aide à la configuration de Python pour ceux qui sont nouveaux. Cela garantira que la prochaine conférence se déroulera plus facilement pour tout le monde.

Sur une note plus légère, j'ai vraiment aimé lire sur vos passe-temps préférés. Il semble que beaucoup d'entre vous partagent mon amour pour les activités de plein air telles que le ski de fond, la course à pied et la randonnée. Passer du temps dans la nature est vraiment rafraîchissant, même si je comprends que les jours de pluie et les longs hivers peuvent limiter ces opportunités. Certains d'entre vous ont également mentionné votre intérêt pour les jeux vidéo, un étudiant mentionnant même la série Zelda. Je dois admettre que je suis également un grand fan de la série et que j'aime y jouer pendant les jours de Noël enneigés ou après une journée bien remplie pour se détendre.

Comme promis, la conférence d'aujourd'hui sera facultative. Si vous avez déjà une solide expérience Python et que Python est configuré sur votre ordinateur, vous pouvez ignorer les trois vidéos suivantes. Cependant, si vous êtes nouveau sur Python ou avez besoin d'aide pour le configurer, je vous recommande de les regarder. Ces vidéos vous fourniront de la motivation et des conseils pratiques basés sur ma propre expérience avec Python. Il est important de noter que vous n'avez pas besoin d'être un programmeur expert pour utiliser Python dans ce cours. Nous nous concentrerons sur les bases requises pour l'apprentissage automatique, et vous en apprendrez plus au fur et à mesure que nous progressons.

La semaine prochaine, nous aurons notre premier vrai devoir à la maison, où vous implémenterez un algorithme K-plus proche voisin. Cette mission vous demandera d'écrire votre propre code, en plus d'utiliser l'apprentissage psychique. Par conséquent, il serait avantageux pour vous de configurer Python cette semaine en préparation des devoirs. Ne t'inquiète pas; le devoir est conçu pour vous aider à mieux comprendre l'algorithme KNN, et ce ne sera pas trop difficile puisqu'il s'agit du premier devoir. Une fois cette mission terminée, nous approfondirons les aspects conceptuels de l'apprentissage automatique.

Avant d'aller plus loin, faisons un bref aperçu de la progression du cours. Au cours de la première semaine, nous avons couvert l'introduction à l'apprentissage automatique et aux K-plus proches voisins. Actuellement, nous sommes dans la deuxième semaine, en nous concentrant sur les fondements informatiques. Ces fondations sont cruciales car nous les utiliserons plus tard pour mettre en œuvre divers concepts d'apprentissage automatique. Par conséquent, il est essentiel de se familiariser très tôt avec Python et son utilisation. Dans cette conférence, nous discuterons principalement de Python et de la manière de le configurer. Veuillez noter que je vais vous montrer le processus d'installation sur mon Mac, mais notre TA peut répondre à toutes les questions relatives à Windows.

Python est un langage de programmation interprété et dynamique, ce qui le rend plus interactif et convivial par rapport aux langages à typage statique comme C ou C++. Bien que Python puisse être plus lent que ces langages, ce n'est pas une préoccupation importante pour nos besoins. De nombreuses bibliothèques de calcul scientifique, que nous explorerons dans le prochain cours, sont écrites en C ou en Fortran et offrent des temps d'exécution rapides. Python est un langage de programmation polyvalent largement utilisé dans diverses applications, y compris des frameworks Web comme Django et des services populaires comme Instagram et Dropbox.

Maintenant, comparons Python avec un langage typé statiquement comme C en écrivant un programme simple. En C, nous devons déclarer des variables et spécifier explicitement leurs types de données, tels que des entiers, des flottants ou des caractères. Voici un exemple de programme simple en C :

#include <stdio.h>

int main() {
     int age = 25 ;
     float height = 1.75 ;
     char initial = 'J' ;

    printf( "My age is %d\n" , age);
    printf( "My height is %.2f meters\n" , height);
    printf( "My initial is %c\n" , initial);

     return 0 ;
}
Dans ce programme C, nous avons déclaré les variables age, height et initial avec leurs types de données respectifs. Nous avons ensuite attribué des valeurs à ces variables et les avons imprimées à l'aide de printf().

Maintenant, comparons le même programme en Python :

age = 25
height = 1.75
initial = 'J'

print( "My age is" , age)
print( "My height is" , height, "meters" )
print( "My initial is" , initial)
En Python, vous n'avez pas besoin de déclarer explicitement les types de variables. Vous pouvez directement affecter des valeurs aux variables, et Python déduira automatiquement les types de données. La fonction print() est utilisée pour afficher la sortie.

La simplicité et la lisibilité de Python en font un excellent choix pour les programmeurs débutants et expérimentés. Il dispose d'un vaste écosystème de bibliothèques et de frameworks qui le rendent adapté au calcul scientifique, à l'analyse de données, à l'apprentissage automatique, etc.

Passons maintenant à la configuration de Python sur votre ordinateur. Il existe différentes façons d'installer Python, mais je recommande d'utiliser la distribution Anaconda, qui est pré-emballée avec de nombreuses bibliothèques utiles pour le calcul scientifique. Voici les étapes pour installer Anaconda :

  1. Visitez le site Web d'Anaconda ( https://www.anaconda.com/products/individual ) et téléchargez le programme d'installation approprié à votre système d'exploitation (Windows, macOS ou Linux).

  2. Exécutez le programme d'installation et suivez les instructions à l'écran. Vous pouvez choisir les options d'installation par défaut, sauf si vous avez des préférences spécifiques.

  3. Une fois l'installation terminée, Anaconda Navigator et Anaconda Prompt (ou Anaconda PowerShell Prompt) doivent être installés sur votre ordinateur. Ce sont des outils pratiques pour gérer les environnements et les packages Python.

  4. Ouvrez le navigateur Anaconda et cliquez sur l'onglet "Environnements". Ici, vous pouvez créer un nouvel environnement pour ce cours. Cliquez sur le bouton "Créer", donnez un nom à l'environnement (par exemple, "apprentissage automatique") et choisissez la version Python (de préférence Python 3.x). Cliquez sur "Créer" pour créer l'environnement.

  5. Une fois l'environnement créé, cliquez sur l'onglet "Accueil" dans le navigateur Anaconda. Vous devriez voir une liste des applications et des environnements disponibles. Sélectionnez votre environnement nouvellement créé dans le menu déroulant en haut de la fenêtre.

  6. Dans l'onglet "Accueil", cliquez sur le bouton "Installer" sous la section Jupyter Notebook. Cela installera Jupyter Notebook, que nous utiliserons pour la programmation interactive et l'exécution de code Python.

  7. Après l'installation, cliquez sur le bouton "Lancer" à côté de Jupyter Notebook. Cela ouvrira un nouvel onglet dans votre navigateur Web, exécutant Jupyter Notebook.

Toutes nos félicitations! Vous avez installé avec succès Python et Jupyter Notebook à l'aide de la distribution Anaconda. Vous êtes maintenant prêt à commencer à coder en Python pour ce cours. Dans la prochaine conférence, nous plongerons plus profondément dans le calcul scientifique avec Python et explorerons la bibliothèque populaire appelée scikit-learn.

Si vous rencontrez des problèmes pendant le processus d'installation ou si vous avez des questions, n'hésitez pas à les poser dans le forum de discussion ou à contacter le TA pour obtenir de l'aide.

Veuillez noter que ces instructions sont spécifiques à Anaconda, mais si vous préférez utiliser une distribution Python différente, telle que Miniconda ou la distribution Python standard, vous pouvez toujours suivre le cours.

3.1 (Optional) Python overview
3.1 (Optional) Python overview
  • 2020.09.16
  • www.youtube.com
In this optional videos, I mainly talk about the use of Python in this course. I will also show a quick demo using C (a statically typed language) vs Python....
 

3.2 (Facultatif) Configuration Python


3.2 (Facultatif) Configuration Python

Dans la deuxième vidéo du cours, nous discuterons du processus de configuration et de l'installation de Python. Dans la vidéo précédente, nous avons couvert les bases des langages de programmation interprétés et dynamiques, mettant en évidence Python en tant que langage interprété dynamique.

Avant de procéder à l'installation, il est important de regarder la vidéo et de s'abstenir d'installer quoi que ce soit sur votre ordinateur pendant le visionnage. Cette mesure de précaution garantit que vous avez une compréhension complète des différentes options d'installation avant de prendre une décision. L'installation de logiciels sans connaissances appropriées peut conduire à des regrets plus tard.

Pour commencer, il est recommandé de vérifier si vous avez déjà une version à jour de Python installée sur votre ordinateur. Sur Mac ou Linux, vous pouvez utiliser la commande "which Python" pour déterminer l'emplacement et la version de l'installation. De même, sous Windows, vous pouvez utiliser la commande "where" pour trouver l'emplacement d'installation.

De nombreux Mac sont traditionnellement livrés avec une version obsolète de Python, en particulier Python 2. Il est fortement conseillé de mettre à jour Python car Python 2 n'est plus pris en charge par la communauté Python. Idéalement, l'installation de Python 3.8 ou 3.7 est recommandée, car la nouvelle version 3.9 est toujours en développement.

La méthode officielle d'installation de Python consiste à visiter python.org et à télécharger le programme d'installation. Cependant, une approche alternative qui est souvent préférée consiste à utiliser Anaconda ou, plus précisément, Miniconda. Miniconda est une version allégée d'Anaconda qui n'inclut pas de bibliothèques inutiles, ce qui permet d'économiser de l'espace de stockage sur votre ordinateur. Alors qu'Anaconda est livré avec des bibliothèques préinstallées, Miniconda permet un processus d'installation plus personnalisé.

Personnellement, l'instructeur recommande d'utiliser Miniconda en raison de sa commodité et de l'expérience positive que de nombreux membres de la communauté informatique scientifique Python en ont eue. Miniconda propose un gestionnaire de packages complet qui garantit que toutes les versions de packages requises sont installées et gère les dépendances des packages. Cette fonctionnalité facilite le maintien d'un environnement de développement stable et compatible.

Pour installer Miniconda, vous pouvez visiter le site Web de documentation, docs.conda.io, et accéder à la dernière version anglaise de la page d'installation de Miniconda. À partir de là, vous pouvez choisir le programme d'installation approprié pour votre système d'exploitation. Pour les utilisateurs de Mac, le programme d'installation bash est couramment utilisé. Après avoir téléchargé le programme d'installation, exécutez le script, acceptez le contrat de licence et choisissez l'emplacement d'installation.

Une fois Miniconda installé, vous pouvez vérifier votre version Python par défaut en ouvrant un shell Python, qui devrait maintenant afficher la version mise à jour. Miniconda fournit également des outils pour gérer différents environnements, vous permettant de créer des environnements isolés pour différents projets. Bien qu'ils ne soient pas nécessaires pour ce cours, ces environnements peuvent être utiles si vous travaillez sur plusieurs projets simultanément.

Pour installer des packages, tels que le package "numpy" requis pour la prochaine conférence, vous pouvez utiliser le gestionnaire de packages "pip" ou le programme d'installation de Conda. Puisque vous utilisez Miniconda, il est recommandé d'utiliser le programme d'installation de Conda dans la mesure du possible, car il garantit une meilleure compatibilité et une meilleure gestion des versions. Cependant, si un package n'est pas disponible dans Conda, vous pouvez recourir à l'utilisation de "pip".

Si vous devez installer des packages non disponibles dans Conda, comme le package "mlxtend", vous pouvez explorer Conda Forge. Conda Forge est un référentiel communautaire qui héberge des bibliothèques prises en charge par la communauté Conda au sens large. En recherchant le package souhaité dans Conda Forge, vous pouvez trouver des instructions d'installation spécifiques à ce package.

N'oubliez pas que vous pouvez également mettre à jour les packages à l'aide du gestionnaire de packages Conda, en utilisant des commandes telles que "conda update" suivi du nom du package, ou avec "pip" en utilisant "pip install --upgrade" suivi du nom du package.

En suivant ces instructions d'installation et de gestion des packages, vous pouvez garantir une configuration fluide et efficace de Python pour ce cours.

Pour installer des packages à partir du canal Conda Forge, vous pouvez utiliser la commande suivante :

conda install -c conda-forge <nom-du-paquet>

Par exemple, pour installer le package MLX Extent de Conda Forge, vous utiliserez :

conda install -c conda-forge mlx_ext

Cette commande recherchera le package dans le canal Conda Forge et l'installera dans votre environnement.

Si le package dont vous avez besoin n'est pas disponible dans Conda Forge ou tout autre canal Conda, vous pouvez également utiliser le gestionnaire de packages pip pour l'installer. Pip est le gestionnaire de packages par défaut pour Python et vous permet d'installer des packages à partir du Python Package Index (PyPI).

Pour installer un package à l'aide de pip, vous pouvez utiliser la commande suivante :

pip install <nom-du-paquet>

Par exemple, pour installer un package appelé "exemple-package" à l'aide de pip, vous utiliserez :

paquet d'exemple d'installation de pip

Assurez-vous de remplacer <package-name> par le nom réel du package que vous souhaitez installer.

Gardez à l'esprit que lorsque vous utilisez à la fois Conda et pip, il est généralement recommandé d'utiliser Conda comme gestionnaire de packages principal pour maintenir la compatibilité des packages et gérer les dépendances. Cependant, si un package n'est pas disponible dans Conda, l'utilisation de pip est une alternative appropriée.

Cela conclut les instructions de configuration pour l'installation de Python et la gestion des packages à l'aide de Conda et pip. N'oubliez pas de regarder le didacticiel vidéo avant d'installer quoi que ce soit sur votre ordinateur et de suivre les étapes recommandées pour garantir un processus d'installation fluide.

3.2 (Optional) Python setup
3.2 (Optional) Python setup
  • 2020.09.16
  • www.youtube.com
In this optional video, I am demonstrating how to install Python using Miniconda on macOS. Also, I provide some brief demo of the conda package manager.-----...
 

3.3 (Facultatif) Exécuter du code Python


3.3 (Facultatif) Exécuter du code Python

Dans la troisième et dernière vidéo de la troisième conférence, je vais démontrer différentes méthodes pour exécuter du code Python. Cette vidéo se concentrera sur les cahiers Jupiter, un format de fichier et un programme qui permettent un codage pratique, l'écriture de texte, le rendu d'équations et le traçage dans un seul document, qui sera utilisé pour le devoir à venir.

Avant de plonger dans les cahiers Jupiter, je vais d'abord vous montrer le moyen le plus simple d'exécuter du code Python, qui utilise l'interpréteur Python ou ce que certaines personnes appellent le REPL (Read-Eval-Print Loop). L'interpréteur permet une exécution interactive du code Python, ce qui signifie que le code est évalué immédiatement. Pour utiliser l'interpréteur, vous pouvez ouvrir votre terminal et taper "python". À partir de là, vous pouvez saisir des expressions Python et voir les résultats immédiatement. Par exemple, taper "print(1 + 2)" affichera le résultat "3". Vous pouvez également utiliser l'interpréteur pour des tâches plus complexes, telles que boucler sur des valeurs et les imprimer.

Bien que l'interpréteur puisse être utile pour des calculs rapides ou des calculs, il n'est pas recommandé pour écrire du code plus compliqué. Il peut être facile de perdre la trace des calculs et de devenir fastidieux pour revenir en arrière et retrouver les commandes précédemment exécutées. Par conséquent, pour un code plus complexe, il est préférable d'utiliser un script Python ou un notebook Jupiter.

Ensuite, je présente un interpréteur Python interactif alternatif appelé IPython. IPython offre des caractéristiques et des fonctionnalités supplémentaires par rapport à l'interpréteur standard, notamment la coloration de la syntaxe, la fonction d'historique pour une modification facile du code et des commandes magiques. Les commandes magiques sont des commandes spéciales qui commencent par un signe de pourcentage (%) et offrent des fonctionnalités utiles. Un tel exemple est la commande magique "timeit", qui permet de comparer différentes implémentations de code. Je le démontre en implémentant deux fonctions pour inverser les chaînes et en comparant leur efficacité à l'aide de la commande "timeit".

Après avoir présenté les avantages d'IPython, j'explique que les notebooks Jupiter étaient à l'origine appelés notebooks IPython parce qu'ils étaient construits sur IPython. Même maintenant, les ordinateurs portables Jupiter s'appuient sur IPython, offrant les mêmes avantages et des fonctionnalités supplémentaires. Pour installer IPython, j'utilise Conda et affiche le site Web IPython pour plus de documentation.

Ensuite, je discute de la deuxième méthode d'exécution du code Python, qui utilise des scripts Python. Cette méthode consiste à créer un fichier avec une extension .py, à écrire le code dans le fichier et à l'exécuter à partir de la ligne de commande. Je fournis un exemple de script Python qui utilise une boucle pour imprimer des nombres de 0 à 4.

Enfin, je mentionne l'importance de respecter les directives de style de codage, telles que PEP 8, pour écrire un code propre et lisible. Je montre comment l'utilisation d'un linter, tel que Flake8, dans un environnement de développement intégré tel que Visual Studio Code peut aider à identifier et à corriger les problèmes de style, améliorant ainsi la qualité globale du code.

La vidéo couvrait différentes manières d'exécuter du code Python, notamment l'utilisation de l'interpréteur, la création de scripts Python et l'exploitation des avantages des blocs-notes IPython et Jupiter. Chaque méthode a ses propres avantages et est adaptée à des fins différentes.

3.3 (Optional) Running Python code
3.3 (Optional) Running Python code
  • 2020.09.16
  • www.youtube.com
In this third and last video of the optional lecture 3, I am demonstrating the different ways for running Python code: the REPL, IPython, .py scripts, and Vi...
 

4.1 Introduction à NumPy (L04 : Calcul scientifique en Python)



4.1 Introduction à NumPy (L04 : Calcul scientifique en Python)

Dans ce didacticiel, nous couvrirons les bases de NumPy, notamment la création de tableaux, l'accès aux éléments, l'exécution d'opérations sur les tableaux, etc. Commençons!

Pour commencer, nous devons importer la bibliothèque NumPy. Classiquement, il est importé sous l'alias np. Exécutez le code suivant pour importer NumPy :

import numpy as np
Maintenant que nous avons importé NumPy, créons notre premier tableau. Les tableaux NumPy sont créés à l'aide de la fonction np.array(), qui prend une liste Python en entrée. Exécutez le code suivant pour créer un tableau :

arr = np.array([1, 2, 3, 4, 5])
print(arr)
Vous devriez voir la sortie suivante :

[1 2 3 4 5]
Toutes nos félicitations! Vous avez créé votre premier tableau NumPy. Explorons maintenant quelques opérations de base que nous pouvons effectuer sur les tableaux.

Accéder aux éléments du tableau

Pour accéder aux éléments d'un tableau NumPy, nous pouvons utiliser l'indexation et le découpage, similaires aux listes Python. L'indexation commence à 0.

Exécutez le code suivant pour accéder aux éléments du tableau :

 print (arr[ 0 ])   # Access the first element
print (arr[ 2 ])   # Access the third element
print (arr[- 1 ])   # Access the last element
La sortie sera :

1
3
5
Nous pouvons également utiliser le découpage en tranches pour accéder à une plage d'éléments dans un tableau. La syntaxe du découpage est start:stop:step, où start est l'index de départ, stop est l'index d'arrêt (exclusif) et step est la taille du pas.

Exécutez le code suivant pour découper le tableau :

 print (arr[ 1 : 4 ])   # Access elements from index 1 to 3
print (arr[:: 2 ])   # Access every other element

La sortie sera :

[2 3 4]
[1 3 5]
Opérations sur les tableaux

Les tableaux NumPy prennent en charge diverses opérations mathématiques, telles que l'addition, la soustraction, la multiplication et la division. Ces opérations sont appliquées élément par élément aux tableaux.

Exécutez le code suivant pour effectuer des opérations sur le tableau :

arr1 = np. array ([ 1 , 2 , 3 ])
arr2 = np. array ([ 4 , 5 , 6 ])

# Addition
print (arr1 + arr2)

# Subtraction
print (arr1 - arr2)

# Multiplication
print (arr1 * arr2)

# Division
print (arr1 / arr2)
La sortie sera :

 [5 7 9]
[-3 -3 -3]
[4 10 18]
[0.25 0.4  0.5]
NumPy fournit également diverses fonctions mathématiques pouvant être appliquées aux tableaux. Par exemple, la fonction np.sin() peut être utilisée pour calculer le sinus d'un tableau.

Exécutez le code suivant pour appliquer une fonction mathématique à un tableau :

arr = np. array ([ 0 , np.pi/ 2 , np.pi])

# Calculate sine
print (np.sin(arr))
La sortie sera :

[0.0000000e+00 1.0000000e+00 1.2246468e-16]

Forme et remodelage du tableau

La forme d'un tableau NumPy représente ses dimensions, telles que le nombre de lignes et de colonnes. Nous pouvons utiliser l'attribut shape pour vérifier la forme d'un tableau.

Exécutez le code suivant pour vérifier la forme d'un tableau :

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
La sortie sera :

(2, 3)
Nous pouvons également modifier la forme d'un tableau à l'aide de la fonction reshape(). Cette fonction nous permet de redimensionner un tableau sans changer ses données.

Exécutez le code suivant pour remodeler un tableau :

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
La sortie sera :

[[1 2 3]
 [4 5 6]]
Ce ne sont là que quelques-unes des opérations de base que vous pouvez effectuer avec NumPy. La bibliothèque fournit un large éventail de fonctions et de capacités pour travailler efficacement avec les tableaux. Je vous encourage à explorer la documentation NumPy pour en savoir plus sur ses fonctionnalités.
4.1 Intro to NumPy (L04: Scientific Computing in Python)
4.1 Intro to NumPy (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This first video in the "L04: Intro to Scientific Computing in Python" introduces NumPy on a basic level before diving into more details in the following vid...