いくつかのクラスタリングアルゴリズムを試した後、flexclust::kcca
とfamily = 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
にどのように渡す必要がありますか?
ちなみに、 'fpc :: cluster.stats'には大量のメモリが必要です。したがって、適度なサイズのデータセットでさえ、実用的ではありません。私は最後に 'cluster :: silhouette'と一緒に行きました。 –