Я создал кодовую книгу на основе алгоритма кластеризации k-средних. Но алгоритм не сходился к оптимальной кодовой книге, каждый раз центроиды кластера меняются (из-за случайного выбора начальных семян). В Matlab есть возможность дать начальную матрицу K-средним. Но как мы можем выбрать исходную кодовую книгу из большого набора данных? Есть ли другой способ получить уникальную кодовую книгу с помощью K-средних?
MATLAB: K означает кластеризацию с различными центроидами
comment
Я не уверен, но возможно ли, что квазислучайные числа дадут вам более стабильную инициализацию, чем обычное псевдослучайное число?
- person Dan   schedule 13.01.2014
comment
Лучший способ сделать это — найти постоянные свойства в ваших данных и использовать их для создания начальной кодовой книги.
- person phyrox   schedule 13.01.2014
comment
возможный дубликат MATLAB kMeans не всегда сходится к глобальным минимумам а>
- person Amro   schedule 14.01.2014
comment
@Amro: да .. каждый раз Matlab Kmeans дает разные кодовые книги.
- person Viz   schedule 26.01.2014
Ответы (2)
В некоторой степени стандартно запускать k-средние несколько раз, используя разные начальные состояния (например, начальные значения) и выбирать результат с наименьшей ошибкой как лучший результат.
Также типично задавать k-средних, случайным образом выбирая k элементов из вашего набора данных в качестве начальных семян.
person
mattnedrich
schedule
15.01.2014
я пробовал со случайным начальным числом, но моя окончательная кодовая книга не меняется постоянно. я думаю, что окончательная кодовая книга зависит от исходного семени.
- person Viz; 26.01.2014
Да, k-средние подвержены локальным минимумам, поэтому легко получить разные конечные результаты для разных начальных значений. Чтобы бороться с этим, вы должны запускать его много раз с разными начальными значениями и выбирать результат с наименьшей ошибкой.
- person mattnedrich; 27.01.2014
Поскольку по умолчанию K-Means MATLAB использует алгоритм K-MEans++ для инициализации, это означает, что он использует случайные числа.
Следовательно, каждый вызов (для последовательных вызовов) K-Means, вероятно, будет давать разные результаты.
У вас есть 3 варианта сделать это детерминированным:
- Установите состояние Генератора случайных чисел MATLAB в определенное состояние перед вызовом K-Means.
- Используйте параметр потока в параметрах K-Means, чтобы установить поток внутри K-Means.
- Напишите свою собственную версию K-Means, которая использует детерминированный способ инициализации K-Means.
person
Royi
schedule
22.07.2017