K-Means Clustering
教師なし学習のK-Means Clusteringについて説明します。このアルゴリズムがデータを分割し、AIアプリケーションを強化し、Ultralytics YOLO26のようなモデルに知見を与える仕組みを学びます。
K-Meansクラスタリングは、教師なし学習の分野で広く使用されている基本的なアルゴリズムで、ラベルなしデータ内の隠れた構造を明らかにするよう設計されています。主な目的は、データセットをクラスターと呼ばれる個別のサブグループに分割し、同じグループ内のデータポイント同士は可能な限り類似させ、異なるグループ間では明確に区別できるようにすることです。データマイニングと探索的分析の基盤となるK-Meansを使用すると、データサイエンティストは、あらかじめ定義されたラベルや人間による監視を必要とせず、複雑な情報を扱いやすいカテゴリーに自動的に整理できます。
アルゴリズムの仕組み#
K-Meansは反復的に動作し、距離メトリクスを使用してトレーニングデータの最適なグループ分けを決定します。アルゴリズムはデータ項目をK個のクラスターに整理し、各項目を最も近い平均値、つまり重心を持つクラスターに割り当てます。この処理により、各グループ内の分散が最小化されます。ワークフローは一般に次の手順に従います。
-
初期化: アルゴリズムは、重心としてK個の初期点を選択します。これらはランダムに選択することも、k-means++のような最適化手法で選択して収束を高速化することもできます。
-
割り当て: データセット内の各データポイントは、特定の距離メトリクス(最も一般的にはユークリッド距離)に基づいて、最も近い重心に割り当てられます。
-
更新: 各重心は、そのクラスターに割り当てられたすべてのデータポイントの平均値を計算して再算出されます。
-
反復: 重心が大きく移動しなくなるか、反復回数が最大値に達するまで、手順2と3を繰り返します。
クラスター数(K)を正しく決定することは、このアルゴリズムを使用するうえで重要な要素です。実務では、生成されたクラスターがどの程度明確に分離されているかを評価するために、エルボー法などの手法を使用したり、シルエットスコアを分析したりします。
AIにおける実世界の応用#
K-Meansクラスタリングは非常に汎用性が高く、簡略化やデータ前処理を目的として、さまざまな業界で利用されています。
- 画像圧縮と色量子化: コンピュータービジョン(CV)では、K-Meansによってピクセルの色をクラスター化し、画像のファイルサイズを削減できます。数千色を少数の主要な色にまとめることで、このアルゴリズムは画像の視覚的構造を維持しながら、効果的に次元削減を実行します。この手法は、高度な物体検出モデルのトレーニング前に、入力データを正規化する目的でよく使用されます。
- 顧客セグメンテーション: 企業は、購入履歴、人口統計情報、またはWebサイト上の行動に基づいて顧客をグループ化するために、クラスタリングを活用します。これにより、小売業におけるAIソリューションの重要な要素である、ターゲットを絞ったマーケティング戦略を実施できます。高価値顧客や解約リスクのある顧客を特定することで、企業はメッセージを効果的に最適化できます。
- 異常検知: 「正常な」データクラスターの構造を学習することで、システムはどの重心からも大きく離れた外れ値を特定できます。これは、金融分野での不正検知やネットワークセキュリティにおける異常検知に有用であり、標準的なパターンから逸脱する不審なアクティビティの検出に役立ちます。
- アンカーボックスの生成: 以前は、古いバージョンのYOLOなどの物体検出器が、トレーニングデータセットから最適なアンカーボックスを計算するためにK-Meansを使用していました。現在のモデルであるYOLO26などは高度なアンカーフリー手法を使用していますが、K-Meansを理解することは、検出アーキテクチャの進化を理解するうえで依然として重要です。
実装例#
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 0関連アルゴリズムとの比較#
プロジェクトに適切なツールを選択するには、K-Meansを、名前や機能が似ている他のアルゴリズムと区別することが重要です。
- K-MeansとK近傍法(KNN)の比較: これらは名前に「K」が含まれているため、混同されることがよくあります。K-Meansは、ラベルなしデータのクラスタリングに使用される教師なしアルゴリズムです。一方、K近傍法(KNN)は、画像分類や回帰に使用される教師あり学習アルゴリズムで、ラベル付きデータに基づき、近傍の多数派クラスを使用して予測を行います。
- K-MeansとDBSCANの比較: どちらもデータをクラスター化しますが、K-Meansはクラスターが球状であることを前提とし、クラスター数を事前に定義する必要があります。DBSCANは密度に基づいてデータをグループ化し、任意の形状のクラスターを検出でき、ノイズにも適切に対処できます。そのため、クラスター数が不明で、構造が不規則なデータセットに見られる複雑な空間データでは、DBSCANのほうが優れています。









