Main Content

optimalleaforder

階層クラスタリングの最適な葉ノードの順序

説明

leafOrder = optimalleaforder(tree,D) は、距離 D を使用して、階層バイナリ クラスター ツリー tree の最適な葉ノードの順序を返します。二分木に最適な葉ノードの順序を使用すると、クラスターを分割せずにツリーの分岐を反転させて、隣接している葉の間で合計された類似度を最大化できます。

leafOrder = optimalleaforder(tree,D,Name,Value) は、1 つ以上の名前と値の引数ペアを使用して最適な葉ノードの順序を返します。

すべて折りたたむ

linkage を使用して、階層バイナリ クラスター ツリーを作成します。次に、既定の順序を使用した系統樹と、最適な葉ノードの順序を使用した系統樹を比較します。

標本データを生成します。

rng('default') % For reproducibility
X = rand(10,2);

距離ベクトルと階層バイナリ クラスタリング ツリーを作成します。距離とクラスタリング ツリーを使用して、最適な葉ノードの順序を判断します。

D = pdist(X);
tree = linkage(D,'average');
leafOrder = optimalleaforder(tree,D);

既定の順序を使用した系統樹と、最適な葉ノードの順序を使用した系統樹をプロットします。

figure()
subplot(2,1,1)
dendrogram(tree)
title('Default Leaf Order')

subplot(2,1,2)
dendrogram(tree,'reorder',leafOrder)
title('Optimal Leaf Order')

Figure contains 2 axes objects. Axes object 1 with title Default Leaf Order contains 9 objects of type line. Axes object 2 with title Optimal Leaf Order contains 9 objects of type line.

下の図における葉の順序は、leafOrder の要素に対応しています。

leafOrder
leafOrder = 1×10

     1     4     9    10     2     5     8     3     7     6

標本データを生成します。

rng('default') % For reproducibility
X = rand(10,2);

距離ベクトルと階層バイナリ クラスタリング ツリーを作成します。

D = pdist(X);
tree = linkage(D,'average');

逆の距離相似変換を使用して、最適な葉ノードの順序を判断します。

leafOrder = optimalleaforder(tree,D,'Transformation','inverse')
leafOrder = 1×10

     1     4     9    10     2     5     8     3     7     6

入力引数

すべて折りたたむ

(M - 1) 行 3 列の行列として指定される、階層バイナリ クラスター ツリー。M は葉の数であり、この行列は linkage によって生成されます。

葉の間の類似度を判定するための距離。距離の行列またはベクトルとして指定します。たとえば、pdist を使用して距離を求めることができます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Criteria','group','Transformation','inverse' は、逆の相似変換を使用して、それぞれの葉と、隣接するクラスター内における他のすべての葉との類似度を合計して最大化するように指定します。

最適な葉ノードの順序を決定するための最適化の条件。'criteria' と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

'adjacent'隣接する葉との類似度の合計を最大化します。
'group'系統樹の同じレベルにおいて、それぞれの葉と、隣接するクラスター内において他のすべての葉との類似度を合計して最大化します。

例: 'Criteria','group'

距離を類似度に変換する方法。'Transformation' と、コンマ区切りのペアとして指定し、'linear''inverse' または関数ハンドルのいずれかで構成されます。

di,j と Simi,j は、葉 i と葉 j の間の距離と類似度を示しています。以下の相似変換が用意されています。

'linear'Simi,j = maxi,j (di,j ) – di,j
'inverse'Simi,j = 1/di,j

カスタムの変換関数を使用するには、距離の行列 D を受け入れ、類似度の行列 S を返す関数へのハンドルを指定します。この関数は、距離の値の範囲で単調減少でなければなりません。S のサイズは D と同じでなければなりません。S(i,j)D(i,j) に基づいて計算された類似度となります。

例: 'Transformation',@myTransform

出力引数

すべて折りたたむ

長さが M のベクトルとして返される、最適な葉ノードの順序。M は葉の数です。leafOrder は、指定された距離と相似変換に基づき最適な葉ノードの順序を指定する、ベクトル 1:M の順列です。

参照

[1] Bar-Joseph, Z., Gifford, D.K., and Jaakkola, T.S. (2001). "Fast optimal leaf ordering for hierarchical clustering." Bioinformatics Vol. 17, Suppl 1:S22–9. PMID: 11472989.

バージョン履歴

R2012b で導入