データのクラスタ分割

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

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

一般的なクラスタ関数

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

{e1,e2,}データ要素 ei のリストとして指定されるデータ
{e1v1,e2v2,}データ要素 ei およびラベル vi の間の規則のリストとして指定されるデータ
{e1,e2,}{v1,v2,}データ要素 ei およびラベル vi の間の規則のリストとして指定されるデータ
key1e1,key2e2|>要素 ei をラベル keyi にマップする連想として指定されるデータ

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

FindClustersは数値データ,テキストデータ,画像データの他,ブールベクトル,日付,時間を含むさまざまなタイプのデータに使うことができる.すべてのデータ要素 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]=

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

以下のコマンドは,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]=
オプション名
デフォルト値
CriterionFunctionAutomatic方法を選択する基準
DistanceFunctionAutomatic使用する距離(非類似度)尺度
MethodAutomatic使用するクラスタリング法
PerformanceGoalAutomatic最適化する性能
WeightsAutomatic各例に与える重み

FindClustersのオプション

クラスタリングでは,無作為性が2つの異なる方法で使われる.メソッドによっては,特定数のクラスタにいくつかの点を初期値として無作為に割り当てる.また,無作為性は,使用する最適のクラスタ数を決定するためにも使うことができる.FindClusters[{e1,e2,},Method->{Automatic,"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]平方ユークリッド距離
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]RussellRao係数 (n10+n01+n00)/Length[u]
SokalSneathDissimilarity[u,v]SokalSneath係数
RogersTanimotoDissimilarity[u,v]RogersTanimoto係数
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 の間のDamerauLevenshtein距離
HammingDistance[u,v]uv で値が一致しない要素の数

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

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

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

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

"Agglomerate"階層的クラスタリングを見付ける
"Optimize"局所的最適化によりクラスタリングを見付ける
"DBSCAN"ノイズのある適用の密度に基づく空間的クラスタリング
"GaussianMixture"変分ガウス混合アルゴリズム
"JarvisPatrick"JarvisPatrickクラスタリングアルゴリズム
"KMeans"k-meansクラスタリングアルゴリズム
"KMedoids"medoid付近の分割
"MeanShift"平均シフトクラスタリングアルゴリズム
"NeighborhoodContraction"例を高密度の領域に向かって移動させる
"SpanningTree"最小全域木ベースのクラスタリングアルゴリズム
"Spectral"スペクトラルクラスタリングのアルゴリズム

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

デフォルトではFindClustersは異なるメソッドを試し,最もよいクラスタリングを選ぶ.

メソッド"KMeans"および"KMedoids"は,どのようにデータを指定のクラスタ数 k にクラスタ化するかを決定する.

メソッド"DBSCAN""JarvisPatrick""MeanShift""SpanningTree""NeighborhoodContraction""GaussianMixture"は,特定のクラスタ数を想定しないで,どのようにデータをクラスタ化するかを決定する.

メソッド"Agglomerate""Spectral"はどちらの場合でも使うことができる.

次は"KMeans"メソッドを使って見付けた datapairs のクラスタを示している.
In[16]:=
Click for copyable input
Out[16]=
次は"GaussianMixture"メソッドを使って見付けた datapairs のクラスタを示している.
In[17]:=
Click for copyable input
Out[17]=

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

"NeighborhoodRadius"点の近傍の平均半径を指定する
"NeighborsNumber"近傍における点の平均個数を指定する
"InitialCentroids"最初の重心,medoidを指定する
ClusterDissimilarityFunctionクラスタ間非類似度を指定する

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

サブオプション"NeighborhoodRadius"は,メソッド"DBSCAN""MeanShift""JarvisPatrick""NeighborhoodContraction""Spectral"で使うことができる.

サブオプション"NeighborsNumber"はメソッド"DBSCAN"および"JarvisPatrick"で使うことができる.

サブオプション"InitialCentroids"はメソッド"KMeans"および"KMedoids"で使うことができる.

サブオプションClusterDissimilarityFunctionはメソッド"Agglomerate"で使うことができる.

サブオプション"NeighborhoodRadius"は一般点の近隣の平均半径を制御するために使うことができる.

以下は"NeighborhoodContraction"メソッドで"NeighborhoodRadius"を変化させることによって見付かった datapairs の異なるクラスタリングを示す.
In[18]:=
Click for copyable input
Out[18]=

サブオプション"NeighborsNumber"は一般点の近隣の隣接点の数を制御するために使うことができる.

以下は"DBSCAN"メソッドの"NeighborsNumber"を変化させることによって見付けた datapairs の異なるクラスタリングを示す.
In[19]:=
Click for copyable input
Out[19]=

"InitialCentroids"サブオプションは"KMeans"メソッドおよび"KMedoids"メソッドの最初の設定を変更するために使うことができる.初期設定が適切でないと,クラスタリングの結果もよくならない.

次は"KMeans"メソッドで"InitialCentroids"を変化させることによって見付かった datapairs の異なるクラスタリングを示す.
In[20]:=
Click for copyable input
Out[20]=

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

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

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

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

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

以下は"Agglomerate"メソッドでClusterDissimilarityFunctionを変化させることによって見付かった datapairs の異なるクラスタリングを示す.
In[21]:=
Click for copyable input
Out[21]=

CriterionFunctionオプションは使用するメソッドとクラスタの最適数の両方を選ぶために使うことができる.

"StandardDeviation"二乗平均平方根の標準偏差
"RSquared"R二乗
"Dunn"Dunn指標
"CalinskiHarabasz"CalinskiHarabasz指標
"DaviesBouldin"DaviesBouldin指標
Automatic内部指標
次はCriterionFunctionに異なる設定を使った,クラスタリングの結果を示す.
In[22]:=
Click for copyable input
Out[22]=
以下は,デフォルトのCriterionFunctionと,自動的に選ばれたクラスタ数を使って見付かったクラスタである.
In[23]:=
Click for copyable input
Out[23]=
次は"CalinskiHarabasz"指標を使って見付かったクラスタである.
In[24]:=
Click for copyable input
Out[24]=