K-Means Clustering
教師なし学習のためのK-Meansクラスタリングを探究します。このアルゴリズムがどのようにデータをパーティショニングし、AIアプリケーションを強化し、Ultralytics YOLO26のようなモデルに情報をもたらすかを学びましょう。
K-Means法は、教師なし学習の分野で基本かつ広く利用されているアルゴリズムで、ラベルなしデータの中に隠れた構造を見つけ出すよう設計されています。その主な目的は、データセットをクラスターと呼ばれる個別のサブグループに分割することであり、同じグループ内のデータポイントはできるだけ似通ったものにし、異なるグループのデータポイントは区別されるようにします。データマイニングや探索的データ分析の要として、K-Meansはデータサイエンティストが事前のラベルや人間による監視を必要とせずに、複雑な情報を自動的に整理して扱いやすいカテゴリーに分類することを可能にします。
Link to this sectionアルゴリズムの仕組み#
K-Meansの運用は反復的であり、学習データの最適なグループ分けを決定するために距離指標に依存します。このアルゴリズムは、項目を K 個のクラスターに編成することによって機能します。ここで、各項目は最も近い平均値、つまり重心に属するクラスターに割り当てられます。このプロセスにより、各グループ内の分散が最小化されます。ワークフローは一般的に以下のステップに従います。
-
Initialization: The algorithm selects K initial points as centroids. These can be chosen randomly or via optimized methods like k-means++ to speed up convergence.
-
割り当て: データセット内の各データポイントは、特定の距離指標(最も一般的なのはユークリッド距離)に基づいて、最も近い重心に割り当てられます。
-
更新: 重心は、そのクラスターに割り当てられたすべてのデータポイントの平均(平均値)をとることによって再計算されます。
-
反復: 重心が大きく移動しなくなるか、最大反復回数に達するまで、ステップ2と3が繰り返されます。
適切なクラスター数 (K) を決定することは、このアルゴリズムを使用する上で重要な側面です。実務者は、エルボー法のような手法を使用したり、シルエットスコアを分析したりして、得られたクラスターがどの程度適切に分離されているかを評価することがよくあります。
Link to this sectionAIにおける現実世界の応用#
K-Means法は汎用性が非常に高く、単純化やデータ前処理のためにさまざまな業界で利用されています。
- 画像圧縮と色量子化: コンピュータビジョン (CV)において、K-Meansはピクセルの色をクラスター化することで画像のファイルサイズを削減するのに役立ちます。数千の色を少数の主要な色にグループ化することで、アルゴリズムは画像の視覚的な構造を保持しながら、効果的に次元削減を実行します。この技術は、入力データを正規化するために、高度な物体検出モデルを学習させる前によく使用されます。
- 顧客セグメンテーション: 企業はクラスター化を活用して、購買履歴、人口統計、またはウェブサイトでの行動に基づいて顧客をグループ化します。これにより、小売におけるAIソリューションの重要な構成要素であるターゲットを絞ったマーケティング戦略が可能になります。高価値な買い物客や離脱リスクの高い顧客を特定することで、企業は効果的にメッセージを調整することができます。
- 異常検知: 「正常な」データクラスターの構造を学習することで、システムはどの重心からも遠く離れた外れ値を特定できます。これは金融における不正検知や、ネットワークセキュリティにおける異常検知において価値があり、標準的なパターンから逸脱した疑わしい活動にフラグを立てるのに役立ちます。
- アンカーボックス生成: 歴史的に、初期のYOLOバージョンなどの物体検出モデルは、学習データセットから最適なアンカーボックスを計算するためにK-Meansを利用していました。YOLO26のような最新のモデルは高度なアンカーフリー手法を利用していますが、K-Meansを理解することは検出アーキテクチャの進化を理解する上で依然として重要です。
Link to this section実装例#
Ultralytics Platformのようなディープラーニングフレームワークは複雑な学習パイプラインを処理しますが、K-Meansはデータセットの統計を分析するためによく使用されます。以下のPythonスニペットは、人気のあるScikit-learnライブラリを使用して、物体重心をシミュレートする2D座標をクラスター化する方法を示しています。
import numpy as np
from sklearn.cluster import KMeans
# Simulated coordinates of detected objects (e.g., from YOLO26 inference)
points = np.array([[10, 10], [12, 11], [100, 100], [102, 101], [10, 12], [101, 102]])
# Initialize K-Means to find 2 distinct groups (clusters)
kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(points)
# Output the cluster labels (0 or 1) for each point
print(f"Cluster Labels: {kmeans.labels_}")
# Output: [1 1 0 0 1 0] -> Points near (10,10) are Cluster 1, near (100,100) are Cluster 0Link to this section関連アルゴリズムとの比較#
プロジェクトに適したツールを選択するために、K-Meansと名前や機能が似ている他のアルゴリズムを区別することが重要です。
- K-Means vs. K近傍法 (KNN): これらは名前の中に「K」があるため、よく混同されます。K-Meansは、ラベルなしデータをクラスター化するために使用される教師なし学習アルゴリズムです。対照的に、K近傍法 (KNN)は、画像分類や回帰に使用される教師あり学習アルゴリズムであり、近傍の多数派クラスに基づいて予測を行うためにラベル付きデータに依存します。
- K-Means vs. DBSCAN: どちらもデータをクラスター化しますが、K-Meansはクラスターが球形であると仮定し、クラスター数を事前に定義する必要があります。DBSCANは密度に基づいてデータをグループ化し、任意の形状のクラスターを見つけることができ、ノイズの処理能力も優れています。このため、DBSCANはクラスター数が未知であり、不規則な構造を持つデータセット内の複雑な空間データに対して優れています。






