K ближайших соседей - это простой алгоритм, который хранит все доступные случаи и прогнозирует числовую цель на основе меры сходства (например, функций расстояния). KNN использовался в статистической оценке и распознавании образов уже в начале 1970-х годов как непараметрический метод. Алгоритм Простая реализация регрессии KNN заключается в вычислении среднего численного целевого значения K ближайших соседей. Другой подход использует обратное средневзвешенное расстояние K ближайших соседей. Регрессия KNN использует те же функции расстояния, что и классификация KNN.

Приведенные выше три меры расстояния действительны только для непрерывных переменных. В случае категориальных переменных вы должны использовать расстояние Хэмминга, которое является мерой количества случаев, когда соответствующие символы различаются в двух строках одинаковой длины.

Прогноз с использованием одного соседа - это просто целевое значение ближайшего соседа.

Давайте перейдем к практическим, в этой статье я использую набор данных из mglearn, первый шаг, если у вас нет пакета в вашей записной книжке, установите его в командной строке cmd / anaconda ..

pip install mglearn

После этого вы можете построить регрессию k-соседей с n_neighbors = 1.

import mglearn 
import matplotlib.pyplot as plt
mglearn.plots.plot_knn_regression(n_neighbors=1)

Опять же, эта регрессия k-соседей просто использует 1 n_neighbors, вы можете использовать более одного ближайшего соседа для регрессии, а прогноз - это среднее или среднее значение соответствующих соседей. Покажи нам…

mglearn.plots.plot_knn_regression(n_neighbors=3)

Теперь мы можем сделать прогноз на тестовых данных, используя knn regresson с n_neightbors = 3

from sklearn.neighbors import KNeighborsRegressor
X, y = mglearn.datasets.make_wave(n_samples=40)
# split the wave dataset into a training and a test set
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
# instantiate the model and set the number of neighbors to consider to 3
reg = KNeighborsRegressor(n_neighbors=3)
# fit the model using the training data and training targets
reg.fit(X_train, y_train)

Если вы сделали это выше, вы можете использовать свою модель на тестовых данных.

print(reg.score(reg.score(X_test, y_test)))

из: 0.83

АНАЛИЗ РЕГРЕССОР КОЛЕНЕЙ

Мы можем проанализировать, как на точность влияют n_neighbors: мы можем использовать различное значение 3 n_neighbors и объяснить, где хорошее значение n_neighbors для модели.

fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# create 1,000 data points, evenly spaced between -3 and 3
line = np.linspace(-3, 3, 1000).reshape(-1, 1)
for n_neighbors, ax in zip([1, 3, 9], axes):
    # make predictions using 1, 3, or 9 neighbors
    reg = KNeighborsRegressor(n_neighbors=n_neighbors)
    reg.fit(X_train, y_train)
    ax.plot(line, reg.predict(line))
    ax.plot(X_train, y_train, '^', c=mglearn.cm2(0),   
             markersize=8)
    ax.plot(X_test, y_test, 'v', c=mglearn.cm2(1), markersize=8)
    ax.set_title("{} neighbor(s)\n train score: {:.2f} test  
              score: {:.2f}".format(n_neighbors,    
              reg.score(X_train, y_train),reg.score(X_test, 
              y_test)))
    ax.set_xlabel("Feature")
    ax.set_ylabel("Target")
axes[0].legend(["Model predictions", "Training data/target","Test   
    data/target"], loc="best")

Как видно из графика, при использовании только одного соседа каждая точка в обучающем наборе имеет очевидное влияние на прогнозы, и прогнозируемые значения проходят через все точки данных. Это приводит к очень неустойчивому прогнозу. Учет большего количества соседей приводит к более плавным прогнозам, но они также не соответствуют обучающим данным.

Ссылка: Андреас Мюллер и Сара Гвидо. 2017. Введение в машинное обучение с помощью pyhton