階層的クラスタリングパッケージ

関数FindClustersは,距離(非類似度)関数に基づいてデータのクラスタを見付ける.このパッケージには,クラスタ階層を生成する関数と階層的クラスタの融合を可視化する関数が含まれている.

Agglomerate[data]data の要素を集めてクラスタの階層にする

階層的クラスタ関数

Agglomerate関数はデータのクラスタ階層を計算する.AgglomerateFindClustersと同じ形式のデータを取る.Agglomerateの出力は,階層的クラスタリングを表すネストされたClusterオブジェクトである.

パッケージをロードする.
小さい数値データである.
これで,データの階層的クラスタリングが構築される.
これはプールデータである.
ブールデータをクラスタリングする.
文字列データである.
以下で,この文字列データをクラスタリングする.
Cluster[c1,c2,d,n1,n2]クラスタ階層の融合を表す.要素 c1c2は距離(非類似度)の値 d で融合されたサブクラスタである.サブクラスタのデータ要素数はそれぞれ n1n2である

クラスタ階層の要素

ClusterFlatten[cluster]クラスタに含まれるデータ要素のリストを返す cluster を平坦化する
ClusterSplit[cluster,n]実質的に最後の n-1回の融合を取り消して,clustern 個のクラスタに分割する

Cluster式の操作のための関数

関数ClusterFlattenおよびClusterSplitは,Clusterオブジェクトの操作のためのユーティリティである.

以下は数値データのクラスタを上位3つのサブクラスタに分割する.
クラスタを平坦化する.
オプション名
デフォルト値
DistanceFunctionAutomatic使用する距離(非類似度)測定法
LinkageAutomatic使用するクラスタ連結法

Agglomerateのオプション

DistanceFunctionオプションはFindClustersのものと同じである.DistanceFunctionはデータ点間の距離(非類似度)を定義し,Linkageはデータ点のクラスタ間の非類似度を定義する.

"Single"クラスタ間の最小非類似度
"Average"クラスタ間の平均非類似度
"Complete"クラスタ間の最大非類似度
"WeightedAverage"クラスタ間の重み付き平均非類似度
"Centroid"クラスタの重心からの距離
"Median"クラスタのメジアンからの距離
"Ward"ウォードの最小分散非類似度
f純関数

Linkageオプションで取れる値

連結法は,メンバ要素間に非類似性がある場合,そのクラスタ間の非類似性(融合レベル)を決定する.一般的なアルゴリズムには,要素間の最短距離を選ぶ単連結法,要素間の最長距離を選ぶ完全連結法,クラスタの重心間の非類似度を使う重心法等がある.

Linkage->f と設定すると,f は連結法を定義する純関数となる.クラスタ間の距離(非類似度)は,新しく融合されるクラスタの非類似度を決定するために,未融合のクラスタと融合されているクラスタの距離(非類似度)についての情報を再帰的に使って決定される.ij が融合されるクラスタを表しているとすると,新しい距離(非類似度)は,この融合したクラスタと残りの k 個のクラスタとの間で再帰的に計算される.関数 f は再帰を定義し,引数 f[dik,djk,dij,ni,nj,nk]が渡される.ここで d はクラスタ間の距離(非類似度)を,n はクラスタ内のデータ要素数を表す.この関数は,クラスタ ij の融合により形成されるクラスタと k との間の非類似度を返す.

重み付き群平均法を使って data をクラスタリングする.
下では重み付き群平均法と等価の純関数を使う.

規則のリストや単独のリストを使って,要素にラベルを付けることができる.要素間の距離(非類似度)は規則の左辺の式を使って計算される.出力のClusterオブジェクトには規則の右辺が含まれる.

データをクラスタリングした結果にラベルを付けて表示する.

距離(非類似度)関数の代りに,すべてのデータ要素間のペア毎の距離(非類似度)を提供する距離(非類似度)行列を直接使って,クラスタ階層を構築することも可能である.距離行列には,i 行目,j 列目の要素に i 番目と j 番目のデータ要素間の距離の値が保存される.距離(非類似度)は対称なので,行列の上三角部(つまり i<j)だけが使われる.

DistanceMatrix[data]距離(非類似度)の対称行列を計算する
DirectAgglomerate[mat]平方距離行列 mat に基づくクラスタ階層を構築する
DirectAgglomerate[mat,list]list の要素を距離行列 mat の対応する行に関連付ける

距離(非類似度)行列を使ったクラスタリングのための関数

距離尺度を定義するために,DistanceMatrix関数にDistanceFunctionオプションを与えることができる.

距離行列の例である.
これは距離行列を直接クラスタリングし,データ要素を行番号で表す.
これは,対応するデータ要素を指定して,距離行列をクラスタリングする.

階層的クラスタの二分木構造は,自然に樹形図というグラフィカルな表現になる.樹形図は,クラスタを表す2本の線を融合レベルの横棒でつなぐことにより,融合歴を視覚的に表す.

DendrogramPlot[list]クラスタリング list から導かれる樹形図をプロットする
DendrogramPlot[cluster]Clusterオブジェクト cluster の樹形図をプロットする

樹形図プロット関数

基本的な樹形図である.
マンハッタン距離を使って,樹形図を作成する.
オプション名
デフォルト値
TruncateDendrogramAll樹形図を切り捨てるレベル
HighlightLevelNoneクラスタをハイライトするレベル
HighlightStyleAutomaticハイライトされた各々のクラスタのスタイルを指定するグラフィックス指示子
LeafLabelsNone葉のラベル
DistanceFunctionAutomatic使用する距離(非類似度)尺度
LinkageAutomaticクラスタリングに使用する方法
OrientationTop樹形図の向き
PlotStyleAutomatic樹形図のスタイルを指定するグラフィックス指示子

DendrogramPlotのオプション

データをクラスタリングするのにウォード法を使って樹形図をプロットする.

樹形図のラベル付けをサポートするために,オプションLeafLabelsが提供されている.データでは,LeafLabels->Automaticという値のときはラベルに対してデータ要素の位置を使うが,このオプションは式のリスト,あるいは関数を取ることもできる.関数はラベル式を生成するために,各データ要素に適用される.Clusterオブジェクトでは,LeafLabelsオプションは関数を取るが,リストやAutomaticは取らない.これは,Clusterオプジェクトのラベルとデータ点の間での明確な対応がないためである.

以下は自動的生成されたラベルを持つ樹形図である.
ラベルのリストを使って樹形図を生成する.
ラベル関数を使って樹形図を生成する.

大きなデータでは,完全な樹形図の要約版の方がよい場合がある.樹形図は,1つの整数か2つの整数のリストを与えることにより,TruncateDendrogramオプションを使って切り捨てることができる.2つの整数のリストとして与えられた場合は,最初の値は,融合が表示される最上限のレベルを指定し,2つ目の値は表示する最下限の融合レベルを示す.単独の整数 n では,TruncateDendrogram->nTruncateDendrogram->{1,n}と等価である.2つ目の値としてを与えることもでき,下からの切捨てのない完全なクラスタリングを表示する.クラスタが切り捨てられ,ラベルが指定されているとき,ラベルの代りに箱が置かれ,切り捨てられたクラスタのサイズを示す.

以下では大きなデータをクラスタリングする.これはフィッシャーのあやめのデータに基づいている.
tiesの警告をオフにする.
これは,上位20の融合だけを示すよう切り捨てられた樹形図である.
上位2つのクラスタをハイライトする.
レベル2と20の間のクラスタを切り捨てた樹形図を作成する.