MATLAB: K означает кластеризацию с различными центроидами

Я создал кодовую книгу на основе алгоритма кластеризации k-средних. Но алгоритм не сходился к оптимальной кодовой книге, каждый раз центроиды кластера меняются (из-за случайного выбора начальных семян). В Matlab есть возможность дать начальную матрицу K-средним. Но как мы можем выбрать исходную кодовую книгу из большого набора данных? Есть ли другой способ получить уникальную кодовую книгу с помощью K-средних?


person Viz    schedule 13.01.2014    source источник
comment
Я не уверен, но возможно ли, что квазислучайные числа дадут вам более стабильную инициализацию, чем обычное псевдослучайное число?   -  person Dan    schedule 13.01.2014
comment
Лучший способ сделать это — найти постоянные свойства в ваших данных и использовать их для создания начальной кодовой книги.   -  person phyrox    schedule 13.01.2014
comment
@Amro: да .. каждый раз Matlab Kmeans дает разные кодовые книги.   -  person Viz    schedule 26.01.2014


Ответы (2)


В некоторой степени стандартно запускать k-средние несколько раз, используя разные начальные состояния (например, начальные значения) и выбирать результат с наименьшей ошибкой как лучший результат.

Также типично задавать k-средних, случайным образом выбирая k элементов из вашего набора данных в качестве начальных семян.

person mattnedrich    schedule 15.01.2014
comment
я пробовал со случайным начальным числом, но моя окончательная кодовая книга не меняется постоянно. я думаю, что окончательная кодовая книга зависит от исходного семени. - person Viz; 26.01.2014
comment
Да, k-средние подвержены локальным минимумам, поэтому легко получить разные конечные результаты для разных начальных значений. Чтобы бороться с этим, вы должны запускать его много раз с разными начальными значениями и выбирать результат с наименьшей ошибкой. - person mattnedrich; 27.01.2014

Поскольку по умолчанию K-Means MATLAB использует алгоритм K-MEans++ для инициализации, это означает, что он использует случайные числа.

Следовательно, каждый вызов (для последовательных вызовов) K-Means, вероятно, будет давать разные результаты.

У вас есть 3 варианта сделать это детерминированным:

  1. Установите состояние Генератора случайных чисел MATLAB в определенное состояние перед вызовом K-Means.
  2. Используйте параметр потока в параметрах K-Means, чтобы установить поток внутри K-Means.
  3. Напишите свою собственную версию K-Means, которая использует детерминированный способ инициализации K-Means.
person Royi    schedule 22.07.2017