Критерий, который kmeans пытается минимизировать, - это трассировка внутренней матрицы разброса, т.е. (к сожалению, этот форум не поддерживает LaTeX, но вы, надеюсь, все же можете его прочитать):
$$ trace (S_w ) = \ sum_ {k = 1} ^ K \ sum {x \ in C_k} || x - \ mu_k || ^ 2 $$
Что касается наилучшей отправной точки: очевидно, «наилучшая» отправная точка точкой будут центры кластеров, в конечном итоге выбранные kmeans . Они возвращаются в атрибуте center :
km <- kmeans(iris[,-5], 3)
print(km$centers)
Если вы ищете лучшую случайную начальную точку, вы можете сами создать случайные начальные точки (с runif ), проделайте это nstart раз и оцените, какая начальная конфигурация приводит к наименьшему km $ tot.winss :
nstart <- 10
K <- 3 # number of clusters
D <- 4 # data point dimension
# select possible range
r.min <- apply(iris[,-5], MARGIN=2, FUN=min)
r.max <- apply(iris[,-5], MARGIN=2, FUN=max)
for (i in 1:nstart) {
centers <- data.frame(runif(K, r.min[d], r.max[d]))
for (d in 2:D) {
centers <- cbind(centers, data.frame(runif(K, r.min[d], r.max[d])))
}
names(centers) <- names(iris[,-5])
# call kmeans with centers and compare tot.withinss
# ...
}