0

次のコードは、最適なクラスターの数を理解するのに役立ちます。

set.seed(123)

# function to compute total within-cluster sum of square 
wss <- function(k) {
  kmeans(df, k, nstart = 10 )$tot.withinss
}

# Compute and plot wss for k = 1 to k = 15
k.values <- 1:15

# extract wss for 2-15 clusters
wss_values <- map_dbl(k.values, wss)

plot(k.values, wss_values,
       type="b", pch = 19, frame = FALSE, 
       xlab="Number of clusters K",
       ylab="Total within-clusters sum of squares")

参考:https ://uc-r.github.io/

目標は、これを複数のコアを持つ共有メモリで実行するように変換して、高速に実行できるようにすることです。fviz_nbclustこの方法を使用してみましたが、非常に遅いです。

アプローチ/試み:

まず、wss呼び出されるメソッドを作成しますmclapply

parallel.wss <- function(i, k) {
    set.seed(101)
    kmeans(df, k, nstart=i)$tot.withinss
}

これはi並列開始数です。これは、k実際k.valuesには、最適なものを見つけるために試行する必要があるクラスターの数です。

k.values <- 1:15

kmean_results <- mclapply(c(25,25,25,25), k.values, FUN=parallel.wss)

しかし、次の警告を受けました:

Warning message:
In mclapply(c(25, 25, 25, 25), k.values, FUN = parallel.wss) :
  all scheduled cores encountered errors in user code

kmean_resultsオブジェクトを見て:

head(kmean_results) [[1]] [1] "kmeans(df, k, nstart = i) のエラー: \n 'x' と 'centers' には同じ数の列が必要です\n" attr(,"class ") [1] "try-error" attr(,"条件")

4

1 に答える 1