Подтвердить что ты не робот

K-означает возвращаемое значение в R

Я использую функцию kmeans() в R, и мне было любопытно, в чем разница между атрибутами totss и tot.withinss возвращаемого объекта. Из документации они, похоже, возвращают одно и то же, но применяемые на моем наборе данных значение totss равно 66213.63, а для tot.withinss - 6893.50. Пожалуйста, дайте мне знать, если вы знакомы с деталями mroe. Спасибо!

Marius.

4b9b3361

Ответ 1

Учитывая сумму сумм квадратов betweenss и вектор внутри суммы квадратов для каждого кластера withinss, следующие формулы:

totss = tot.withinss + betweenss
tot.withinss = sum(withinss)

Например, если бы существовал только один кластер, тогда betweenss был бы 0, в withinss и totss = tot.withinss = withinss был бы только один компонент.

Для дальнейшего уточнения мы можем вычислить эти различные величины, которые сами задают кластерные назначения, и это может помочь прояснить их значения. Рассмотрим данные x и назначения кластера cl$cluster из примера в help(kmeans). Определите сумму функций квадратов следующим образом: это вычитает среднее значение каждого столбца x из этого столбца, а затем суммы квадратов каждого элемента оставшейся матрицы:

# or ss <- function(x) sum(apply(x, 2, function(x) x - mean(x))^2)
ss <- function(x) sum(scale(x, scale = FALSE)^2)

Тогда имеем следующее. Заметим, что cl$centers[cl$cluster, ] - это установленные значения, т.е. Это я - матрица с одной строкой на точку, так что i-я строка является центром кластера, к которому принадлежит i-я точка.

example(kmeans) # create x and cl

betweenss <- ss(cl$centers[cl$cluster,]) # or ss(fitted(cl))

withinss <- sapply(split(as.data.frame(x), cl$cluster), ss)
tot.withinss <- sum(withinss) # or  resid <- x - fitted(cl); ss(resid)

totss <- ss(x) # or tot.withinss + betweenss

cat("totss:", totss, "tot.withinss:", tot.withinss, 
  "betweenss:", betweenss, "\n")

# compare above to:

str(cl)

EDIT:

Поскольку этот вопрос был дан ответ, R добавил дополнительные аналогичные примеры kmeans (example(kmeans)) и новый метод fitted.kmeans, и теперь мы покажем, как соответствующий метод вписывается в приведенное выше в комментарии, заканчивающем строки кода.

Ответ 2

Я думаю, что вы заметили ошибку в документации... в которой говорится:

withinss     The within-cluster sum of squares for each cluster.
totss        The total within-cluster sum of squares.
tot.withinss     Total within-cluster sum of squares, i.e., sum(withinss).

Если вы используете примерный набор данных на странице справки:

> kmeans(x,2)$tot.withinss
[1] 15.49669
> kmeans(x,2)$totss
[1] 65.92628
> kmeans(x,2)$withinss
[1] 7.450607 8.046079

Я думаю, кто-то должен написать запрос в список рассылки r-devel с просьбой пересмотреть страницу справки. Я готов сделать это, если вы этого не хотите.