7

凝集的にクラスタリングしたい単純な 2 次元データセットがあります (使用する最適なクラスタ数がわからない)。データを正常にクラスター化できた唯一の方法は、関数に「maxclust」値を与えることです。

簡単にするために、これが私のデータセットだとしましょう:

X=[ 1,1;
    1,2;
    2,2;
    2,1;
    5,4;
    5,5;
    6,5;
    6,4 ];

当然、このデータは 2 つのクラスターを形成する必要があります。これを知っていれば、次のように言えます。

T = clusterdata(X,'maxclust',2);

そして、どのポイントが各クラスターに分類されるかを見つけるには、次のように言えます。

cluster_1 = X(T==1, :);

cluster_2 = X(T==2, :);

しかし、このデータセットには 2 つのクラスターが最適であることを知らずに、これらのデータをクラスター化するにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

7

このメソッドの要点は、階層内で見つかったクラスターを表すことであり、取得する詳細の量を決定するのはユーザーの責任です。

凝集性 デンドグラム

これは、樹状図と交差する水平線があると考えてください。この線は、0(各ポイントは独自のクラスター)から最大値(1つのクラスター内のすべてのポイント)まで移動します。あなたは出来る:

  • 所定の数のクラスターに達したら停止します(
  • 特定の高さの値を指定して手動で配置します(
  • 距離基準に従ってクラスターが離れすぎている場所に配置することを選択します(つまり、次のレベルへの大きなジャンプがあります)(

これは、CLUSTER/CLUSTERDATA関数の'maxclust'または引数を使用して実行できます。'cutoff'

于 2011-11-05T01:35:04.880 に答える
6

クラスターの最適な数を選択するための一般的なアプローチの1つは、Screeプロットに似たプロットを作成することです。次に、プロットで「エルボー」を探します。これは、選択したクラスターの数です。ここでの基準には、クラスター内の二乗和を使用します。

function wss = plotScree(X, n)

wss = zeros(1, n);
wss(1) = (size(X, 1)-1) * sum(var(X, [], 1));
for i=2:n
    T = clusterdata(X,'maxclust',i);
    wss(i) = sum((grpstats(T, T, 'numel')-1) .* sum(grpstats(X, T, 'var'), 2));
end
hold on
plot(wss)
plot(wss, '.')
xlabel('Number of clusters')
ylabel('Within-cluster sum-of-squares')
>> plotScree(X, 5)

ans =

   54.0000    4.0000    3.3333    2.5000    2.0000

ここに画像の説明を入力してください

于 2011-11-04T23:17:31.840 に答える