Классификация ближайших соседей

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

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

Введение

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

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

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

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

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

Импортируем необходимые библиотеки

Начнем с импорта необходимых библиотек, которые включают matplotlib, seaborn, ListedColormap, datasets, neighbors и DecisionBoundaryDisplay из sklearn.

import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
from sklearn.inspection import DecisionBoundaryDisplay

Загружаем датасет Iris

Затем мы загрузим датасет Iris с использованием функции load_iris() из модуля datasets в sklearn.

iris = datasets.load_iris()

Подготавливаем данные

Мы возьмем только первые два признака датасета Iris, которые являются длиной чашелистика и шириной чашелистика. Затем мы разделим данные на матрицу признаков X и целевой вектор y.

X = iris.data[:, :2]
y = iris.target

Определяем цветовые карты

Мы определим цветовые карты, которые будут использоваться для построения границ решений и точек обучения.

cmap_light = ListedColormap(["orange", "cyan", "cornflowerblue"])
cmap_bold = ["darkorange", "c", "darkblue"]

Визуализируем границы решений

Мы будем перебирать два различных значения весов, "uniform" и "distance", и строить границы решений для каждого значения весов. Мы будем использовать класс KNeighborsClassifier из модуля neighbors для выполнения классификации.

n_neighbors = 15

for weights in ["uniform", "distance"]:
    ## create an instance of Neighbours Classifier and fit the data
    clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
    clf.fit(X, y)

    ## plot the decision boundaries
    _, ax = plt.subplots()
    DecisionBoundaryDisplay.from_estimator(
        clf,
        X,
        cmap=cmap_light,
        ax=ax,
        response_method="predict",
        plot_method="pcolormesh",
        xlabel=iris.feature_names[0],
        ylabel=iris.feature_names[1],
        shading="auto",
    )

    ## plot the training points
    sns.scatterplot(
        x=X[:, 0],
        y=X[:, 1],
        hue=iris.target_names[y],
        palette=cmap_bold,
        alpha=1.0,
        edgecolor="black",
    )
    plt.title(
        "3-Class classification (k = %i, weights = '%s')" % (n_neighbors, weights)
    )

plt.show()

Интерпретируем результаты

Мы можем наблюдать за границами решений для каждого значения веса и то, насколько хорошо алгоритм справляется с классификацией точек данных. Значение веса "uniform" предполагает, что все соседи имеют равный вес, в то время как значение веса "distance" назначает больший вес ближайшим соседям. Мы можем увидеть, что границы решений smoother с значением веса "distance", что указывает на более точную классификацию.

Резюме

В этом практическом занятии мы узнали, как использовать алгоритм классификации ближайших соседей для классификации точек данных в двумерном пространстве. Мы использовали датасет Iris для визуализации границ решений для каждого класса и наблюдали, как алгоритм работает при использовании различных значений весов. Мы также узнали, как интерпретировать результаты, и увидели, что значение веса "distance" дает лучшие результаты при классификации точек данных.