K-Nearest Neighbors (KNN)
K-Nearest Neighbors(KNN)について説明します。この教師あり学習アルゴリズムが分類と回帰で機能する仕組み、ビジュアル検索での利用、Ultralytics YOLO26との統合について学びます。
K最近傍法(KNN)は、分類と回帰の両方のタスクで教師あり学習の分野で使用される、堅牢で直感的なアルゴリズムです。KNNはシンプルであることから、トレーニングフェーズ中にモデルを構築したりパラメーターを学習したりしないため、「遅延学習器」と分類されることがよくあります。その代わり、トレーニングデータセット全体を記憶し、予測が要求されたときにのみ計算を実行します。このアルゴリズムの中核となる原理は特徴量の類似性に基づいており、多次元の特徴空間内では、属性が類似するデータポイント同士が近接して存在すると仮定します。
アルゴリズムの動作#
K最近傍法の仕組みは、距離の計算によって動作します。新しいクエリポイントが入力されると、アルゴリズムは保存されたデータセットを検索し、新しい入力に最も近い「K」個のトレーニングサンプルを見つけます。
-
距離の測定: システムは、クエリポイントとデータベース内の他のすべてのポイントとの距離を計算します。最も一般的な指標はユークリッド距離で、ポイント間の直線距離を測定します。データの種類に応じて、マンハッタン距離(タクシー幾何学)やミンコフスキー距離など、他の指標が使用される場合もあります。
-
近傍の選択: 距離を計算した後、アルゴリズムは距離を並べ替え、最も近い上位「K」個のエントリを特定します。
-
意思決定: - 分類の場合: アルゴリズムは「多数決」方式を使用します。K個の近傍の中で最も頻繁に現れるクラスラベルが、クエリポイントに割り当てられます。これは基本的な画像分類タスクで広く使用されています。 - 回帰の場合: K個の最近傍の値を平均し、連続変数を推定することで予測を算出します。
適切な「K」の選択#
「K」の最適な値を選択することは、ハイパーパラメーター調整における重要なステップです。Kの選択は、モデルの性能と新しいデータに対する汎化能力に大きく影響します。
- 低いK値: 小さいK(例: K=1)では、モデルがデータ内のノイズや外れ値に非常に敏感になり、過学習につながる可能性があります。
- 高いK値: 大きいKでは決定境界が平滑化され、ノイズの影響が軽減される一方で、明確なパターンがぼやける可能性があり、未学習が発生します。
実世界での利用例#
ディープニューラルネットワークと比較するとシンプルでありながら、KNNは現代のAIでも依然として高い関連性があり、特に高度な特徴抽出技術と組み合わせた場合に有用です。
- レコメンデーションシステム: KNNは、メディアストリーミングやeコマースにおける協調フィルタリングを実現します。視聴履歴や購入行動が類似するユーザー(近傍)を特定することで、プラットフォームは「最近傍」のユーザーの好みに基づいて、ユーザーが気に入る可能性の高い商品を提案できます。
- 異常検知: サイバーセキュリティや金融の分野では、KNNが異常検知に使用されます。取引やネットワークアクティビティは特徴空間にマッピングされ、「正常な」アクティビティの密なクラスタから大きく離れた新しいデータポイントは、不正行為やセキュリティ侵害の可能性があるとしてフラグ付けされます。
- ビジュアル検索: 最新のベクトル検索エンジンでは、高次元の埋め込みに基づいて類似画像を迅速に取得するため、KNNを最適化した変種である近似最近傍(ANN)アルゴリズムに依存することがよくあります。これらの埋め込みは、YOLO26などのモデルによって生成されます。
課題と考慮事項#
KNNは効果的である一方、次元の呪いに直面します。特徴量(次元)の数が増えるとデータポイントが疎になり、距離指標の有効性が失われます。さらに、KNNはすべてのトレーニングデータを保存するため、メモリを大量に消費する可能性があり、大規模なデータセットでは推論レイテンシが高くなることがあります。これに対処するため、実務では次元削減技術(主成分分析(PCA)など)を使用してデータを前処理したり、KD-Treesなどの特殊なデータ構造を使用して検索を高速化したりします。データセットとモデルのトレーニングをエンタープライズ規模でスケーリングする場合は、Ultralytics Platformを利用することで、複雑なデータの前処理に必要なコンピュートリソースを管理できます。
KNNとK-Meansの違い#
名前が似ているため混同されることが多いK最近傍法とK-Meansクラスタリングを区別することが重要です。
- KNNは、ラベル付きデータを使用して予測を行う教師あり学習アルゴリズムです。
- K-Meansは、構造上の類似性に基づいてラベルなしデータをクラスタにグループ化するために使用される**教師なし学習**アルゴリズムです。
実装例#
次のコードスニペットは、広く利用されているScikit-learnライブラリを使用した、シンプルなKNN分類ワークフローを示しています。コンピュータービジョンのコンテキストでは、入力の「特徴量」は通常、KNN分類器に渡す前に、YOLO26などのディープラーニングモデルによって抽出されます。
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")








