Регирессия на основе ближайших соседей

Beginner

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

Введение

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

Советы по работе с ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Генерация выборочных данных

Сначала мы генерируем выборочные данные для нашей задачи регрессии. Мы создаем массив из 40 данных с 1 признаком, а затем создаем целевой массив, применяя функцию синуса к данным. Также мы добавляем некоторый шум к каждому 5-му элементу данных.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors

np.random.seed(0)
X = np.sort(5 * np.random.rand(40, 1), axis=0)
T = np.linspace(0, 5, 500)[:, np.newaxis]
y = np.sin(X).ravel()

## Add noise to targets
y[::5] += 1 * (0.5 - np.random.rand(8))

Настройка модели регрессии

Затем настраиваем нашу модель регрессии на выборочные данные, используя 5 соседей и веса, равномерные и зависящие от расстояния. Мы используем цикл for для перебора каждого типа весов и создаем точечную диаграмму данных и линейную диаграмму предсказанных значений с использованием метода predict настроенной модели.

n_neighbors = 5

for i, weights in enumerate(["uniform", "distance"]):
    knn = neighbors.KNeighborsRegressor(n_neighbors, weights=weights)
    y_ = knn.fit(X, y).predict(T)

    plt.subplot(2, 1, i + 1)
    plt.scatter(X, y, color="darkorange", label="data")
    plt.plot(T, y_, color="navy", label="prediction")
    plt.axis("tight")
    plt.legend()
    plt.title("KNeighborsRegressor (k = %i, weights = '%s')" % (n_neighbors, weights))

plt.tight_layout()
plt.show()

Резюме

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