最近傍法とk近傍法: Pythonでの実装や違いについて

最近傍法(Nearest Neighbor)とk近傍法(k-Nearest Neighbors)は、機械学習の分類と回帰タスクにおいて非常に強力な手法です。ここでは、最近傍法とk近傍法について説明し、Pythonを使用した具体的な実装方法を紹介します。

最近傍法(Nearest Neighbor)

最近傍法(Nearest Neighbor、略してNN)は、機械学習の分類や回帰問題において使用される非常に単純ながら強力なアルゴリズムの一つです。最近傍法は、新しいデータポイントを、既存のデータセット内で最も近い隣接点に基づいて分類または予測する方法です。以下では、最近傍法の仕組みと特徴を詳細に説明します。

最近傍法の仕組み

1. データセットの作成: 最初に、学習用データセットが提供されます。このデータセットには、各データポイントが特徴ベクトル(数値データ)とそれに対応するクラス(分類の場合)または値(回帰の場合)が含まれています。このデータセットを学習用データとして使用します。

2. 新しいデータポイントの分類または予測: 新しいデータポイントが与えられた場合、最近傍法は以下の手順でクラス分類または予測を行います。

  • 新しいデータポイントから最も近いデータポイントを見つけます。距離尺度として、通常はユークリッド距離が使用されます。
  • 最も近いデータポイントのクラス(分類の場合)または値(回帰の場合)を新しいデータポイントのクラスまたは予測値として返します。

Pythonでの実装例

以下は、Pythonで最近傍法を実装する簡単な例です。

from sklearn.neighbors import KNeighborsClassifier

# データセットの作成
X_train = [[1, 2], [2, 3], [3, 4], [4, 5]]
y_train = ['A', 'B', 'B', 'A']

# 最近傍法モデルの作成
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

# 新しいデータポイントのクラス分類
X_new = [[2.5, 3.5]]
predicted_class = knn.predict(X_new)
print(predicted_class)

k近傍法(k-Nearest Neighbors)

k近傍法(k-Nearest Neighbors、略してk-NN)は、機械学習教師あり学習アルゴリズムの一つで、最近傍法の一般化です。k-NNは新しいデータポイントを、それに最も近いk個の隣接点に基づいて分類または予測する方法です。以下では、k-NNの仕組みについて詳細に説明します。

k-NNの仕組み

1. データセットの作成: 最初に、学習用データセットが提供されます。このデータセットには、各データポイントが特徴ベクトル(数値データ)とそれに対応するクラス(分類の場合)または値(回帰の場合)が含まれています。このデータセットを学習用データとして使用します。

2. 新しいデータポイントの分類または予測: 新しいデータポイントが与えられた場合、k-NNは以下の手順でクラス分類または予測を行います。

  • 新しいデータポイントから最も近いk個のデータポイントを見つけます。距離尺度として通常はユークリッド距離が使用されます。
  • これらのk個の点のクラス(分類の場合)または値(回帰の場合)を集計し、多数決または平均を用いて新しいデータポイントのクラスまたは予測値を決定します。

Pythonでの実装例

以下は、Pythonでk近傍法を実装する簡単な例です。

from sklearn.neighbors import KNeighborsClassifier

# データセットの作成
X_train = [[1, 2], [2, 3], [3, 4], [4, 5]]
y_train = ['A', 'B', 'B', 'A']

# k近傍法モデルの作成
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 新しいデータポイントのクラス分類
X_new = [[2.5, 3.5]]
predicted_class = knn.predict(X_new)
print(predicted_class)

この例では、k=3として、最も近い3つの点の多数決に基づいて新しいデータポイントが分類されます。

最近傍法とk近傍法の違い

最近傍法とk近傍法の主な違いを説明します。

1. 近傍点の数

「近傍点」は、最近傍法(k-NNやNNなど)やクラスタリングなどの機械学習およびデータ分析の文脈で使われる重要な概念です。近傍点は、特定のデータポイントに対して、その周囲にある近くのデータポイントを指します。これらの近傍点を利用することで、データポイントの分類、クラスタリング、または予測を行うことができます。近傍点の数(k)や距離尺度は、アルゴリズムの性能に影響を与える重要なハイパーパラメータとなります。データポイントの周囲にどれくらいの近傍点を考慮するかは、モデルの性能やロバスト性に大きな影響を与えるため、適切な設定が必要です。

最近傍法: 最近傍法は、新しいデータポイントを分類する際に、ただ1つの最も近いデータポイントのみを考慮します。つまり、1つの最も近い点に基づいてクラス分類を行います。

k近傍法: k近傍法では、新しいデータポイントの周りに最も近いk個のデータポイントを考慮します。このk個の点の多数決に基づいて、新しいデータポイントのクラスが決定されます。

2. ロバストネス

ロバストネス、ロバスト性(Robustness)」とは、あるシステムやアルゴリズムが外部のノイズや変動に対して頑健である性質を指します。ロバスト性は、システムが不確かさや異常値に対して安定して機能することを意味します。ロバスト性は、実世界のデータや環境において、モデルやシステムが信頼性を持つために非常に重要です。特に機械学習やデータ分析の文脈では、データにノイズが含まれたり、外れ値が存在することが一般的であるため、ロバストなモデルやアルゴリズムを開発することが求められます。

最近傍法: 最近傍法はノイズに敏感であり、外れ値に強く反応することがあります。1つの異常値が誤ったクラス分類結果を引き起こす可能性があります。

k近傍法: k近傍法は最近傍法よりもロバストで、複数の近傍点を考慮するため、個別の外れ値が結果に大きな影響を与えにくいです。外れ値に対して頑健です。

3. 決定境界

「決定境界(Decision Boundary)」は、機械学習統計学において、クラス分類のアルゴリズムが異なるクラスやカテゴリのデータポイントを区別するために使用する境界または境界面を指します。決定境界は、特徴空間内のデータポイントを分割し、それぞれのクラスに属するデータポイントを示す領域を定義します。

最近傍法: 最近傍法の決定境界は非常に複雑ではなく、データポイント間の微細な変化に敏感です。決定境界はデータポイントを結ぶ直線や曲線のような形状を取ります。

k近傍法: k近傍法は、kの値に依存して決定境界の複雑性を制御できます。kが小さい場合、境界は複雑になり、kが大きい場合、境界は滑らかになります。

4. 計算コスト

最近傍法とk近傍法における「計算コスト」は、これらのアルゴリズムの計算的な負荷や実行時間に関連する要因を指します。

最近傍法: 最近傍法は計算コストが低いため、大規模なデータセットでも使用できます。ただし、予測時にすべてのデータポイントとの距離を計算する必要があります。

k近傍法: k近傍法は計算コストが高い傾向があり、kの値が大きい場合、より多くの距離計算が必要です。大規模なデータセットに対しては計算上の課題があることがあります。

最近傍法とk近傍法は、それぞれの利点と制約を持っており、選択肢はタスクやデータによって異なります。適切なアルゴリズムの選択は、実際の問題の性質によります。外れ値に対してロバストである必要がある場合や、複雑な決定境界を必要とする場合にはk近傍法が有用であり、計算コストが問題でない場合に適しています。最近傍法は、単純な実装と速度が求められる場合に選択されることがあります。

まとめ

最近傍法とk近傍法は、シンプルで理解しやすいアルゴリズムであり、多くの実際の問題に適用できます。これらの手法を理解し、Pythonを使用して実装することは、機械学習の初学者にとって重要なスキルです。

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑 [ 秋庭 伸也 ]