最近傍点分類

Beginner

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

はじめに

この実験では、2 次元空間内のデータポイントを分類するために、最近傍法による分類アルゴリズムを使用します。機械学習で一般的に使用される Iris データセットを使用します。各クラスの決定境界を可視化し、異なる重みを使用した場合のアルゴリズムの動作を観察します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題が発生した場合は、Labby にお問い合わせください。セッション終了後にフィードバックを提供してください。すぐに問題を解決いたします。

必要なライブラリをインポートする

必要なライブラリをインポートして始めましょう。これには、matplotlibseabornListedColormapdatasetsneighbors、およびsklearnからのDecisionBoundaryDisplayが含まれます。

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 データセットを読み込む

次に、sklearndatasetsモジュールのload_iris()関数を使って Iris データセットを読み込みます。

iris = datasets.load_iris()

データを準備する

Iris データセットの最初の 2 つの特徴量、つまり花弁の長さと花弁の幅のみを取り出します。その後、データを特徴行列Xとターゲットベクトルyに分割します。

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

カラーマップを定義する

決定境界と学習ポイントのプロットに使用するカラーマップを定義します。

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

決定境界を可視化する

「uniform」と「distance」の 2 つの異なる重み値をループして、各重み値に対する決定境界をプロットします。分類を行うために、neighborsモジュールのKNeighborsClassifierクラスを使用します。

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」の重み値は、より近い近傍点により大きな重みを割り当てます。「distance」の重み値では決定境界が滑らかであることがわかり、これはより正確な分類を示しています。

まとめ

この実験では、2 次元空間内のデータポイントを分類するために最近傍点分類アルゴリズムをどのように使用するかを学びました。Iris データセットを使用して、各クラスの決定境界を可視化し、異なる重み値を使用した場合のアルゴリズムの動作を観察しました。また、結果をどのように解釈するかを学び、「distance」の重み値がデータポイントの分類においてより良い性能を発揮することを観察しました。