Как получить оптимальное количество кластеров из функции clusGap в качестве вывода? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть фрейм данных с 2 переменными, и я хочу использовать функцию clusGap, чтобы найти количество кластеров, которое будет оптимальным для использования. Этот код имеет похожий результат:

library(cluster)    
x <- as.vector(runif(100, 0, 1))
y <- as.vector(runif(100, 0, 1))
df <- data.frame(x, y)
gap_stat <- clusGap(df, FUN = kmeans, nstart = n,
                    K.max = 10, B = 50)
gap_stat

Результат:

Clustering Gap statistic ["clusGap"] from call:
clusGap(x = df, FUNcluster = kmeans, K.max = 10, B = 50, nstart = n)
B=50 simulated reference sets, k = 1..10; spaceH0="scaledPCA"
 --> Number of clusters (method 'firstSEmax', SE.factor=1): 1
          logW   E.logW           gap     SE.sim
 [1,] 2.569315 2.584217  0.0149021144 0.03210076
 [2,] 2.285049 2.284537 -0.0005116382 0.03231529
 [3,] 2.053193 2.033653 -0.0195399122 0.03282376
 [4,] 1.839085 1.835590 -0.0034952935 0.03443303
 [5,] 1.691219 1.708479  0.0172603348 0.03419994
 [6,] 1.585084 1.597277  0.0121935992 0.03440672
 [7,] 1.504763 1.496853 -0.0079104306 0.03422321
 [8,] 1.416176 1.405903 -0.0102731340 0.03371149
 [9,] 1.333721 1.323658 -0.0100626869 0.03245958
[10,] 1.253199 1.250366 -0.0028330498 0.03034140

Как вы можете видеть в строке 4, оптимальное количество кластеров равно 1. Я бы хотел, чтобы функция имела 1 в качестве выхода. Мне нужно оптимальное количество выходов, чтобы быть объектом в среде, например, n равно 1.

1 Ответ

0 голосов
/ 05 ноября 2018

Обычно такая информация находится где-то прямо внутри объекта, например gap_stat$nc. Чтобы найти его, обычно достаточно str(gap_stat).

Однако в этом случае приведенной выше стратегии недостаточно. Но тот факт, что вы можете видеть свой интерес к выводу, означает, что print.clusGap (потому что класс gap_stat является clusGap) покажет, как получить это число. Итак, проверка cluster:::print.clusGap приводит к

maxSE(f = gap_stat$Tab[, "gap"], SE.f = gap_stat$Tab[, "SE.sim"])
# [1] 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...