K-Nearest Neighbors (KNN)
K-Nearest Neighbors(KNN)を探究します。この教師あり学習アルゴリズムが分類や回帰のためにどのように機能するか、視覚検索での使用法、そしてUltralytics YOLO26との統合について学びましょう。
K-Nearest Neighbors (KNN) は、教師あり学習の分野で分類タスクと回帰タスクの両方に使用される、堅牢で直感的なアルゴリズムです。そのシンプルさが特徴のKNNは、トレーニングフェーズでモデルを構築したりパラメータを学習したりしないため、「怠惰学習(lazy learner)」と分類されることがよくあります。その代わり、トレーニングデータセット全体を記憶し、予測が要求されたときにのみ計算を実行します。このアルゴリズムの核心は特徴の類似性に基づいています。つまり、類似した属性を持つデータポイントは、多次元特徴空間内で互いに近い場所に存在するという前提に立っています。
Link to this sectionアルゴリズムの動作#
K-Nearest Neighborsのメカニズムは、距離計算によって駆動されます。新しいクエリポイントが導入されると、アルゴリズムは保存されたデータセットを検索し、新しい入力に最も近い「K」個のトレーニングサンプルを特定します。
-
距離測定: システムは、クエリポイントとデータベース内の他のすべてのポイント間の距離を計算します。最も一般的な指標は、ポイント間の直線距離を測定するユークリッド距離です。データの種類によっては、マンハッタン距離(タクシー幾何学)やミンコフスキー距離などの他の指標が使用される場合もあります。
-
近傍選択: 距離を計算した後、アルゴリズムはそれらをソートし、上位「K」個の最も近いエントリを識別します。
-
意思決定: - 分類の場合: アルゴリズムは「多数決」システムを使用します。K個の近傍の中で最も頻繁に出現するクラスラベルが、クエリポイントに割り当てられます。これは基本的な画像分類タスクで広く使用されています。 - 回帰の場合: 予測は、K個の近傍の値を平均化して連続変数を推定することで計算されます。
Link to this section適切な「K」の選択#
最適な「K」の値を選択することは、ハイパーパラメータ調整における重要なステップです。Kの選択は、モデルのパフォーマンスと新しいデータに対する汎化能力に大きな影響を与えます。
- 低いK値: 小さなK(例:K=1)は、モデルをデータ内のノイズや外れ値に対して非常に敏感にし、過学習を引き起こす可能性があります。
- 高いK値: 大きなKは決定境界を滑らかにし、ノイズの影響を低減しますが、個別のパターンを曖昧にしてしまう可能性があり、結果として未学習を招くことがあります。
Link to this section実社会での応用#
ディープニューラルネットワークと比較してそのシンプルさは際立っていますが、KNNは現代のAI、特に高度な特徴抽出技術と組み合わせた場合に非常に有効であり続けています。
- レコメンデーションシステム: KNNは、メディアストリーミングやeコマースにおける協調フィルタリングを容易にします。閲覧履歴や購買行動が類似しているユーザー(近傍)を特定することで、プラットフォームは「最も近い近傍」の好みに基づいて、ユーザーが好みそうな商品を提案できます。
- 異常検知: サイバーセキュリティや金融の分野では、KNNは異常検知に使用されます。トランザクションやネットワークアクティビティは特徴空間にマッピングされ、「正常」なアクティビティの密集したクラスターから遠く離れた新しいデータポイントは、不正やセキュリティ侵害の可能性があるとしてフラグが立てられます。
- Visual Search: Modern vector search engines often rely on Approximate Nearest Neighbor (ANN) algorithms—an optimized variation of KNN—to rapidly retrieve similar images based on high-dimensional embeddings generated by models like YOLO26.
Link to this section課題と考慮事項#
While effective, KNN faces the curse of dimensionality. As the number of features (dimensions) increases, data points become sparse, and distance metrics lose their effectiveness. Additionally, because it stores all training data, KNN can be memory-intensive and suffer from high inference latency on large datasets. To address this, practitioners often preprocess data using dimensionality reduction techniques like Principal Component Analysis (PCA) or use specialized data structures like KD-Trees to speed up the search. For enterprise-grade scaling of datasets and model training, utilizing the Ultralytics Platform can help manage the compute resources required for preprocessing complex data.
Link to this sectionKNNとK-Meansの区別#
名前が似ているために混同されやすいため、K-Nearest NeighborsとK-Meansクラスタリングを区別することが重要です。
- KNNは、ラベル付きデータを使用して予測を行う教師あり学習アルゴリズムです。
- K-Meansは、構造的な類似性に基づいてラベルのないデータをグループ化するために使用される**教師なし学習**アルゴリズムです。
Link to this section実装例#
次のコードスニペットは、一般的なScikit-learnライブラリを使用したシンプルなKNN分類ワークフローを示しています。コンピュータビジョンの文脈では、入力となる「特徴」は、通常YOLO26のようなディープラーニングモデルによって抽出された後、KNN分類器に渡されます。
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)")





