スペクトラルクラスタリング入門
2017.11.2
こんにちは、データサイエンスチーム tmtkです。
この記事では、スペクトラルクラスタリング(Spectral Clustering)について説明します。スペクトラルクラスタリングについて、具体的には、
- スペクトラルクラスタリングとは
- 行列の固有値分解によるグラフの連結成分分解の説明
- スペクトラルクラスタリングのアルゴリズムと計算例
- 関連する話題
を説明します。
スペクトラルクラスタリングとは
スペクトラルクラスタリングとは、クラスタリングアルゴリズムの一つです。クラスタリングは機械学習の方法のうち、教師なし学習に分類されます。データが与えられたとき、正解データなしでデータを複数の集団に分ける方法です。
スペクトラルクラスタリングの特徴は、データからグラフを生成し、グラフの連結成分分解を応用してクラスタリングするところです。クラスタリングアルゴリズムとして古典的なものに、KMeansやGaussian mixture modelがあります。KMeansやGaussian mixture modelはクラスタの中心点からの距離に基づいてクラスタリングを行いますが、スペクトラルクラスタリングでは連結性に注目してクラスタリングを行うため、KMeansやGaussian mixtureではうまくクラスタリングできなかったようなデータをうまくクラスタリングできることがあります。
(KMeans, Spectral Clustering, Gaussian Mixtureの比較。画像はscikit-learnのページのプログラムを改変して作成しました。)
【事例集】AIや機械学習によるビッグデータ活用をしたい方にオススメ!
「AIによるキャスト評価システムの構築」「データ分析基盤の運用費用9割削減」など、AWSを利用したAI、機械学習の成功事例をご紹介します。
行列の固有値問題によるグラフの連結成分分解
スペクトラルクラスタリングのアルゴリズムを説明する前に、その基礎として、行列の固有値問題によってグラフの連結成分分解を行う方法を説明します。
いま、正の重みつき無向グラフがあるとします。その隣接行列をとします。ここで、はであり、の値が大きいほど頂点が近いようにします。
たとえば、頂点1と頂点2が重み100の辺でつながっていて、頂点3と頂点4が重み20の辺でつながっているグラフの場合、
隣接行列は
になります。
隣接行列に対して、そのdegree matrixを
で定義します。グラフのunnormalized graph Laplacianを
で定義します。
グラフの場合、degree matrix とunnormalized graph Laplacian は
になります。
このとき、次の定理が成り立ちます。
定理
グラフが個の連結成分をもち、と連結成分分解されるとする。このとき、のunnormalized graph Laplacianの固有値はすべて非負の実数である。また、固有値に対応する固有空間は、を基底にもつ。
証明
線形代数からわかります。詳細は参考文献を参照していただくとして、ここでは証明の概略を説明します。
まず、具体的に計算すると、対称行列は半正定値行列であることがわかります。また、グラフが連結である場合、の固有値0に属する固有ベクトルは(とそのスカラー倍)のみであることがわかります。グラフが非連結である場合は、グラフの連結成分分解に対応してが線形写像として直和分解されるので、結論を得ます。
この定理を前の例で計算してみましょう。
がの固有値に属する固有ベクトルだとすると、
すなわち、
が成り立ちます。このことから、固有値0に属する固有空間はを基底にもつことがわかります。(ただし、基底の与え方は一意ではなく、たとえばも別の基底になっていることに注意します。)
ここから、グラフの連結成分分解を得るには次のようにします。まず、この基底を並べて行列
をつくります。この行列を構成する行ベクトルをそれぞれ見ると、1行目と2行目がどちらもで同じで、3行目と4行目がどちらもで同じです。これはグラフの連結成分分解がで与えられることと対応しています。
このようにして、グラフの連結成分を、行列の固有値問題を解くことによって得ることができます。
以上の議論をまとめると、以下の手順によって、グラフの連結成分分解ができることがわかります。
- グラフから隣接行列表現、degree matrixを計算し、unnormalized graph Laplacianを計算する。
- unnormalized graph Laplacianの固有値0に属する固有空間の基底を計算する。
- 基底ベクトルを並べて行列を作る。
- 行列のi行目とj行目の行ベクトルが等しければ、頂点とは同じ連結成分に属し、さもなくば違う連結成分に属している。
スペクトラルクラスタリングのアルゴリズムと計算例
スペクトラルクラスタリングのアルゴリズムは、上に説明したグラフの連結成分分解を応用したものです。具体的には、以下のようなアルゴリズムで行います。
いま、クラスタ数が与えられているとします。
- データからグラフを構築する。
- グラフから隣接行列表現、degree matrixを計算し、unnormalized graph Laplacianを計算する。
- unnormalized graph Laplacianの固有値が小さい順に固有ベクトルを個を計算する。
- 固有ベクトルを並べて行列を作る。
- 行列の行ベクトルをK-meansなどを用いて個にクラスタリングする。
- K-meansの結果、i行目が入ったクラスタを頂点の入るクラスタとする。
連結成分分解との相違点は、データからグラフを構築するステップが必要であるところと、連結成分分解のようにi行目とj行目が厳密に等しかったり異なったりしないために、K-meansなどを使う必要があるところです。
具体的に計算をしてみましょう。前のグラフとは少し変えて、次の連結なグラフを考えます。このグラフを個のクラスタに分類してみます。
このグラフのunnormalized graph Laplacianは
と計算でき、コンピュータを用いて計算すると、その固有値は
で、対応する固有ベクトルは、有効数字2桁で四捨五入すると、
です。固有値の小さいほうから固有ベクトルをつとり、並べると、
この4つの行ベクトルをK-meansでクラスタリングしたら、1行目と2行目ののクラスタと3行目と4行目ののクラスタに分かれることが予想できます。これはとにクラスタリングされることに対応しています。
同様に、で計算すると、固有値の小さいほうから固有ベクトルを個とって、
の4つ行ベクトルを3クラスタにK-Meansでクラスタリングすることになります。この場合はのクラスタとのクラスタとのクラスタに分かれます。これはととにクラスタリングされるということで、4つの頂点の中での組み合わせが一番近くにあることに対応しています。
(よく見ると2点とが重なっています。)
関連する話題
スペクトラルクラスタリングではまずデータをグラフに変換します。グラフへの変換の仕方はいろいろあり、
- ε近傍法
- k近傍法
- 全結合法
などがあるようです。ユークリッド空間上の距離関数をとすると、データの間の辺の重みはなどで与えることができます。さらに、行列を疎にするためのε近傍法やk近傍法などを用いるとよい、ということのようです。
また、graph Laplacian にはいろいろな亜種があり、
や
などが使われるようです。どちらも と似た性質を持ちます。
まとめ
- グラフの連結成分分解を、行列の固有値問題に還元することができます。
- 固有値問題による連結成分分解を応用したクラスタリングが、スペクトラルクラスタリングです。
【事例集】AIや機械学習によるビッグデータ活用をしたい方にオススメ!
「AIによるキャスト評価システムの構築」「データ分析基盤の運用費用9割削減」など、AWSを利用したAI、機械学習の成功事例をご紹介します。
参考文献
- A Tutorial on Spectral Clusteringがこの分野のテキストの決定版のようです。本記事もこの資料を大いに参考にしています。
- Comparing different clustering algorithms on toy datasets – scikit-learn documentationクラスタリングアルゴリズムを比較する画像が面白いです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterデータ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。
Recommends
こちらもおすすめ
-
Rで実践!欠損データ分析入門【2】
2017.12.20
-
Pythonで時系列データをクラスタリングする方法
2017.12.12
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16