2

私はで作業しMATLABており、隣接行列があります。

mat =

 0     1     0     0     0     0
 1     0     0     0     1     0
 0     0     0     1     0     0
 0     0     1     0     0     1
 0     1     0     0     0     0
 0     0     0     1     0     0

完全に接続されていません。ノード{1,2,5}は接続されており、{3,4,6}接続されています(エッジが方向付けられています)。

単一のプロットの樹状図に別々のクラスターを表示したいと思います。あるクラスターから次のクラスターへのパスがないため、クラスターごとに別々のルートを持つ別々のツリーを表示したいと思います。私はコマンドを使用しています:

mat=zeros(6,6)
mat(1,2)=1;mat(2,1)=1;mat(5,2)=1;mat(2,5)=1;
mat(6,4)=1;mat(4,6)=1;mat(3,4)=1;mat(4,3)=1;
Y=pdist(mat)
squareform(Y)
Z=linkage(Y)
figure()
dendrogram(Z)

これらのコマンドは、階層的クラスタリングからアドバイスされています。そして、結果が添付されます:imageDendrogram。ラベルが意味をなさないことを除けば、ツリー全体が接続されており、データの切断された性質を反映するいくつかの切断されたツリーを作成する方法を理解しています。多くの互いに素なクラスターを持つ可能性のあるより大きなデータセットで作業したいので、複数のプロットを避けたいと思います。

4

1 に答える 1

1

これは少し前に尋ねられたようですが、まだ興味がある場合は、次のことを試してみてください。

まず、次のように、隣接行列から対角線より上の値を抽出します。

>> matY = [];
>> for n = 2:6
for m = n:6
matY = [matY mat(n,m)];
end
end
>> matY

matY =

  Columns 1 through 13

     0     0     0     1     0     0     1     0     0     0     0     1     0

  Columns 14 through 15

     0     0

Yこれで、ベクトルpdistが生成したように見えるものができました。ただし、ここでの値は、おそらく必要な値とは逆です。接続されていない頂点の「距離」はゼロであり、接続されている頂点は1つ離れています。それを修正しましょう:

>> matY(matY == 0) = 10

matY =

  Columns 1 through 13

    10    10    10     1    10    10     1    10    10    10    10     1    10

  Columns 14 through 15

    10    10

より良い。これで、通常のクラスターツリーを計算できます。これは、接続された頂点を「互いに近い」と表現し、接続されていない頂点を「離れた」と表現します。

>> linkage(matY)

ans =

     3     6     1
     1     5     1
     2     4     1
     7     8    10
     9    10    10

>> dendrogram(ans)

結果の図:

隣接樹状図

これがあなたが探しているもののまともな近似であることを願っています。

于 2013-04-05T20:34:22.757 に答える