Статистика разрыва - отличный способ сделать это; Tibshirani, Hastie & Walther (2001).
http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - соответствующий пакет R.
Идея состоит в том, что он выполняет последовательную проверку гипотезы кластеризации ваших данных для K = 1,2,3, ... против нулевой гипотезы случайного шума, которая эквивалентна одному кластеру. Его особая сила заключается в том, что он дает вам достоверную информацию о том, есть ли K = 1, то есть нет ли кластеров.
Вот пример, я проверял некоторые астрономические данные несколько дней назад, как это происходит, а именно из транзитного опроса экзопланет. Я хотел знать, какие доказательства существуют для (выпуклых) кластеров. Мои данные «транзит»
library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)};
break;
}
Со статистикой разрыва вы ищете первое значение K, где тест «проваливается», то есть статистика разрыва значительно уменьшается. Приведенный выше цикл выведет такой ak, однако простое построение cgap даст вам следующий рисунок:
посмотрите, как в Gap наблюдается значительный провал от k = 1 до k = 2, что означает, что фактически нет кластеров (то есть 1 кластер).