1

300個のフィーチャーと1500個の観測を含むクラスター文書への単一リンケージで階層クラスター化を実行したい。私はこの問題のためのクラスターの最適な数を見つけたいと思う。Gap統計を使用して階層的クラスタリングで最適なクラスタ数を見つける方法は?

以下のリンクは、最大ギャップを持つクラスタの数を見つけるために以下のコードを使用しています。

# Compute gap statistic 
set.seed(123) 

iris.scaled <- scale(iris[, -5]) 

gap_stat <- clusGap(iris.scaled, FUN = hcut, K.max = 10, B = 50) 

# Plot gap statistic 
fviz_gap_stat(gap_stat) 

しかし、リンクHCUTで

http://www.sthda.com/english/wiki/determining-the-optimal-number-of-clusters-3-must-known-methods-unsupervised-machine-learning

は明確に定義されていません。 clusGap()関数に対して、単一リンケージ階層クラスタリングを指定するにはどうすればよいですか?

clusGap()のpythonに相当するものはありますか?

おかげ

答えて

1

hcut()機能はあなたが投稿したリンクで使用factorextraパッケージの一部です:

HCUTパッケージ:factoextraのRドキュメント

ツリー

を階層的クラスタリングを計算し、カット

説明:

Computes hierarchical clustering (hclust, agnes, diana) and cut 
the tree into k clusters. It also accepts correlation based 
distance measure methods such as "pearson", "spearman" and 
"kendall". 

Rにも組み込み関数hclust()があり、これを使用して階層的クラスタリングを実行できます。ただし、デフォルトでは、単一リンケージクラスタリングは実行されないため、hcuthclustに置き換えることはできません。

あなたがclusGap()のヘルプを見れば、しかし、あなたはあなたが適用されるカスタムクラスタリング機能を提供することができることがわかります。

FUNcluster:最初の引数(データとして受け入れる「関数」 ) 行列は 'x'、2番目の引数、k> 2、好きなクラスタの番号 のような行列で、 'cluster'という名前の(または短縮された)コンポーネント で 'list'を返します。長さ 「1:k」の整数の「n = nrow(x)」は、クラスタリングを決定するか、または「n」観測値のグループ化です。

hclust()機能は、シングルリンクの階層的クラスタリングを実行することが可能であるので、あなたが行うことができます。

cluster_fun <- function(x, k) list(cluster=cutree(hclust(dist(x), method="single"), k=k)) 
gap_stat <- clusGap(iris.scaled, FUN=cluster_fun, K.max=10, B=50) 
関連する問題