クラスタリングアルゴリズム
クラスタリングは、特性やパターンに基づいて類似したデータポイントをグループ化することに焦点を当てた教師なし機械学習モデルです。事前定義されたラベルに依存するのではなく、クラスタリングはデータ内の自然な構造を発見するため、探索的分析やセグメンテーションに特に有用です。クラスタリングの仕組みをより深く掘り下げ、効果的なクラスタリングモデルを構築するために使用できるさまざまなタイプのクラスタリングアルゴリズムを探ってみましょう。
以下は、Catalyst QuickMLでサポートされているクラスタリングアルゴリズムと、そのクラスタリングタイプ、説明、実世界のユースケース、および主要なパラメータです。
K-Means
説明: K-Meansは、各クラスタ内の分散を最小化することでデータをk個のクラスタに分割します。分散は、データポイントとそのクラスタ重心間の二乗ユークリッド距離の合計として測定されます。2つのステップを反復的に実行することで動作します:(1)各データポイントを最も近い重心に割り当て(ハード割り当て)、(2)クラスタ内のすべてのポイントの平均として重心を再計算します。このプロセスは、割り当てが変わらなくなるか、最大イテレーション数に達するまで繰り返されます。
数学的公式:
min(C1, C2, ..., Ck) Σ(i=1 to k) Σ(x ∈ Ci) ||x − μi||²
各要素の説明:
- Ci = クラスタi
- μi = クラスタiの重心(平均)
- ∣∣x−μi∣∣2 = データポイントxと重心μi間の二乗ユークリッド距離
ユースケース: 小売企業はK-Meansを使用して、消費習慣に基づいて顧客を「バジェット」「レギュラー」「プレミアム」などのグループにセグメント化します。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | アルゴリズムが作成するクラスタの数を定義し、それに応じて生成される重心の数を決定します。適切な値の選択は重要で、クラスタが少なすぎるとデータが過度に単純化され、多すぎると過学習につながる可能性があります。 | int | [1, n_rows] | 8 |
| init | クラスタリングのイテレーションが始まる前に重心を初期化するために使用される方法を指定します。 | string | {'k-means++', 'random'} | 'k-means++' |
| max_iter | K-Meansアルゴリズムが1回の実行で行う最大イテレーション数を決定します。 | int | [1, ∞) | 300 |
| algorithm | 使用するK-Meansアルゴリズムの特定のバリアントを示します。 | string | {'lloyd', 'elkan'} | 'lloyd' |
MiniBatchKMeans
説明: MiniBatchKMeansは、各イテレーションでデータセット全体ではなく、データの小さなランダムサブセット(ミニバッチ)を処理する、K-Meansのより高速でメモリ効率の良いバージョンです。これらのミニバッチを使用して重心を更新することで、標準のK-Meansに近い結果を出しながらはるかに速く収束します。これにより、フルK-Meansの実行が遅すぎるかリソース集約的になる大規模データセットやストリーミングデータに特に有用です。
数学的公式:
min(C1, C2, ..., Ck) Σ(i=1 to k) Σ(x ∈ Bt ∩ Ci) ||x − μi||²
Btはイテレーションtにおけるランダムなミニバッチです。
ユースケース: 数百万のユーザーを持つEコマースプラットフォームが、製品レコメンデーションのためにリアルタイムで閲覧行動をクラスタリングします。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成する重心の数を定義します。 | int | [1, n_rows] | 8 |
| init | 重心の初期化に使用する方法を指定します。 | string | {'k-means++', 'random'} | 'k-means++' |
| max_iter | K-Meansアルゴリズムが1回の実行で行う最大イテレーション数を決定します。 | int | [1, ∞) | 300 |
| batch_size | ミニバッチのサイズ。 | int | [1, ∞) | 1024 |
Fuzzy C-Means
説明: Fuzzy C-MeansはK-Meansに似ていますが、ソフト割り当てを可能にし、各データポイントが異なる帰属度で複数のクラスタに属することができます。各ポイントを単一のクラスタに割り当てるのではなく、Fuzzy C-Meansは各重心からのポイントの距離に基づいて、すべてのクラスタに対する帰属確率を計算します。これはクラスタが重なるデータに特に有用で、ハードな選択を強制するのではなく、帰属のよりニュアンスのあるビューを提供します。
数学的公式:
J = Σ(i=1 to k) Σ(j=1 to n) uij^m ||xj − ci||²
各要素の説明:
- uij = クラスタiにおけるデータポイントxjの帰属度
- m = ファジネスパラメータ(m>1)
- ci = クラスタiの重心
ユースケース: 音楽アプリが、複数のジャンル(ポップ、ロック、エレクトロニック)にまたがる嗜好が重なるユーザーをグループ化します。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 初期化するセンターの数を定義します。 | int | [1, n_rows] | 8 |
K-Medians
説明: K-MediansはK-Meansのように動作しますが、クラスタセンターの計算に平均ではなく中央値を使用します。この小さな変更により、中央値は極端な値の影響を受けにくいため、アルゴリズムは外れ値に対してより堅牢になります。アルゴリズムはポイントを最も近いクラスタセンターに割り当てることとセンターを再計算することを交互に行いますが、中央値を使用することで、歪んだ分布や重い裾を持つ分布において、典型的なデータポイントをよりよく表すクラスタを生成します。
数学的公式:
min(C1, ..., Ck) Σ(i=1 to k) Σ(x ∈ Ci) ||x − mi||
miはクラスタi内のすべてのポイントの中央値です。
ユースケース: 医療機関はK-Mediansを使用して、中央値の治療費や入院期間に基づいて患者をグループ化し、例外的に高額な請求や異常に長い入院をした少数の患者によってクラスタが歪むことを防ぎます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 割り当てるクラスタの数を定義します。 | int | [1, n_rows] | 8 |
K-Modes
説明: K-Modesはカテゴリカルデータのクラスタリングのために設計されています。平均をモード(各クラスタ内で最も頻度の高いカテゴリ値)に置き換え、単純なマッチング非類似度指標を使用してポイントをクラスタに割り当てます。これにより、数値的な距離が意味をなさないシナリオ(嗜好や製品カテゴリによる顧客のクラスタリングなど)に適しています。アルゴリズムはクラスタモードが変わらなくなるまで反復的に更新し、最も一般的なカテゴリ値によって定義されるグループを生成します。
数学的公式:
min(C1, ..., Ck) Σ(i=1 to k) Σ(x ∈ Ci) d(x, θi)
d(x,θi)はxのカテゴリカル属性とモードθi間の不一致の数です。
ユースケース: 小売業者は「オンライン/オフライン優先」「エレクトロニクス/衣料品」「ディスカウント/ラグジュアリー」などのカテゴリカルデータを使用して顧客をクラスタリングします。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成する重心の数を定義します。 | int | [1, n_rows] | 8 |
| max_iter | k-modesアルゴリズムの1回の実行における最大イテレーション数を決定します。 | int | [1, ∞) | 100 |
| init | 初期化に使用する方法を指定します。 | string | {'Huang', 'Cao', 'random'} | 'Cao' |
Affinity Propagation
説明: Affinity Propagationは、データポイントのペア間で類似度メッセージを交換することでクラスタリングを行い、一部のポイントがクラスタセンターとして機能する「エグゼンプラー」として識別されるまで続けます。K-Meansとは異なり、事前にクラスタ数を指定する必要はありません。アルゴリズムは入力された類似度と各ポイントがエグゼンプラーになる可能性を制御する「preference」パラメータに基づいて、形成するクラスタ数を自動的に決定します。これにより、自然なクラスタ数が不明な場合に特に有用です。
ユースケース: カスタマーサービスでは、事前にカテゴリ数を知ることなく、受信サポートクエリをクラスタにグループ化できます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| damping | ダンピングファクターを指定します。 | float | [0.5, 1.0) | 0.5 |
| max_iter | 最大イテレーション数を決定します。 | int | [1, ∞) | 200 |
| convergence_iter | 推定クラスタ数が変化せずに維持される連続イテレーション数を指定し、その後アルゴリズムが収束を宣言します。 | int | [1, ∞) | 15 |
| affinity | データポイント間で使用される類似度の測定方法を決定します。 | string | {'precomputed', 'euclidean'} | 'euclidean' |
Birch – Balanced Iterative Reducing and Clustering using Hierarchies
説明: BIRCHは大規模またはストリーミングデータセット向けに設計されています。データポイントのコンパクトな要約を格納するCF(Clustering Feature)ツリーを段階的に構築し、これらの要約を使用してクラスタリングを実行します。CFツリーにより、BIRCHは完全なデータセットを一度に格納または処理することなく、入力データを迅速にグループ化できます。ツリー構築後、最終的なグローバルクラスタリングステップ(多くの場合K-Meansを使用)でクラスタを精緻化できます。このアプローチにより、BIRCHは非常にメモリ効率が良くスケーラブルになります。
ユースケース: IoTアプリケーションでは、Birchはスマートシティの交通監視など、連続的なセンサーデータのストリームをリアルタイムで意味のあるグループにクラスタリングできます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| threshold | 最も近い既存のサブクラスタとマージする際のサブクラスタの最大半径を定義します。 | float | (0, 1.0) | 0.5 |
| branching_factor | 各ノード内のCFサブクラスタの最大数を決定します。 | int | [1, ∞) | 50 |
| n_clusters | CFツリー構築後に形成する最終的なクラスタ数を決定します。 | int, None | [1, ∞) | 3 |
K-Prototypes
説明: K-PrototypesはK-MeansとK-Modesを拡張して、数値変数とカテゴリカル変数の両方を含むデータセットを処理します。数値特徴量には平均、カテゴリカル特徴量にはモードを使用してクラスタセンターを計算し、両者の影響のバランスを取る重みパラメータを使用して組み合わせます。これにより、大規模な前処理や変換なしに混合型データのクラスタリングが可能になります。
数学的公式:
d(x, y) = Σ(j ∈ num) (xj − yj)² + γ Σ(j ∈ cat) δ(xj, yj)
各要素の説明:
- δ(xj,yj)=等しい場合は0、それ以外は1
- γ = 数値距離とカテゴリカル距離のバランスを取る重み
ユースケース: HR分析では、企業は数値データ(経験年数、給与など)とカテゴリカルデータ(部門、役職など)の混合データに基づいて従業員をグループ化し、労働力のパターンを特定できます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成する重心の数を指定します。 | int | [1, n_rows] | 8 |
| max_iter | k-modesアルゴリズムの1回の実行における最大イテレーション数を決定します。 | int | [1, ∞) | 100 |
| init | 初期化のための方法を指定します。 | string | {'Huang', 'Cao', 'random'} | 'Cao' |
| categorical | カテゴリカルカラムのリストを示します。 | list, None | カラムのリスト | None |
MeanShift
説明: MeanShiftは、データポイントを確率密度関数からのサンプルとして扱い、最も高い密度の領域(モード)に向かって反復的にシフトすることでクラスタを見つけます。同じモードに収束するポイントがクラスタを形成します。このアプローチはクラスタ数を自動的に決定でき、任意の形状のクラスタに対してうまく機能しますが、パフォーマンスはバンド幅(密度推定に使用されるカーネルサイズ)の選択に依存します。
数学的公式:
m(x) = Σ(xi ∈ N(x)) K(xi − x) xi / Σ(xi ∈ N(x)) K(xi − x)
各要素の説明:
- Kはカーネル関数(例:ガウシアン)
- N(x)はxの周りの近傍
ユースケース: 「空」「水」「陸地」などの領域が類似ピクセルのクラスタを形成する画像セグメンテーション。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| bin_seeding | Trueに設定すると、アルゴリズムはすべてのデータポイントを使用する代わりに、入力データのビン化バージョンを使用してカーネルの位置を初期化します。これにより初期シードの数が減少し、特に大規模データセットでアルゴリズムが高速になります。 | bool | {False, True} | False |
| cluster_all | 未割り当てのポイント(オーファン)の処理方法を制御します。Trueの場合、すべてのポイントが最も近いクラスタに強制的に割り当てられます。Falseの場合、クラスタに属さないオーファンポイントは-1(ノイズ)としてラベル付けされます。 | bool | {False, True} | True |
| max_iter | 各シードポイントに対して許可される最大イテレーション数を指定します。シードポイントがこの制限までに収束しなかった場合、そのシードに対するプロセスは停止します。 | int | [1, ∞) | 300 |
DBSCAN
説明: DBSCAN(Density-Based Spatial Clustering of Applications with Noise)は、密接にパックされたポイント(密な領域)をクラスタにグループ化し、低密度領域に単独で存在するポイントをノイズとしてラベル付けします。事前にクラスタ数を指定する必要がないため、不規則な形状のクラスタを持つデータセットや、外れ値を明示的に識別したい場合に最適です。パフォーマンスはeps(近傍半径)とmin_samples(密な領域内の最小ポイント数)パラメータに大きく依存します。
数学的公式:
|Nε(p)| ≥ minPts
pはコアポイントであり、Nε(p) = pからの距離ε以内のポイントの集合です。
ユースケース: 銀行システムが正常な取引パターンをクラスタリングし、疑わしい孤立したパターンを不正としてフラグ付けします。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| eps | 2つのポイントが近傍と見なされるための最大距離を定義します。このパラメータはクラスタのサイズと密度に強く影響するため、DBSCANで最も重要な設定の1つです。 | float | (0, ∞) | 0.5 |
| min_samples | データポイントがコアポイントとして分類されるために必要な近傍サンプル(ポイント自体を含む)の最小数を指定します。領域がクラスタを形成するためにどの程度密でなければならないかを制御します。 | int | [1, ∞) | 5 |
| metric | データポイント間の類似度を計算するために使用される距離尺度を決定します。 | string | {'cityblock', 'cosine', 'euclidean', 'l1', 'l2', 'manhattan', 'minkowski'} | 'euclidean' |
| algorithm | ポイント間の距離を効率的に求めるために使用される最近傍探索方法を示します。 | string | {'auto', 'ball_tree', 'kd_tree', 'brute'} | 'auto' |
CLARA
説明: CLARA(Clustering Large Applications)は、データセット全体ではなく、データの複数の小さなランダムサンプルをクラスタリングすることで動作する、PAM(Partitioning Around Medoids)アルゴリズムのスケーラブルなバージョンです。その後、完全なデータセットでクラスタリング品質を評価し、最適なメドイドのセットを選択します。このサンプリングアプローチにより、PAMを直接実行すると計算コストが高くなる大規模データセットに対してCLARAが実用的になります。
数学的公式:
データの小さなランダムサンプルStに対してK-Medoidsを実行します:
min(M) Σ(x ∈ St) d(x, m(x))
その後、完全なデータセットで総コストを評価し、最適なサンプルを選択します。
ユースケース: 通信事業者がデータセット全体ではなくデータサンプルを使用して、数百万の通話記録を「国際通話者」などのカテゴリにクラスタリングします。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成するメドイドの数を決定します。 | int | [1, n_rows] | 8 |
| max_iter | フィッティング時の最大イテレーション数を指定します。 | int | [1, ∞) | 300 |
CLARANS
説明: CLARANS(Clustering Large Applications based on Randomized Search)は、異なる可能なメドイド構成を探索するためにランダム化探索技術を使用することでCLARAを改善しています。すべての可能なスワップをチェックするのではなく、各ステップで近傍のサブセットのみを探索するため、効率とクラスタリング品質のバランスを取ります。これにより、CLARANSは網羅的な計算なしに大規模データセットに対してほぼ最適な解を見つけるのに優れています。
数学的概念:
ランダム化されたローカルスワップを使用して、より良いメドイドを反復的に探索します:
min(M) Σ(x ∈ D) d(x, m(x))
CLARANSはすべての可能性ではなくランダムな近傍解を探索し、速度と精度のバランスを取ります。
ユースケース: 都市交通局が移動パターンに基づいてバスルートをグループ化し、スケジューリングを最適化します。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成するメドイドの数を決定します。 | int | [1, n_rows] | 8 |
| maxneighbor | 検査する近傍の最大数を指定します。 | int | [1, ∞) | 5 |
K-Medoids
説明: K-MedoidsはK-Meansに似ていますが、クラスタセンターとしてデータポイントの平均ではなく、メドイドと呼ばれる実際のデータポイントを使用します。メドイドは重心と比較して極端な値の影響を受けにくいため、ノイズや外れ値に対してより堅牢です。K-Medoidsは、データセットに多くの外れ値が含まれる場合や、実際のデータポイントによるクラスタの解釈可能性が重要な場合によく使用されます。
数学的公式:
min(M) Σ(i=1 to k) Σ(x ∈ Ci) d(x, mi)
各要素の説明:
- M={m1,…,mk}はメドイド(実際のデータポイント)
- d(x,mi)は距離メトリック(例:ユークリッド、マンハッタン)
ユースケース: 医療では、K-Medoidsを使用して症状と検査結果に基づいて患者記録をクラスタリングし、実際の患者プロファイルを代表的なメドイドとして使用できます。これにより、異常に稀なまたは極端な医学的状態の患者によってクラスタが歪むことを防ぎます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_clusters | 形成するクラスタの数と生成するメドイドの数を決定します。 | int | [1, n_rows] | 8 |
| init | メドイドの初期化方法を指定します。 | string | {'random', 'heuristic', 'k-medoids++', 'build'} | 'heuristic' |
| metric | データポイント間の類似度または非類似度を測定するために使用される距離関数を指定します。 | string | {'cityblock', 'cosine', 'euclidean', 'haversine', 'l2', 'l1', 'manhattan', 'nan_euclidean'} | 'euclidean' |
| method | 使用するアルゴリズムを決定します。'alternate'はより高速で、'pam'はより正確です。 | string | {'pam', 'alternate'} | 'alternate' |
| max_iter | アルゴリズムがデータセット全体に対して実行する最大イテレーション数を定義します。クラスタリングプロセスがこの制限に達する前に収束しない場合、現在のクラスタ割り当てを返して停止します。 | int | [1, ∞) | 300 |
Gaussian Mixture Model (GMM)
説明: GMMモデルは、データを各クラスタを表す複数のガウス(正規)分布の混合としてモデル化することを前提としています。各ポイントを正確に1つのクラスタに割り当てるK-Meansとは異なり、GMMは各ポイントが各クラスタに属する確率を割り当てます(ソフトクラスタリング)。モデルパラメータ(平均、共分散、混合重み)は期待値最大化(EM)アルゴリズムを使用して最適化されます。これにより、GMMは異なる形状、サイズ、方向のクラスタを捉えることができ、データが十分に分離されていない場合や楕円形の分布を持つ場合にK-Meansよりも柔軟です。
数学的公式:
p(x) = Σ(i=1 to k) πi 𝓝(x | μi, Σi)
各要素の説明:
- πi = コンポーネントiの重み(確率)
- μi = 平均ベクトル
- Σi = 共分散行列
- N(x∣μi,Σi) = 多変量ガウス分布
ユースケース: マーケティング分析では、GMMを使用して行動や消費パターンに基づいて顧客を重なり合うグループにクラスタリングします。各顧客は複数のセグメントに属する確率を持つことができます。
主要なパラメータ:
| パラメータ | 説明 | データ型 | 設定可能な値 | デフォルト値 |
|---|---|---|---|---|
| n_components | 混合コンポーネントの数を指定します。 | int | (0, ∞) | 2 |
| covariance_type | 共分散行列の構造を指定することで、クラスタの形状を定義します。 | string | {'full', 'tied', 'diag', 'spherical'} | 'full' |
| max_iter | 期待値最大化(EM)アルゴリズムの最大イテレーション数を設定します。 | int | [1, ∞) | 100 |
| init_params | EMアルゴリズムが開始する前に初期パラメータ(重み、平均、共分散)がどのように設定されるかを決定します。 | string | {'kmeans', 'k-means++', 'random', 'random_from_data'} | 'kmeans' |
最終更新日 2026-03-05 11:43:24 +0530 IST
Yes
No
Send your feedback to us