DSOC 研究員の吉村です。あまり外出できない日々が続いているので、読書に勤しんでおります。直接業務に関係の無いようなものでも、蓄積しておくことでどこかで役に立つだろうという気持ちで幅広いジャンルの本に手を出しては、本の山が部屋を埋め尽くしています。
さて、今回は k-center クラスタリングについて見ていきます。普段は教師なし学習のことを調べることがあまりなかったので、個人的には新鮮でした。それでは本題に入っていきましょう!
本記事のキーワード
- k-center
- p-center
- k-センター
k-center 問題とは
k-center クラスタリングの話をする前に k-center 問題 について説明します。予め与えられた空間またはグラフ上の点集合 を考えます。点集合 に含まれるようなサイズ の中心点集合 を選択することが k-center 問題の目的です。このとき、「点集合 の全ての要素に対して、最も近傍にある中心点との距離の最大値」が最小になるように 個の中心点を選ぶことが条件となります。
理解のために具体例で説明します。図1は、サイズが 10 の点集合 に対して、k=2 の時の k-center 問題の解答の例です。 (あくまでも図1は例示なので、必ずしも最適解になっていないことはご了承ください。) 図を見て分かるように、k-center 問題は言い換えると、 の全ての点を 内の中心点を中心とするできるだけ半径の小さい円で覆えるように中心点を選ぶ問題と言えます。
特に、距離空間の上の点や、各頂点が三角不等式を満たす完全グラフ上の頂点を扱う場合には、metric k-center 問題と言います。この性質は、最適化の際に用いられます。
metric k-center クラスタリング とは
metric k-center クラスタリングは、 metric k-center 問題に基づいてクラスタリングを実現する手法です。metric k-center 問題の厳密解を得るアルゴリズムは NP-hard である [*1] ことから、近似解を得ることを考えます。
それほど点の数が多くない metric k-center 問題に帰着できる場合には、greedy algorithm (貪欲法) を用いることが一般的です。そのアルゴリズムを下記に示します。
- 集合 から任意の点を一つ取ってきて、 に追加します。
- から最も遠い の点を取ってきて、 に追加します。
- 2.を になるまで繰り返します。
これは、 の計算量で2-近似解が得られる2-近似アルゴリズムです [*1]。-近似解は、簡単に言うと、得られる解により与えられる目的関数値が最適値の 倍よりも小さくなることを表します。k-center 問題の場合の目的関数値は、 の点と最近傍の中心点との距離のうち、最大の距離です。そのため、2-近似解は、最適な場合の半径の二倍の半径よりは、小さい目的関数値を返すことができると言うことになります。
次に、対象となる集合 の要素が非常に大きい場合を考えていきましょう。
extreme metric k-center クラスタリング
対象となる集合 の要素の数が非常に大きい metric k-center クラスタリングの場合を extreme metric k-center クラスタリングということにします。この場合、計算量 O(kn) が実用上かなり大きくなってしまうことになります。そこで、大規模なデータ集合に対しても適用できるように、分散処理を用いる近似アルゴリズムの研究がいくつかあります。
分散処理による近似アルゴリズムを考える場合には、近似解の性能は多少劣化してしまう可能性を許容した上で、うまくスケールさせる方法を考えることになります。そうした、手法の一つに DISTRIBUTED-CENTER アルゴリズムがあります[*2]。
DISTRIBUTED-k-CENTER アルゴリズム
このアルゴリズムは -近似解を得ることができます [*2]。ただし、 は集合 中の点の総数を表します。この近似解を得るためには、各マシンリソースあたり の空間計算量を利用し、全体で の時間計算量が必要となります。[*2] では、380万点くらいの大規模な集合に対してこのアルゴリズムを用いることで、高々 10 分前後の処理時間で近似解を得られることを実験的に示しました。ただし、このアルゴリズムは k-center 問題を解いていますが、最後に解として与えられる中心点集合 のサイズが k とは限らない点は注意が必要です。このアルゴリズムでは、中心点集合 のサイズが となることが分かっています。
さて、次にアルゴリズムを示します。DISTRIBUTED-k-CENTER アルゴリズムは、二つのフェーズから構成されます。
準備
各 Phase の内部で用いるアルゴリズム、SAMPLE-AND-SOLVE() を次に示します。ただし、 は点集合、 はサンプリング確率、 は中心点からの半径 です。
SAMPLE-AND-SOLVE() in [*2]
- を確率 で から i.i.d でサンプリングした点で構成。
- の全ての点を、最近傍の に対応する bag 集合 のいずれかに割り当てる。
- 各 ごとに分散処理で、下記の処理 4.~6.を行う。
- に対応する中心点集合 を考える。
- に含まれる点の内、 内の点との距離が 以上離れている点があれば、 内の点から最も距離が離れている点を に追加。
- に含まれる点全てが、 内の点との距離が 未満になるまで 5.を繰り返す。
- 最後に を返す。
Phase1
Phase1 では、UNIFORM-k-CENTER() というアルゴリズムで、仮の中心点集合を得ることが目的です。UNIFORM-k-CENTER() を下記に示します。ただし、 は点集合、 は中心点からの半径 です。
UNIFORM-k-CENTER() in [*2]
- に SAMPLE-AND-SOLVE() の結果を代入。
- とする。
- とする。
- とする。
- に SAMPLE-AND-SOLVE() の結果を代入。
- が になるまで 4.と5.を繰り返す。
- を返す。
Phase2
Phase2 では、Phase1 の結果 UNIFORM-k-CENTER() が得られているとして、次のアルゴリズムを実行します。
Phase2 of DISTRIBUTED-k-CENTER in [*2]
- とする。
- とする。
- に SAMPLE-AND-SOLVE() の結果を代入。
- とする。
- が になるまで 3.と4.を繰り返す。
- を返す。
この が最終的な k-center 問題の中心点集合になります。ただし、 は十分大きい定数です。
まとめ
今回は k-center 問題について取り上げました。まず、問題設定について紹介しました。次にある程度小さめの場合には貪欲法で2-近似解が得られること等を説明し、最後に点集合 のサイズが非常に大きい場合に分散処理で現実的な時間で解を得る方法を紹介しました。今回取り上げませんでしたが、k-center 問題については streaming setting についての研究もありますので、ご興味がある方は [*3] 等を見てみると良いかと思います。
次回は、また別のトピックを紹介します。もし今回の記事に興味を持ってくださった方は読者になるボタンを押してくださると嬉しいです。
*1:T. F. Gonzalez, "Clustering to Minimize the Maximum Intercluster Distance," in TCS, 1985.
*2:M. H. Bateni, H. Esfandiari, M. Fischer, and V. Mirrokni, "Extreme k-Center Clustering," in AAAI, 2021.
*3:M. Charikar, C. Chekuri, T. Feder, and R. Motwani, "Incremental Clustering and Dynamic Information Retrieval," in SIAM, 2004.