Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript

JavaScriptJavaScriptBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous explorerons l'algorithme des K Plus Proches Voisins, un outil puissant pour la classification de points de données. En le mettant en œuvre en JavaScript, nous serons en mesure de classifier de nouveaux points de données en fonction de leur proximité avec des points de données étiquetés existants, ce qui en fait un outil précieux pour diverses applications, telles que les systèmes de recommandation et la reconnaissance d'images. Grâce à ce laboratoire, nous acquerrons une compréhension plus approfondie de la manière dont les algorithmes d'apprentissage automatique fonctionnent et de la manière dont ils peuvent être mis en œuvre dans des scénarios du monde réel.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("Spread and Rest Operators") subgraph Lab Skills javascript/variables -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/data_types -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/arith_ops -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/comp_ops -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/cond_stmts -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/array_methods -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/obj_manip -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/higher_funcs -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} javascript/spread_rest -.-> lab-28461{{"Mise en œuvre de l'algorithme des K Plus Proches Voisins en JavaScript"}} end

Algorithme des K Plus Proches Voisins

Pour utiliser l'algorithme des K Plus Proches Voisins, suivez ces étapes :

  1. Ouvrez le Terminal/SSH et tapez node.
  2. Classifiez un point de données par rapport à un ensemble de données étiquetées à l'aide de l'algorithme des k plus proches voisins.
  3. Appliquez la méthode Array.prototype.map() sur les data pour les convertir en objets. Chaque objet contient la distance euclidienne de l'élément à partir de point, calculée à l'aide de Math.hypot(), Object.keys() et son label.
  4. Utilisez Array.prototype.sort() et Array.prototype.slice() pour obtenir les k plus proches voisins de point.
  5. Utilisez Array.prototype.reduce() en combinaison avec Object.keys() et Array.prototype.indexOf() pour trouver le label le plus fréquent parmi eux.

Voici un exemple de code qui implémente l'algorithme des K Plus Proches Voisins :

const kNearestNeighbors = (data, labels, point, k = 3) => {
  const kNearest = data
    .map((el, i) => ({
      dist: Math.hypot(...Object.keys(el).map((key) => point[key] - el[key])),
      label: labels[i]
    }))
    .sort((a, b) => a.dist - b.dist)
    .slice(0, k);

  return kNearest.reduce(
    (acc, { label }, i) => {
      acc.classCounts[label] =
        Object.keys(acc.classCounts).indexOf(label) !== -1
          ? acc.classCounts[label] + 1
          : 1;
      if (acc.classCounts[label] > acc.topClassCount) {
        acc.topClassCount = acc.classCounts[label];
        acc.topClass = label;
      }
      return acc;
    },
    {
      classCounts: {},
      topClass: kNearest[0].label,
      topClassCount: 0
    }
  ).topClass;
};

Voici comment utiliser le code :

const data = [
  [0, 0],
  [0, 1],
  [1, 3],
  [2, 0]
];
const labels = [0, 1, 1, 0];

kNearestNeighbors(data, labels, [1, 2], 2); // 1
kNearestNeighbors(data, labels, [1, 0], 2); // 0

Sommaire

Félicitations ! Vous avez terminé le laboratoire sur les K Plus Proches Voisins. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.