Menu
CoddyTech

Как работает k-NN

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 6 из 58.

В этой главе мы разберём k-NN. К её окончанию вы сможете построить его карту для любых данных, например такую для перцев чили умеренной остроты и острых:

80 перцев чили, расположенных по длине и толщине стенки на карте с цветовой заливкой: оранжевая область слева, где модель предсказывает острый перец, синяя область справа, где она предсказывает перец умеренной остроты

Чтобы классифицировать новый перец чили, метод k ближайших соседей находит k обучающих перцев чили, ближайших к нему, и они голосуют:

Крупный план перцев чили с чёрной звездой, обозначающей новый перец. Серые линии соединяют его с 5 ближайшими перцами: 3 острых и 2 неострых, поэтому побеждают острые

Ближайшее — это наименьшее расстояние, которое ты рассматривал в разделе 2. Ты выбираешь k:

model = KNeighborsClassifier(n_neighbors=5)

n_neighbors — это k, равное 5, если не указано иное. При двух классах нечётное k не может привести к ничьей.

challenge icon

Задание

Легко

Астрономический клуб распределяет звёзды из stars.csv на карлики и гиганты по температуре и величине. Стартовый код считывает новую звезду и k.

  1. Найди вручную k ближайших звёзд: добавь столбец distance, затем выполни сортировку.
  2. Выведи, сколько среди них гигантов, а затем победителя голосования.
  3. Проверь результат с помощью модели k-NN с этим k, обученной на всех звёздах.

Для звезды другого клуба и k = 5:

Giants among the nearest 5: 4
By hand: giant
Model: giant

Попробуйте сами

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Одна строка на звезду: температура в тысячах кельвинов, звёздная величина (чем меньше, тем ярче), карлик или гигант
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]

# Новая звезда и k
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python