最近傍回帰

Beginner

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

はじめに

最近傍回帰は、学習セット内の k 個の最も近いデータポイントを見つけ、それらの平均値を使って新しい値を予測することで、新しいデータポイントの値を予測する機械学習アルゴリズムです。この実験では、scikit-learn を使って、k 最近傍法を使った回帰問題の解決方法と、重心と定数重みを使った目的変数の補間について説明します。

VM のヒント

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

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

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

サンプルデータを生成する

まず、回帰問題に使用するサンプルデータを生成します。1 つの特徴量を持つ 40 個のデータポイントの配列を作成し、そのデータに正弦関数を適用することで目的変数の配列を作成します。また、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 を使ってサンプルデータを生成し、一様重みと距離重みの両方を使って回帰モデルをフィットさせました。そして、データポイントと予測値をプロットして、モデルの精度を視覚化しました。