Реализация алгоритма k-ближайших соседей на JavaScript

JavaScriptJavaScriptBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим алгоритм k-ближайших соседей, мощный инструмент для классификации точек данных. Реализовав этот алгоритм на JavaScript, мы сможем классифицировать новые точки данных на основе их близости к имеющимся помеченным точкам данных, что делает его ценным инструментом для различных приложений, таких как системы рекомендаций и распознавание образов. С помощью этого практического занятия мы глубже узнаем, как работают алгоритмы машинного обучения и как их можно реализовать в реальных сценариях.


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{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/data_types -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/arith_ops -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/comp_ops -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/cond_stmts -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/array_methods -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/obj_manip -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/higher_funcs -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} javascript/spread_rest -.-> lab-28461{{"Реализация алгоритма k-ближайших соседей на JavaScript"}} end

Алгоритм k-ближайших соседей

Для использования Алгоритма k-ближайших соседей следуйте шагам:

  1. Откройте Терминал/SSH и введите node.
  2. Классифицируйте точку данных относительно помеченного набора данных с использованием алгоритма k-ближайших соседей.
  3. Сопоставьте data с объектами с использованием Array.prototype.map(). Каждый объект содержит евклидово расстояние элемента от point, вычисленное с использованием Math.hypot(), Object.keys() и его label.
  4. Используйте Array.prototype.sort() и Array.prototype.slice(), чтобы получить k ближайших соседей point.
  5. Используйте Array.prototype.reduce() в сочетании с Object.keys() и Array.prototype.indexOf(), чтобы найти наиболее часто встречающийся label среди них.

Вот пример кода, который реализует Алгоритм k-ближайших соседей:

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;
};

Вот, как использовать этот код:

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

Резюме

Поздравляем! Вы завершили практическое занятие по алгоритму k-ближайших соседей. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.