Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica >

データのクラスタ分割

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

一般的なクラスタ関数

FindClustersのデータ引数はデータ要素のリストでも,要素とラベルにインデックスを付ける規則でもよい.
{e1,e2,...}データ要素ei のリストとして指定されるデータ
{e1v1,e2v2,...}データ要素ei およびラベルvi の間の規則のリストとして指定されるデータ
{e1,e2,...}→{v1,v2,...}データ要素ei をラベルvi にマップする規則として指定されるデータ

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

データ要素ei は数値のリスト・行列・テンソル,TrueおよびFalse要素のリスト,文字列のリストのいずれでもよい.すべてのデータ要素ei は同じ次元でなければならない.
以下は数のリストである.
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]=
原則としては,任意次元で与えられた点をクラスタ化することは可能である.しかし,2次元,または3次元より大きい次元のクラスタを視覚化することは,できたとしても難しい.このドキュメントでは,選択可能なメソッドを比較するために,簡単に視覚化できる2次元データを使う.
以下のコマンドは,4つの星雲のようなクラスタにグループ化するために選ばれた,300個の2次元データ点集合を定義する.
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使用するクラスタリング法
RandomSeedAutomatic乱数生成の初期値

FindClustersのオプション

クラスタリングでは,無作為性が2つの異なる方法で使われる.メソッドによっては,特定数のクラスタにいくつかの点を初期値として無作為に割り当てる.また,無作為性は,使用する最適のクラスタ数を決定するためにも使うことができる.FindClusters[{e1, e2, ...}, RandomSeed->s]を使って乱数の発生のための乱数の種を変更すると,異なる結果が出る場合もある.
原則では,クラスタリング法はどのようなデータにも適用できる.必要なことは,集合内の各要素が他の要素とどのくらい離れているかを測る尺度,つまり,要素間の距離を与える関数である.
FindClusters[{e1, e2, ...}, DistanceFunction->f]は,要素のペアの距離f[ei, ej]が大きくなるにつれて,その類似度が減少するものとする.関数f は,適切な距離(非類似度)関数であればどのようなものでもよい.距離関数f は以下を満足する.
ei が数のベクトルであるなら,FindClustersではデフォルトでユークリッド平方距離が使われる.ei がブールのTrueFalse(あるいは0,1)要素のリストならば,FindClustersでは一致しない要素の正規化分数に基づく非類似度がデフォルトで使われる.ei が文字列の場合は,FindClustersでは1つの文字列から次を得るのに必要な点の変化の数に基づく距離関数がデフォルトで使われる.
EuclideanDistance[u,v]ユークリッド距離
SquaredEuclideanDistance[u,v]平方ユークリッド距離 (u-v)2
ManhattanDistance[u,v]マンハッタン距離 u-v
ChebyshevDistance[u,v]チェビシェフ距離 max (u-v)
CanberraDistance[u,v]キャンベラ距離 u-v/ (u+v)
CosineDistance[u,v]余弦距離 1-u.v/ (u v)
CorrelationDistance[u,v]相関距離 1-(u-Mean[u]).(v-Mean[v])/(u-Mean[u]v-Mean[v])
BrayCurtisDistance[u,v]ブレイ・カーティス距離 u-v/u+v

数値データの距離関数

マンハッタン距離を使って見付けたdatapairs のクラスタである.
In[11]:=
Click for copyable input
Out[11]=
ブールベクトルの非類似度は,一般に2つのブールベクトルuv のペアの要素を比較することによって計算される.各非類似度関数は,nij を使って要約すると便利である.ここでnij は,それぞれij に等しいuv での対応する要素のペアの数である.数値nij{u1, v1}, {u2, v2}...のペア{i, j}を数え,ij は0か1のどちらかである.ブール値がTrueFalseの場合,Trueは1と,Falseは0と等価である.
MatchingDissimilarity[u,v]単純なマッチ (n10+n01)/Length[u]
JaccardDissimilarity[u,v]Jaccard係数 (n10+n01)/ (n11+n10+n01)
RussellRaoDissimilarity[u,v]Russell-Rao係数 (n10+n01+n00)/Length[u]
SokalSneathDissimilarity[u,v]Sokal-Sneath係数 2 (n10+n01)/ (n11+2 (n10+n01))
RogersTanimotoDissimilarity[u,v]Rogers-Tanimoto係数 2 (n10+n01)/ (n11+2 (n10+n01)+n00)
DiceDissimilarity[u,v]Dice係数 (n10+n01)/ (2n11+n10+n01)
YuleDissimilarity[u,v]Yule係数 2n10 n01/ (n11 n00+n10 n01)

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

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

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

編集距離は,文字の順序を変えないで,1つの文字列を別の文字列に変換するのに必要な削除,挿入,代入の回数を数えることで決められる.これとは対照的に,ハミング距離は代入の数だけを数える.
文字列データである.
In[14]:=
Click for copyable input
編集距離を使って文字列データをクラスタ化する.
In[15]:=
Click for copyable input
Out[15]=
異なるクラスタ方法を指定するためには,Methodオプションを使う.
"Agglomerate"階層的クラスタリングを見付ける
"Optimize"局所的最適化によりクラスタリングを見付ける

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

メソッド"Agglomerate""Optimize"は,どのようにしてデータを指定のクラスタ数k にクラスタ化するかを決定する."Agglomerate"はクラスタの集合それぞれから始め,k 個のクラスタが残るまで最近傍のクラスタを融合していく凝集型の階層的分析法を使う."Optimize"k 個の代表的オブジェクトの集合を構築してから,(局所的に)最適なクラスタリングが見付かるまで繰り返しそのオブジェクト付近をクラスタ化していくことから始める.デフォルトの"Optimize"メソッドは,代表的オブジェクト付近の分割を基礎としている.
クラスタ化をさらに制御できるように,追加のMethodサブオプションも使える.サブオプションは,選択されたMethodによって異なる.
"SignificanceTest"クラスタの最適数を見付けるための検定

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

指定されたデータおよび距離関数では,いくつのクラスタ数k を選べばよいかが明らかではないことがある.Method->{methodname, "SignificanceTest"->"stest"}と設定すると,"stest"を使って,最適な数を選ぶ助けとなる統計的に有意のクラスタを決定する."stest"が取り得る値は,"Silhouette""Gap"である."Silhouette"検定では,データがいかによくクラスタ化されているかを検定するためにシルエット(silhouette)統計量 が,"Gap"検定ではギャップ(gap)検定量が使われる.
"Silhouette"検定では,シルエット統計量の最初の最小値を探して,データを連続的により多くのクラスタに分類する.
"Gap"検定は,データから生成されたクラスタの分散を,帰無仮説集合の標本から導出した分散と比較するものである.帰無仮説集合は,入力データの主要成分によって定義されたボックスで,一様ランダム分布データである."Gap"法には2つのサブオプション"NullSets""Tolerance"がある.サブオプション"NullSets"は,帰無仮説集合の数を入力データと比較するよう設定する.オプション"Tolerance"は感度を設定する.通常,"Tolerance"の値が大きくなると選ばれるクラスタ数は少ない方がよい.デフォルト設定は"NullSets"->5 および"Tolerance"->1である.
"Silhouette"検定を使ってdatapairs をクラスタ化した結果である.
In[16]:=
Click for copyable input
Out[16]=
"Gap"検定で,許容度パラメータを3にして見付けたクラスタである.値を大きくすると,選ばれるクラスタ数が少なくなる.
In[17]:=
Click for copyable input
Out[17]=
上の2つの例で見付かったクラスタは同一である.異なるのは,クラスタ数を選ぶ方法だけである.
"Linkage"使用するクラスタ化の連結法を指定する

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

Method->{"Agglomerate", "Linkage"->f}と設定すると,指定された連結関数f が凝集的なクラスタ化に使われる.
"Single"最短距離法
"Average"群平均法
"Complete"最長距離法
"Weighted"重み付き群平均法
"Centroid"クラスタの重心からの距離
"Median"クラスタのメジアンからの距離
"Ward"ウォード(Ward)の最小分散法
f純関数

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

メンバ要素の非類似度が与えられると,連結法によりこのクラスタ間非類似度,あるいは融合レベルが決められる.
Linkage->f では,f は連結法を定義する純関数である.クラスタ間の距離(非類似度)は,新しく融合するクラスタの距離(非類似度)を決定するために,融合していないクラスタ間の距離(非類似度)についての情報を使い,ことにより,再帰的に決められる.関数f はクラスタk からクラスタij を融合して形成された新しいクラスタまでの距離を定義する.f に与えられる引数はdikdjkdijninjnkであり,d はクラスタ間の距離,n はクラスタ内の要素数である.
階層的クラスタリングの完全連結法を使って見付かったクラスタである.
In[18]:=
Click for copyable input
Out[18]=
"Iterations"使用する最大反復回数

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

これは"Optimize"メソッドの1度の反復で決定したクラスタである.
In[19]:=
Click for copyable input
Out[19]=
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team