k-означает возвращаемое значение в R - PullRequest
13 голосов
/ 26 декабря 2011

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

Marius.

Ответы [ 2 ]

19 голосов
/ 26 декабря 2011

Учитывая сумму квадратов 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, и теперь мы показываем, как подобранный метод вписывается в вышеприведенное в комментариях, завершающих строки кода.

0 голосов
/ 26 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...