детерминированная функция в Matlab для кластеризации - PullRequest
0 голосов
/ 06 марта 2019

Я использовал встроенную в Matlab функцию kmeans для кластеризации. Из-за случайности, используемой в алгоритме, результаты отличаются, если я устанавливаю семена по-другому. Это немного раздражает. Есть ли способ уменьшить расхождение результатов кластеризации? Или есть ли в Matlab детерминированная функция для кластеризации?

Ответы [ 3 ]

1 голос
/ 06 марта 2019

Если у вас есть набор инструментов для обработки изображений, есть инструменты, которые используют метод Оцу, который является детерминированным

https://en.wikipedia.org/wiki/Otsu's_method

Если данные являются вашими входными данными:

Для 2 классов: threshold = graythresh(datain);

Порог = пороговое значение для разделения данных на 2 класса, нормированное на [0,1]

Для нескольких классов: thresholds = multithresh(datain,N);

N = количество порогов

Порог = 1xN вектор порогов (не нормирован)

0 голосов
/ 19 марта 2019

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

  1. Поместите 'OnlinePhase', 'on' в аргументы в kmeans. Это приведет к локальному минимуму, который часто является глобальным минимумом.
  2. Поставьте 'Replicates', 5 в аргументах. Здесь 5 можно заменить еще большим числом. Он просит Matlab выполнить kmeans 5 раз и выбрать лучший результат.
  3. Поставьте MaxIter, 1000 в аргументах. Это увеличит максимальное количество итераций со 100 по умолчанию до 1000, что может, но маловероятно, повысить точность.

Пока мы стремимся к наилучшему результату от kmeans, у нас больше шансов получить последовательные результаты.

0 голосов
/ 06 марта 2019

Это нормально. Алгоритм k-среднего создает новые классы после каждой итерации, поэтому результаты могут отличаться. Например: алгоритм состоит в том, чтобы определить, какой фрукт является яблоком с грушей. Он может классифицировать яблоко как грушу, но тогда все яблоки будут грушами, а все груши - яблоками.

...