Инициализация K-средних центров с помощью случайных подвыборок набора данных?

13

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

Например, предположим, я хочу 5 clusters. Я, 5 random samplesскажем, size=20%из оригинального набора данных. Могу ли я затем взять среднее значение каждой из этих 5 случайных выборок и использовать эти средства в качестве моих 5 начальных кластерных центров? Я не знаю, где я это читал, но я хотел знать, что вы, ребята, думаете об этой идее.


ОБНОВЛЕНИЕ: Пожалуйста, посмотрите этот поток Инициализация кластеризации K-средних: каковы существующие методы? для общего обсуждения различных методов инициализации.

JEquihua
источник
11
Если вы случайным образом разделите выборку на 5 подвыборок, ваши 5 средних будут почти совпадать. Какой смысл делать такие близкие точки начальными кластерными центрами? В большинстве реализаций K-средних выбор исходных центров кластеров по умолчанию основан на противоположной идее: найти 5 наиболее удаленных друг от друга точек и сделать их начальными центрами.
ttnphns
2
@ttnphns Это был бы хороший ответ.
2
Я думаю, что было бы намного лучше выбрать общее среднее значение как одну точку и выбрать другие, которые находятся далеко от этого центра в различных направлениях.
Майкл Р. Черник
1
Имеет смысл. Как мне найти эти 5 точек, которые находятся далеко друг от друга? Спасибо!
JEquihua
@JEquihua, я разместил свой комментарий в качестве ответа и добавил детали, которые вы запрашиваете.
ttnphns

Ответы:

16

Если вы случайно разделите выборку на 5 подвыборок, ваши 5 средних будут почти совпадать. Какой смысл делать такие близкие точки начальными кластерными центрами?

Во многих реализациях K-средних выбор исходных центров кластеров по умолчанию основан на противоположной идее: найти 5 точек, которые находятся наиболее далеко друг от друга, и сделать их начальными центрами. Вы можете спросить, что может быть способом найти эти отдаленные точки? Вот что делает для этого K-means SPSS:

Возьмем любые k случаев (точек) набора данных в качестве начальных центров. Все остальные случаи проверяются на возможность замены их в качестве начальных центров следующими условиями:

  • а) Если случай находится дальше от центра, ближайшего к нему, чем расстояние между двумя наиболее близкими друг к другу центрами, случай заменяет тот центр последних двух, к которому он ближе.
  • б) Если корпус находится дальше от 2-го центра, ближайшего к нему, чем расстояние между центром, ближайшим к нему, и центром, ближайшим к этому последнему, корпус заменяет центр, ближайший к нему.

Если условие (а) не выполняется, условие (б) проверяется; если оно не удовлетворено, то и дело не становится центром. В результате такого прохождения случаев мы получаем k предельных случаев в облаке, которые становятся начальными центрами. Результат этого алгоритма, хотя и достаточно надежный, не полностью нечувствителен к начальному выбору «любых k случаев» и к порядку сортировки случаев в наборе данных; Итак, несколько случайных попыток запуска все еще приветствуются, как это всегда имеет место с K-средних.

Смотрите мой ответ со списком популярных методов инициализации для k-средних. Метод разбиения на случайные подвыборки (здесь и мной и другими), а также описанный метод, используемый SPSS - тоже есть в списке.

ttnphns
источник
1
Как только я сделаю то, что вы описываете, какую статистику я могу использовать, чтобы определить, какая точка инициализации приведет к лучшему разделу? Спасибо вам за все.
JEquihua
Использование предельных точек в качестве начальных центров один раз не гарантирует получение наилучшего разбиения в конце, хотя они (по сравнению со случайными начальными центрами) уменьшают вероятность попадания в «локальный оптимум» и ускоряют процесс сходимости , Варьируя порядок дел, делайте полное k- среднее разбиение 2-5 раз, сохраняйте полученные конечные центры, усредняйте их и вводите в качестве начальных для одной окончательной кластеризации. Этот раздел, безусловно, лучший. На самом деле вам не нужны никакие специальные статистические данные для проверки, если только вы не собираетесь сравнивать части разных k.
ttnphns
1
Я хочу сравнить разделы разных k. Что я мог использовать? Какая хорошая идея? спасибо за помощь мне так много. @ttnphns.
JEquihua
Там существует большое число «внутренних» кластеризация критериев . Одним из наиболее подходящих для k-средних является Calinski-Harabasz (многовариантный F-критерий Фишера). Google для этого или для других.
ttnphns
7

Средства будут слишком похожи. Вы также можете найти среднее значение для набора данных, а затем поместить начальные центроиды в маленький круг / сферу вокруг этого среднего значения.

Если вы хотите увидеть больше схемы звуковой инициализации для k-средних, взгляните на k-means ++. Они разработали довольно умный метод для посева k-средних.

  • Артур Д. и Васильвицкий С. (2007).
    k-means ++: преимущества тщательного посева ".
    Материалы восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам

Автор слайды: http://www.ima.umn.edu/~iwen/REU/BATS-Means.pdf

ВЫЙТИ - Anony-Mousse
источник
Я читал это, Это выглядит довольно интуитивно выгодно, но я думаю, что еще предстоит доказать, что он работает лучше, чем просто брать много случайных точек инициализации. Я нашел этот простой код на случай, если вы захотите попробовать его: kmpp <- функция (X, k) {n <- nrow (X) C <- числовая (k) C [1] <- выборка (1: n, 1) для (i в 2: k) {dm <- distmat (X, X [C,]) pr <- применить (дм, 1, мин); pr [C] <- 0 C [i] <- sample (1: n, 1, prob = pr)} kmeans (X, X [C,])}
JEquihua
Известно, что значительно сокращается число итераций до сходимости и в среднем достигаются лучшие результаты. Я могу подтвердить, что в моих собственных экспериментах kmeans ++ - это путь. Я использую реализацию ELKI.
ВЫЙТИ - Anony-Mousse
Что такое реализация ELKI? где я могу найти это? Привет!
JEquihua
ru.wikipedia.org/wiki/ELKI
ВЫЙТИ - Anony-Mousse
4

Использование средств случайных выборок даст вам противоположность того, что вам нужно, как указал ttnphns в своем комментарии. Нам нужен способ найти точки данных, которые находятся довольно далеко друг от друга.

В идеале вы можете перебирать все точки, находить расстояния между ними, определять, где расстояния самые большие ...

Не в обход намерений ОП, но я думаю, что «решение» встроено в алгоритм k-средних. Мы выполняем несколько итераций и пересчитываем центроиды кластеров на основе предыдущих итераций. Мы также обычно запускаем алгоритм kmeans несколько раз (со случайными начальными значениями) и сравниваем результаты.

Если человек обладает априорным знанием, предметным знанием, то это может привести к превосходному методу определения, где должны быть начальные кластерные центры. В противном случае, это, вероятно, вопрос выбора случайных точек данных в качестве начальных значений и последующего использования нескольких прогонов и нескольких итераций за прогон.

Мужчина
источник
Как только я сделаю то, что вы описываете, какую статистику я могу использовать, чтобы определить, какая точка инициализации приведет к лучшему разделу? Спасибо вам за все.
JEquihua
2

Все предложенные ответы эффективны, но их гораздо труднее реализовать, чем ваше первоначальное предложение. Очень простой способ инициализации - это взятьКслучайные наблюдения как исходные точки. Вероятность сближения двух начальных точек довольно мала, и алгоритм выполняется быстро для всех, кроме самых крайних случаев.

gregmacfarlane
источник
Имеет много смысла. Могу ли я спросить вас то же самое, что я спросил у Аман. Предположим, я беру миллион случайных начальных точек. Что я могу использовать, чтобы определить, какой из полученных разделов лучше? Привет! @gmacfarlane
JEquihua
Как правило, К-средство алгоритмов повторяется до тех пор, пока среднеквадратическая ошибка (или средняя абсолютная ошибка) не будет минимизирована и не будет стабильной между итерациями. В любом данном наборе данных будет определенное количество комбинаций, которые действительно минимизируют это MSE. Таким образом, при миллиардном прогоне, вероятно, будет создано от одной до десяти схем разбиения (в зависимости от странности ваших данных), и я бы выбрал схему с самым низким MSE среди всех групп.
gregmacfarlane
Я должен отметить, что если ваши разделы очень чувствительны к выбору начальных точек, это означает, что ваши данные не имеют естественных кластеров и К-значит, алгоритм кластеризации может быть не лучшим вариантом для использования. Или вы пытаетесь разместить больше кластеров, чем естественно представляют данные.
gregmacfarlane