최근접 이웃 분류

Beginner

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

소개

이 실습에서는 2 차원 공간의 데이터 포인트를 분류하기 위해 최근접 이웃 분류 알고리즘을 사용할 것입니다. 머신 러닝에서 일반적으로 사용되는 아이리스 (Iris) 데이터셋을 사용할 것입니다. 각 클래스의 결정 경계를 시각화하고, 서로 다른 가중치를 사용했을 때 알고리즘의 성능을 관찰할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기

필요한 라이브러리를 가져오는 것으로 시작합니다. matplotlib, seaborn, ListedColormap, datasets, neighbors, 그리고 sklearnDecisionBoundaryDisplay를 포함합니다.

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

아이리스 데이터셋 로드

sklearndatasets 모듈에서 load_iris() 함수를 사용하여 아이리스 데이터셋을 로드합니다.

iris = datasets.load_iris()

데이터 준비

아이리스 데이터셋에서 처음 두 개의 특징 (꽃받침 길이와 꽃받침 너비) 만 사용합니다. 그런 다음 데이터를 특징 행렬 X와 목표 벡터 y로 분할합니다.

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

색상 맵 정의

결정 경계 및 학습 데이터 포인트를 플롯하는 데 사용할 색상 맵을 정의합니다.

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

결정 경계 시각화

두 가지 다른 가중치 값 ("균일" 및 "거리") 을 반복하여 각 가중치 값에 대한 결정 경계를 플롯합니다. 분류를 위해 neighbors 모듈의 KNeighborsClassifier 클래스를 사용합니다.

n_neighbors = 15

for weights in ["uniform", "distance"]:
    ## Neighbours Classifier 의 인스턴스를 생성하고 데이터를 맞춥니다.
    clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
    clf.fit(X, y)

    ## 결정 경계를 플롯합니다.
    _, 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",
    )

    ## 학습 데이터 포인트를 플롯합니다.
    sns.scatterplot(
        x=X[:, 0],
        y=X[:, 1],
        hue=iris.target_names[y],
        palette=cmap_bold,
        alpha=1.0,
        edgecolor="black",
    )
    plt.title(
        "3-클래스 분류 (k = %i, 가중치 = '%s')" % (n_neighbors, weights)
    )

plt.show()

결과 해석

각 가중치 값에 대한 결정 경계와 알고리즘이 데이터 포인트를 분류하는 성능을 관찰할 수 있습니다. "균일" 가중치 값은 모든 이웃이 동일한 가중치를 갖는다고 가정하는 반면, "거리" 가중치 값은 더 가까운 이웃에 더 큰 가중치를 할당합니다. "거리" 가중치 값을 사용하면 결정 경계가 더 매끄러워져 더 정확한 분류를 나타냅니다.

요약

이 실험에서 우리는 이웃 기반 분류 알고리즘을 사용하여 2 차원 공간에서 데이터 포인트를 분류하는 방법을 배웠습니다. 아이리스 데이터셋을 사용하여 각 클래스의 결정 경계를 시각화하고, 서로 다른 가중치 값을 사용했을 때 알고리즘의 성능을 관찰했습니다. 또한 결과를 해석하는 방법을 배우고, "거리" 가중치 값이 데이터 포인트를 분류하는 데 더 나은 성능을 보이는 것을 관찰했습니다.