Задание 1. Поиск ближайшего соседа

Даны координаты нового объекта и трёх обучающих наблюдений:

import numpy as np

 

X = np.array([3, 4])

 

points = np.array([

    [3, 5],

    [6, 8],

    [4, 4]

])

 

classes = np.array([0, 1, 0])

Необходимо:

  1. С помощью NumPy вычислить евклидово расстояние от X до каждого объекта.
  2. Определить минимальное расстояние.
  3. Найти ближайшего соседа.
  4. Определить прогнозируемый класс при k = 1.
  5. Вывести результаты на экран.

Задание 2. Исследование влияния параметра k

Дан обучающий набор данных:

import numpy as np

 

X_train = np.array([

    [1, 1],

    [2, 2],

    [3, 3],

    [4, 4],

    [5, 5]

])

 

y_train = np.array([1, 0, 0, 0, 1])

 

new_object = np.array([[1, 1]])

Необходимо:

  1. Создать модель KNeighborsClassifier.
  2. Обучить модель при k = 1.
  3. Повторить обучение при k = 3 и k = 5.
  4. Вывести прогнозируемый класс для каждого значения k.
  5. Объяснить влияние количества соседей на результат классификации.
  6. Указать, почему в реальной задаче k рекомендуется выбирать с помощью перекрёстной проверки.

Задание 3. kNN-регрессия и Pipeline

Дан набор данных:

import numpy as np

 

X_train = np.array([

    [1],

    [2],

    [3]

])

 

y_train = np.array([40, 50, 60])

 

new_object = np.array([[2.5]])

Необходимо:

  1. Создать модель KNeighborsRegressor при k = 3.
  2. Обучить модель и получить прогноз для нового объекта.
  3. Повторить эксперимент с параметром weights="distance".
  4. Сравнить прогнозы с обычным и взвешенным средним.
  5. Создать Pipeline из StandardScaler и KNeighborsRegressor.
  6. Объяснить, почему масштабирование важно для алгоритма kNN.