R: Результаты кластеризации меняются каждый раз, когда я запускаю - PullRequest
2 голосов
/ 18 апреля 2011
library(amap)
set.seed(5)
Kmeans(mydata, 5, iter.max=500, nstart=1, method="euclidean")

в пакете 'amap' и запускается несколько раз, но даже если параметры и начальное значение всегда одинаковы, результаты кластеризации меняются каждый раз, когда я запускаю Kmeans или другие методы кластера.

Я пробовал использовать другую функцию kmeans в разных пакетах, но все так же ...

На самом деле, я хочу использовать Weka и R вместе, поэтому я также попробовал SimpleKMeans в пакете RWeka, и это даетвсегда одинаковое значение.Однако проблема в том, что я не знаю, как хранить кластерные данные вместе с номером кластера от SimpleKmeans в RWeka, поэтому я застрял ...

В любом случае, как сохранить результат кластеризации всегдатак же?или Как мне сохранить результат кластеризации из SimpleKmeans в R?

Ответы [ 3 ]

8 голосов
/ 18 апреля 2011

Вы, должно быть, делаете что-то не так. Я получаю воспроизводимые результаты каждый раз, когда запускаю следующий код, если я устанавливаю начальное число перед каждым вызовом Kmeans():

library(amap)

out <- vector(mode = "list", length = 10)
for(i in seq_along(out)) {
    set.seed(1)
    out[[i]] <- Kmeans(iris[, -5], 3, iter.max=500, nstart=1, method="euclidean")
}

for(i in seq_along(out[-1])) {
    print(all.equal(out[[i]], out[[i+1]]))
}

Последнее для циклических отпечатков:

[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE

Показывает, что результаты всегда одинаковы.

3 голосов
/ 31 января 2012

Просто напоминание о том, что средние значения K чувствительны к порядку точек данных в наборе данных. Если вы снова запустите правильный код с рандомизированными точками данных, вы получите другой результат

2 голосов
/ 27 июля 2015

Вы посадили семя?set.seed(1)

Каждый раз, когда K-Means инициализирует центроид, он генерируется случайным образом, который требует начального числа для генерации случайных значений.

...