2016-08-03 7 views
12

いくつかのクラスタリングアルゴリズムを試した後、flexclust::kccafamily = kccaFamily("angle")を使用して、私のデータセットで最高のパフォーマンスを得ました。flexclustからクラスタリングのパフォーマンス統計を生成する方法は?

ここではNclusデータセットをflexclustから使用した例です。

library(fpc) 
library(flexclust) 
data(Nclus) 

k <- 4 
family <- flexclust::kccaFamily("angle") 
model <- flexclust::kcca(Nclus, k, family) 

ここでは、クラスタの数を最適化したいと考えています。クラスタモデルのパフォーマンスメトリックの最も包括的なセットは、fpc::cluster.statsを使用しているようです。この関数には、距離行列と割り当てられたクラスタの2つの入力が必要です。

後者は簡単です。それはちょうど[email protected]です。

私は距離マトリックスを提供するのに苦労しています。 kccaは距離オブジェクトを返しません(または見つかった場合は見つかりません)。

私は通常dist(Nclus)を使用すると思います。この場合、私はユークリッド距離(または他の方法のいずれかを利用できません) –私は、クラスタリングアルゴリズムによって使用される距離測定値が必要です。その関数のコードを使用してkccaが使用する距離行列を再作成できます。

control <- as(list(), "flexclustControl") 
centers <- flexclust:::initCenters(Nclus, k, family, control) 
distmat <- distAngle(Nclus, centers$centers) 

その後、私はちょうど

fpc::cluster.stats(distmat, [email protected]) 

トラブルそれは私の距離引数に関する2回の警告を与えているされるを使用して、クラスタモデルの統計を計算することができるはずです。

Warning messages: 
1: In as.dist.default(d) : non-square matrix 
2: In as.matrix.dist(d) : 
    number of items to replace is not a multiple of replacement length 

私には間違ったことが与えられていると思われます。

距離行列をcluster.statsにどのように渡す必要がありますか?

+0

ちなみに、 'fpc :: cluster.stats'には大量のメモリが必要です。したがって、適度なサイズのデータ​​セットでさえ、実用的ではありません。私は最後に 'cluster :: silhouette'と一緒に行きました。 –

答えて

3

私はあなたがしかし、私はこれはモデリングの観点から理にかなっていることを確認していない

distmat <- distAngle(Nclus, Nclus) 

を使用する必要がありますね:あなたへのより適切なメトリックを使用する必要がありますあなたのクラスタリング出力の性能を調べるために特定のユースケース。私が「観察と重心/標準化された平均値との間の角度を」最小化するクラスタ内の角度を最小と同じではないことを推測するだろう、特に

distmat <- dist(Nclus, "manhattan") 

:これは(またはしないかもしれない)L1距離かもしれません観察の間;私は、後者の量がモデリングの目的に特に有用ではないと思います。つまり、私はdistAngleをk個のクラスタを識別するための別の方法(「トリック」)と見なしますが、他のメトリックで特定されたクラスタを評価します。これはあなたにとって意味をなさないことを願っています...

+2

私はrenatoに同意します。問題は、 'cluster.stats()'は、すべての要素が他のすべての要素(例えば 'as.matrix(dist(Nclus)) 'と比較される対称対距離行列を期待しているということです。しかし、 'distAngle(Nclus、centers $ centers)'式は、データポイントをクラスタ重心と比較しているので、非対称な距離行列が得られます。 したがって、renatoが提案したL1距離などの異なる距離測定値を使用するか、クラスタ割り当てを評価する別の方法を見つける必要があります。 –

+0

@KeithHughittあなたの説明は、実際に私よりもはるかに明確です... –

関連する問題