Алгоритм k-средних в Matlab дает неправильный ответ? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть следующие сомнения: Я использую функцию k-средних в Matlab, и я просто хочу использовать алгоритм ванильного Ллойда с моим желаемым набором точек инициализации. Я использую следующий код, где «start» - мой вектор инициализации

kmeans(data,[],'Start',start, 'OnlinePhase', 'off');

Предположим, мои данные двумерные в диапазоне (-2, -1) X (2,1), и я инициализирую свои начальные точки в (-10,0) и (0,0). В идеале я должен получить все точки в одном кластере, а не в другом, но я получаю два кластера в ответе (так как (-10,0) действительно далеко, поэтому он должен сходиться за одну итерацию). Как это возможно? Я прочитал описание алгоритма k-средних на сайте Matlab, и кажется, что это не должно быть ответом.

k-means, original data and clustered data

1 Ответ

0 голосов
/ 16 сентября 2018

Ни одна точка не является ближайшей к плохо выбранному центру. Таким образом, не может быть пересчитано и будет заменено новым центром (см. Документацию). Все точки сначала присваиваются кластеру 0,0. Некоторые алгоритмы могут даже плохо работать с делением на 0 или отбрасывают этот центр и уменьшают до k = 1. В Matlab вы можете выбрать обработку - по умолчанию он выберет точку, наиболее удаленную от всех центров, в качестве замены.

Хранение пустого кластерного центра там, где это вполне разумно, ИМХО, поскольку это не изменит никакого перечисления кластеров, которое вы имели в виду при выборе начальных центров, и (когда начальные центры выбраны правильно) может даже стать снова непусто, в конце концов, когда другие центры продолжают двигаться (но не здесь).

...