Статистика розриву - це чудовий спосіб зробити це; 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, де тест "провалюється", тобто статистика розриву значно зменшується. Цикл вище буде надрукувати такий ак, однак просто складання cgap дає вам наступну фігуру:
Подивіться, як є значне занурення в проміжок від k = 1 до k = 2, що означає, що насправді немає кластерів (тобто 1 кластер).