データのクラスタ分割
クラスタ分析とは,データの分類に使われる教師なし学習法である.データ要素は,距離(非類似度)関数に基づいたデータ要素の近似集団を表すクラスタと呼ばれるグループに分類される.ペアの要素が同一である場合は距離(非類似度)はゼロであり,それ以外のペアでは正となる.
一般的なクラスタ関数
FindClustersのデータ引数はデータ要素のリストでも,要素とラベルにインデックスを付ける規則でもよい.
| {e1,e2,...} | データ要素 のリストとして指定されるデータ |
| {e1→v1,e2→v2,...} | データ要素 およびラベル の間の規則のリストとして指定されるデータ |
| {e1,e2,...}→{v1,v2,...} | データ要素 をラベル にマップする規則として指定されるデータ |
FindClustersでデータを指定する方法
データ要素
は数値のリスト・行列・テンソル,TrueおよびFalse要素のリスト,文字列のリストのいずれでもよい.すべてのデータ要素
は同じ次元でなければならない.
| Out[2]= |  |
規則型のデータシンタックスでは,データ要素をクラスタ化して,その要素のラベルを返すことができる.
ここでは2Dの点がクラスタ化され,データリストにおけるその位置でラベル付けされている.
| Out[3]= |  |
規則型のデータシンタックスは,各データ入力の部分に基づいたデータをクラスタ化するために使うこともできる.例えば,データを表形式にクラスタ化し,表の特定の列を無視することができる.
各データ入力の最初の2要素を無視して,データをクラスタ化する.
| Out[5]= |  |
原則としては,任意次元で与えられた点をクラスタ化することは可能である.しかし,二次元,または三次元より大きい次元のクラスタを視覚化することは,できたとしても難しい.このドキュメントでは,選択可能なメソッドを比較するために,簡単に視覚化できる二次元データを使う.
以下のコマンドは,4つの星雲のようなクラスタにグループ化するために選ばれた,300個の二次元データ点集合を定義する.
| Out[8]= |  |
FindClustersはデフォルト設定では点を4つのクラスタにした.
FindClustersの設定を変更して,クラスタの数を指定することもできる.
3つのクラスタを指定した場合は,以下のようになる.
| Out[9]= |  |
| Out[10]= |  |
FindClustersのオプション
クラスタリングでは,無作為性が2つの異なる方法で使われる.メソッドによっては,特定数のクラスタにいくつかの点を初期値として無作為に割り当てる.また,無作為性は,使用する最適のクラスタ数を決定するためにも使うことができる.FindClusters[{e1, e2, ...}, Method->{Automatic, "RandomSeed"->s}]を使って乱数の発生のための乱数の種を変更すると,異なる結果が出る場合もある.
原則では,クラスタリング法はどのようなデータにも適用できる.必要なことは,集合内の各要素が他の要素とどのくらい離れているかを測る尺度,つまり,要素間の距離を与える関数である.
FindClusters[{e1, e2, ...}, DistanceFunction->f]は,要素のペアの距離
が大きくなるにつれて,その類似度が減少するものとする.関数 f は,適切な距離(非類似度)関数であればどのようなものでもよい.距離関数 f は以下を満足する.
が数のベクトルであるなら,FindClustersではデフォルトでユークリッド平方距離が使われる.
がブールのTrue ,False(あるいは0,1)要素のリストならば,FindClustersでは一致しない要素の正規化分数に基づく非類似度がデフォルトで使われる.
が文字列の場合は,FindClustersでは1つの文字列から次を得るのに必要な点の変化の数に基づく距離関数がデフォルトで使われる.
数値データの距離関数
マンハッタン距離を使って見付けた
datapairs のクラスタである.
| Out[11]= |  |
ブールベクトルの非類似度は,一般に2つのブールベクトル
と
のペアの要素を比較することによって計算される.各非類似度関数は,
を使って要約すると便利である.ここで
は,それぞれ
と
に等しい
と
での対応する要素のペアの数である.数値
は
のペア
を数え,
と
は0か1のどちらかである.ブール値がTrueとFalseの場合,Trueは1と,Falseは0と等価である.
ブールデータの非類似度関数
ブールデータのデフォルトの非類似度を使って見付けられたクラスタである.
| Out[13]= |  |
文字列データの非類似度関数
編集距離は,文字の順序を変えないで,1つの文字列を別の文字列に変換するのに必要な削除,挿入,代入の回数を数えることで決められる.これとは対照的に,Damerau-Levenshtein距離は削除,挿入,代入,転置の数を,ハミング距離は代入の数だけを数える.
| Out[15]= |  |
異なるクラスタ方法を指定するためには,Methodオプションを使う.
| "Agglomerate" | 階層的クラスタリングを見付ける |
| "Optimize" | 局所的最適化によりクラスタリングを見付ける |
Methodオプションの明示的設定
メソッド
と
は,どのようにしてデータを指定のクラスタ数 k にクラスタ化するかを決定する.
はクラスタの集合それぞれから始め,k 個のクラスタが残るまで最近傍のクラスタを融合していく凝集型の階層的分析法を使う.
は k 個の代表的オブジェクトの集合を構築してから,(局所的に)最適なクラスタリングが見付かるまで繰り返しそのオブジェクト付近をクラスタ化していくことから始める.デフォルトの
メソッドは,代表的オブジェクト付近の分割を基礎としている.
クラスタ化をさらに制御できるように,追加のMethodサブオプションも使える.サブオプションは,選択されたMethodによって異なる.
| "SignificanceTest" | クラスタの最適数を見付けるための検定 |
すべてのメソッドのサブオプション
指定されたデータおよび距離関数では,いくつのクラスタ数 k を選べばよいかが明らかではないことがある.Method->{methodname, "SignificanceTest"->"stest"}と設定すると,
を使って,最適な数を選ぶ助けとなる統計的に有意のクラスタを決定する.
が取り得る値は,
と
である.
検定では,データがいかによくクラスタ化されているかを検定するためにシルエット(silhouette)統計量 が,
検定ではギャップ(gap)検定量が使われる.
検定では,シルエット統計量の最初の最小値を探して,データを連続的により多くのクラスタに分類する.
検定は,データから生成されたクラスタの分散を,帰無仮説集合の標本から導出した分散と比較するものである.帰無仮説集合は,入力データの主要成分によって定義されたボックスで,一様ランダム分布データである.
法には2つのサブオプション
と
がある.サブオプション
は,帰無仮説集合の数を入力データと比較するよう設定する.オプション
は感度を設定する.通常,
の値が大きくなると選ばれるクラスタ数は少ない方がよい.デフォルト設定は
および
である.

検定を使って
datapairs をクラスタ化した結果である.
| Out[16]= |  |

検定で,許容度パラメータを3にして見付けたクラスタである.値を大きくすると,選ばれるクラスタ数が少なくなる.
| Out[17]= |  |
上の2つの例で見付かったクラスタは同一である.異なるのは,クラスタ数を選ぶ方法だけである.
| "Linkage" | 使用するクラスタ化の連結法を指定する |
メソッドのサブオプション
Method->{"Agglomerate", "Linkage"->f}と設定すると,指定された連結関数 f が凝集的なクラスタ化に使われる.
| "Single" | 最短距離法 |
| "Average" | 群平均法 |
| "Complete" | 最長距離法 |
| "WeightedAverage" | 重み付き群平均法 |
| "Centroid" | クラスタの重心からの距離 |
| "Median" | クラスタのメジアンからの距離 |
| "Ward" | ウォード(Ward)の最小分散法 |
| f | 純関数 |
サブオプションで取れる値
メンバ要素の非類似度が与えられると,連結法によりこのクラスタ間非類似度,あるいは融合レベルが決められる.
Linkage->f では,f は連結法を定義する純関数である.クラスタ間の距離(非類似度)は,新しく融合するクラスタの距離(非類似度)を決定するために,融合していないクラスタ間の距離(非類似度)についての情報を使い,ことにより,再帰的に決められる.関数 f はクラスタ k からクラスタ i と j を融合して形成された新しいクラスタまでの距離を定義する.f に与えられる引数は
,
,
,
,
,
であり,d はクラスタ間の距離,n はクラスタ内の要素数である.
階層的クラスタリングの完全連結法を使って見付かったクラスタである.
| Out[18]= |  |
メソッドのサブオプション
これは

メソッドの1度の反復で決定したクラスタである.
| Out[19]= |  |