K-Nearest Neighbors (KNN)
K-Nearest Neighbors(KNN)を探究します。この教師あり学習アルゴリズムが分類や回帰のためにどのように機能するか、視覚検索での使用法、そしてUltralytics YOLO26との統合について学びましょう。
K-Nearest Neighbors (KNN) は、supervised learningの分野において分類と回帰の両方のタスクに使用される、ロバストで直感的なアルゴリズムです。そのシンプルさが特徴であるKNNは、トレーニング段階でモデルを構築したりパラメータを学習したりしないため、「遅延学習器(レジー・ラーナー)」に分類されることがよくあります。代わりに、training dataセット全体を記憶し、予測がリクエストされた場合にのみ計算を実行します。アルゴリズムの核心となる原則は特徴量の類似性に依存しており、類似した属性を持つデータポイントは多次元特徴空間内で互いに近い近傍に存在するという前提に基づいています。
アルゴリズムの動作#
K-Nearest Neighborsのメカニズムは、距離計算によって駆動されます。新しいクエリポイントが導入されると、アルゴリズムは保存されたデータセットを検索し、新しい入力に最も近い「K」個のトレーニングサンプルを特定します。
-
距離測定: システムは、クエリポイントとデータベース内の他のすべてのポイントとの間の距離を計算します。最も一般的なメトリックは点間の直線距離を測定するEuclidean distanceです。データタイプに応じて、Manhattan distance(タクシー幾何学)やMinkowski distanceなどの他のメトリックが使用される場合があります。
-
近傍選択: 距離を計算した後、アルゴリズムはそれらをソートし、上位「K」個の最も近いエントリを識別します。
-
意思決定: - 分類の場合: アルゴリズムは「多数決」システムを使用します。K個の近傍の間で最も頻繁に出現するクラスラベルがクエリポイントに割り当てられます。これは基本的なimage classificationタスクで広く使用されています。 - 回帰の場合: 予測は、K個の最も近い近傍の値を平均化して連続変数を推定することによって計算されます。
適切な「K」の選択#
'K'の最適な値を選択することは、hyperparameter tuningにおいて重要なステップです。Kの選択は、モデルのパフォーマンスと、新しいデータへ汎化する能力に大きな影響を与えます。
- 低いK値: 小さなK(例:K=1)は、データ内のノイズや外れ値に対してモデルを非常に敏感にし、overfittingにつながる可能性があります。
- 高いK値: 大きなKは決定境界を滑らかにし、ノイズの影響を軽減しますが、明確なパターンをぼやけさせる可能性があり、その結果underfittingを招きます。
実社会での応用#
ディープニューラルネットワークと比較してシンプルであるにもかかわらず、KNNは、特に高度なfeature extraction技術と組み合わせた場合に、現代のAIにおいて非常に高い関連性を維持しています。
- 推薦システム: KNNは、メディアストリーミングやEコマースにおけるcollaborative filteringを容易にします。同様の視聴履歴や購入行動を持つユーザー(近傍)を特定することで、プラットフォームは「最も近い近傍」の好みに基づいてユーザーが楽しむ可能性の高い商品を提案できます。
- 異常検知: サイバーセキュリティや金融において、KNNはanomaly detectionに使用されます。トランザクションやネットワークアクティビティが特徴空間にマッピングされ、「正常な」アクティビティの密集したクラスターから遠く離れた位置にある新しいデータポイントは、潜在的な不正行為やセキュリティ侵害としてフラグが立てられます。
- ビジュアル検索: 現代のvector searchエンジンは、YOLO26などのモデルによって生成された高次元のembeddingsに基づいて類似画像を迅速に取得するために、KNNの最適化されたバリエーションである近似近傍探索(ANN)アルゴリズムに依存することがよくあります。
課題と考慮事項#
効果的である一方で、KNNはcurse of dimensionality(次元の呪い)に直面します。特徴量(次元)の数が増加するにつれて、データポイントはスパース(疎)になり、距離メトリックはその有効性を失います。さらに、すべてのトレーニングデータを保存するため、KNNはメモリを大量に消費し、大規模なデータセットでは高いinference latencyに悩まされる可能性があります。これに対処するため、実務者は、Principal Component Analysis (PCA)などのdimensionality reduction技術を使用してデータを前処理したり、KD-Treesのような特殊なデータ構造を使用して検索を高速化したりすることがよくあります。データセットやモデルトレーニングのエンタープライズグレードのスケーリングには、Ultralytics Platformを利用することで、複雑なデータの前処理に必要な計算リソースの管理を支援できます。
KNNとK-Meansの区別#
K-Nearest NeighborsをK-Means clusteringと区別することが重要です。名前が似ているため混乱を招くことがよくあるためです。
- KNNは、ラベル付きデータを使用して予測を行う教師あり学習アルゴリズムです。
- K-Meansは、構造的な類似性に基づいてラベルのないデータをクラスターにグループ化するために使用される**unsupervised learning**アルゴリズムです。
実装例#
次のコードスニペットは、人気のある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)")





