データのクラスタ分割

クラスタ分析とは,データの分類に使われる教師なし学習法である.データ要素は,距離(非類似度)関数に基づいたデータ要素の近似集団を表すクラスタと呼ばれるグループに分類される.ペアの要素が同一である場合は距離(非類似度)はゼロであり,それ以外のペアでは正となる.

FindClusters[data]data を類似要素のリストに分類する
FindClusters[data,n]data を類似要素の n 個のリストに分類する

一般的なクラスタ関数

FindClustersのデータ引数はデータ要素のリストでも,要素とラベルにインデックスを付ける規則でもよい.

{e1,e2,...}データ要素 のリストとして指定されるデータ
{e1v1,e2v2,...}データ要素 およびラベル の間の規則のリストとして指定されるデータ
{e1,e2,...}→{v1,v2,...}データ要素 をラベル にマップする規則として指定されるデータ

FindClustersでデータを指定する方法

データ要素 は数値のリスト・行列・テンソル,TrueおよびFalse要素のリスト,文字列のリストのいずれでもよい.すべてのデータ要素 は同じ次元でなければならない.

以下は数のリストである.
In[1]:=
Click for copyable input
FindClustersは,数の近似に基づいてそれをクラスタ化する.
In[2]:=
Click for copyable input
Out[2]=

規則型のデータシンタックスでは,データ要素をクラスタ化して,その要素のラベルを返すことができる.

ここでは2Dの点がクラスタ化され,データリストにおけるその位置でラベル付けされている.
In[3]:=
Click for copyable input
Out[3]=

規則型のデータシンタックスは,各データ入力の部分に基づいたデータをクラスタ化するために使うこともできる.例えば,データを表形式にクラスタ化し,表の特定の列を無視することができる.

データ入力のリストである.
In[4]:=
Click for copyable input
各データ入力の最初の2要素を無視して,データをクラスタ化する.
In[5]:=
Click for copyable input
Out[5]=

原則としては,任意次元で与えられた点をクラスタ化することは可能である.しかし,二次元,または三次元より大きい次元のクラスタを視覚化することは,できたとしても難しい.このドキュメントでは,選択可能なメソッドを比較するために,簡単に視覚化できる二次元データを使う.

以下のコマンドは,4つの星雲のようなクラスタにグループ化するために選ばれた,300個の二次元データ点集合を定義する.
In[6]:=
Click for copyable input
点の近接に基づいてデータをクラスタ化する.
In[7]:=
Click for copyable input
クラスタのプロットである.
In[8]:=
Click for copyable input
Out[8]=

FindClustersはデフォルト設定では点を4つのクラスタにした.

FindClustersの設定を変更して,クラスタの数を指定することもできる.

3つのクラスタを指定した場合は,以下のようになる.
In[9]:=
Click for copyable input
Out[9]=
これは,5つのクラスタにした場合である.
In[10]:=
Click for copyable input
Out[10]=
オプション名
デフォルト値
DistanceFunctionAutomatic使用する距離(非類似度)尺度
MethodAutomatic使用するクラスタリング法

FindClustersのオプション

クラスタリングでは,無作為性が2つの異なる方法で使われる.メソッドによっては,特定数のクラスタにいくつかの点を初期値として無作為に割り当てる.また,無作為性は,使用する最適のクラスタ数を決定するためにも使うことができる.FindClusters[{e1, e2, ...}, Method->{Automatic, "RandomSeed"->s}]を使って乱数の発生のための乱数の種を変更すると,異なる結果が出る場合もある.

原則では,クラスタリング法はどのようなデータにも適用できる.必要なことは,集合内の各要素が他の要素とどのくらい離れているかを測る尺度,つまり,要素間の距離を与える関数である.

FindClusters[{e1, e2, ...}, DistanceFunction->f]は,要素のペアの距離 が大きくなるにつれて,その類似度が減少するものとする.関数 f は,適切な距離(非類似度)関数であればどのようなものでもよい.距離関数 f は以下を満足する.

が数のベクトルであるなら,FindClustersではデフォルトでユークリッド平方距離が使われる. がブールのTrueFalse(あるいは0,1)要素のリストならば,FindClustersでは一致しない要素の正規化分数に基づく非類似度がデフォルトで使われる. が文字列の場合は,FindClustersでは1つの文字列から次を得るのに必要な点の変化の数に基づく距離関数がデフォルトで使われる.

EuclideanDistance[u,v]ユークリッド距離
SquaredEuclideanDistance[u,v]平方ユークリッド距離
ManhattanDistance[u,v]マンハッタン距離
ChessboardDistance[u,v]チェス盤あるいはチェビシェフ距離
CanberraDistance[u,v]キャンベラ距離
CosineDistance[u,v]余弦距離
CorrelationDistance[u,v]相関距離 1-(u-Mean[u]).(v-Mean[v])/(Abs[u-Mean[u]]Abs[v-Mean[v]])
BrayCurtisDistance[u,v]ブレイ・カーティス距離

数値データの距離関数

マンハッタン距離を使って見付けた datapairs のクラスタである.
In[11]:=
Click for copyable input
Out[11]=

ブールベクトルの非類似度は,一般に2つのブールベクトル のペアの要素を比較することによって計算される.各非類似度関数は, を使って要約すると便利である.ここで は,それぞれ に等しい での対応する要素のペアの数である.数値 のペアを数え, は0か1のどちらかである.ブール値がTrueFalseの場合,Trueは1と,Falseは0と等価である.

MatchingDissimilarity[u,v]単純なマッチ (n10+n01)/Length[u]
JaccardDissimilarity[u,v]Jaccard係数
RussellRaoDissimilarity[u,v]Russell-Rao係数 (n10+n01+n00)/Length[u]
SokalSneathDissimilarity[u,v]Sokal-Sneath係数
RogersTanimotoDissimilarity[u,v]Rogers-Tanimoto係数
DiceDissimilarity[u,v]Dice係数
YuleDissimilarity[u,v]Yule係数

ブールデータの非類似度関数

ブールデータである.
In[12]:=
Click for copyable input
ブールデータのデフォルトの非類似度を使って見付けられたクラスタである.
In[13]:=
Click for copyable input
Out[13]=
EditDistance[u,v]文字列 u を文字列 v に変換するための編集回数を計算する
DamerauLevenshteinDistance[u,v]uv の間のDamerau-Levenshtein距離
HammingDistance[u,v]uv で値が一致しない要素の数

文字列データの非類似度関数

編集距離は,文字の順序を変えないで,1つの文字列を別の文字列に変換するのに必要な削除,挿入,代入の回数を数えることで決められる.これとは対照的に,Damerau-Levenshtein距離は削除,挿入,代入,転置の数を,ハミング距離は代入の数だけを数える.

文字列データである.
In[14]:=
Click for copyable input
編集距離を使って文字列データをクラスタ化する.
In[15]:=
Click for copyable input
Out[15]=

異なるクラスタ方法を指定するためには,Methodオプションを使う.

"Agglomerate"階層的クラスタリングを見付ける
"Optimize"局所的最適化によりクラスタリングを見付ける

Methodオプションの明示的設定

メソッドは,どのようにしてデータを指定のクラスタ数 k にクラスタ化するかを決定する.はクラスタの集合それぞれから始め,k 個のクラスタが残るまで最近傍のクラスタを融合していく凝集型の階層的分析法を使う.k 個の代表的オブジェクトの集合を構築してから,(局所的に)最適なクラスタリングが見付かるまで繰り返しそのオブジェクト付近をクラスタ化していくことから始める.デフォルトのメソッドは,代表的オブジェクト付近の分割を基礎としている.

クラスタ化をさらに制御できるように,追加のMethodサブオプションも使える.サブオプションは,選択されたMethodによって異なる.

"SignificanceTest"クラスタの最適数を見付けるための検定

すべてのメソッドのサブオプション

指定されたデータおよび距離関数では,いくつのクラスタ数 k を選べばよいかが明らかではないことがある.Method->{methodname, "SignificanceTest"->"stest"}と設定すると,を使って,最適な数を選ぶ助けとなる統計的に有意のクラスタを決定する.が取り得る値は,である.検定では,データがいかによくクラスタ化されているかを検定するためにシルエット(silhouette)統計量 が,検定ではギャップ(gap)検定量が使われる.

検定では,シルエット統計量の最初の最小値を探して,データを連続的により多くのクラスタに分類する.

検定は,データから生成されたクラスタの分散を,帰無仮説集合の標本から導出した分散と比較するものである.帰無仮説集合は,入力データの主要成分によって定義されたボックスで,一様ランダム分布データである.法には2つのサブオプションがある.サブオプションは,帰無仮説集合の数を入力データと比較するよう設定する.オプションは感度を設定する.通常,の値が大きくなると選ばれるクラスタ数は少ない方がよい.デフォルト設定は およびである.

検定を使って datapairs をクラスタ化した結果である.
In[16]:=
Click for copyable input
Out[16]=
検定で,許容度パラメータを3にして見付けたクラスタである.値を大きくすると,選ばれるクラスタ数が少なくなる.
In[17]:=
Click for copyable input
Out[17]=

上の2つの例で見付かったクラスタは同一である.異なるのは,クラスタ数を選ぶ方法だけである.

"Linkage"使用するクラスタ化の連結法を指定する

メソッドのサブオプション

Method->{"Agglomerate", "Linkage"->f}と設定すると,指定された連結関数 f が凝集的なクラスタ化に使われる.

"Single"最短距離法
"Average"群平均法
"Complete"最長距離法
"WeightedAverage"重み付き群平均法
"Centroid"クラスタの重心からの距離
"Median"クラスタのメジアンからの距離
"Ward"ウォード(Ward)の最小分散法
f純関数

サブオプションで取れる値

メンバ要素の非類似度が与えられると,連結法によりこのクラスタ間非類似度,あるいは融合レベルが決められる.

Linkage->f では,f は連結法を定義する純関数である.クラスタ間の距離(非類似度)は,新しく融合するクラスタの距離(非類似度)を決定するために,融合していないクラスタ間の距離(非類似度)についての情報を使い,ことにより,再帰的に決められる.関数 f はクラスタ k からクラスタ ij を融合して形成された新しいクラスタまでの距離を定義する.f に与えられる引数は であり,d はクラスタ間の距離,n はクラスタ内の要素数である.

階層的クラスタリングの完全連結法を使って見付かったクラスタである.
In[18]:=
Click for copyable input
Out[18]=
"Iterations"使用する最大反復回数

メソッドのサブオプション

これはメソッドの1度の反復で決定したクラスタである.
In[19]:=
Click for copyable input
Out[19]=
New to Mathematica? Find your learning path »
Have a question? Ask support »