K-Nearest Neighbors (KNN) は、分類と回帰の両方に使用できるシンプルで直感的な機械学習アルゴリズムです。以下にKNNの主要な特徴と概念をまとめます:
KNNの基本概念
- 原理:
新しいデータポイントを分類する際に、そのデータポイントに最も近い K 個の訓練データポイントを参照し、多数決で分類を決定します。 - 距離の計算:
データポイント間の距離を計算するために、通常はユークリッド距離が使用されます:d(p,q)=∑i=1n(pi−qi)2d(p,q)=∑i=1n(pi−qi)2ここで、$p$ と $q$ は n 次元空間内の2つのポイントです。 - K の選択:
K の値は、モデルの性能に大きな影響を与えます。一般的に、クロスバリデーションを使用して最適な K を選択します。
KNNのアルゴリズム
- K の値を選択する
- 新しいポイントと全ての訓練データポイントとの距離を計算する
- 距離に基づいて K 個の最近傍ポイントを選択する
- 分類の場合:K 個のポイントの多数決でクラスを決定する
回帰の場合:K 個のポイントの平均値を予測値とする
KNNの利点
- シンプルで直感的
- トレーニングフェーズが不要(怠惰学習)
- 新しいデータに対して容易に適応可能
KNNの欠点
- 計算コストが高い(特に大規模データセットの場合)
- メモリ使用量が多い
- 特徴のスケールに敏感
応用例
- 推薦システム
- パターン認識
- 異常検出
- 画像処理
実装例 (Python/scikit-learn)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# データの準備
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルの作成と学習
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# 予測
y_pred = knn.predict(X_test)
# 精度の評価
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
KNNは、その単純さと直感的な性質から、機械学習の入門や基準モデルとしてよく使用されます。しかし、大規模なデータセットや高次元のデータに対しては、計算コストやメモリ使用量の問題から、他のアルゴリズムが選択されることが多いです。