NeuroPro | нейронные сети |
|
Начало Новости Услуги Нейронные сети Программы Статьи Заметки Ссылки Вопросы и ответы Об авторе / контакты |
Масштабируемые алгоритмы кластерного анализа: назад в будущее?Заметка отражает мнение, частично полярное выводам работы [1]. Хочу подчеркнуть, что это не критика текста [1], а небольшое уточнение и иной взгляд на один из перечисленных там алгоритмов. Рассматриваются методы и алгоритмы кластерного анализа (кластеризации, автоматической классификации) данных и масштабируемость таких алгоритмов при росте размеров обрабатываемых выборок данных до десятков-сотен тысяч и даже миллионов ситуаций-паттернов (строк в базе данных). В [1] приводятся два утверждения, которые хочется уточнить. Первая фраза - "разработаны масштабируемые аналоги алгоритма типа k-means" - наталкивает на мысль, что с базовым методом k-means (синонимы: метод к-средних, метод динамических ядер) в случае больших баз данных ловить нечего и что относительно простыми средствами он не масштабируется - нужны именно специальные варианты (причем в [1] указана только одна ссылка на такие алгоритмы - на статью [2]). Однако, это не так. Алгоритм [2] предполагает сжатие-декомпрессию блоков данных - сжатие для запихивания в имеющийся объем памяти как можно большего фрагмента базы данных (которая вся целиком в оперативную память компьютера не влезает) и динамическую распаковку сжатых данных (с возможностью организации итераций по этим данным - т.к. итерации в памяти гораздо быстрее, чем запросы данных с жесткого диска). Но позже, в статье [3] было показано, что этот алгоритм проигрывает простейшей масштабируемой версии алгоритма k-means. Предложенный в [3] масштабируемый вариант метода динамических ядер является однопроходным по базе данных, не требует выделения дополнительной памяти для хранения исходных данных. Отличие алгоритма кластерного анализа [3] от базового варианта k-means заключается просто в периодическом пересчете центров кластеров во время единственного прохода по таблице. Действительно, в режиме онлайн, т.е. с корректировкой центров кластеров после просмотра каждого очередного паттерна, алгоритм k-means является неустойчивым, кластеры могут "водить хоровод" и не обеспечивать сходимости решения. Но и корректировать центры кластеров после просмотра всей выборки неэкономично (для сходимости потребуется несколько проходов по выборке), поэтому можно корректировать кластеры после просмотра репрезентативного фрагмента выборки - тогда коррекция по нескольким последовательным фрагментам эквивалентна нескольким итерациям по всей выборке данных. Дополнительную возможность ускорения вариантов алгоритма k-means при числе кластеров больше трех дает еще одна статья Чарльза Элкана [4] - вычисление парных расстояний между текущими позициями центров кластеров (расстояния вычисляются однократно на каждой эпохе) и использование затем неравенства треугольника позволяет снизить число вычисления парных расстояний между текущим примером выборки и векторами-центрами кластеров, т.е. снизить затраты на вычисление локальной функции оптимизации (по терминам из [1]). Соответственно, другое приведенное в [1] высказывание о масштабируемости алгоритмов кластерного анализа через отказ от локальной функции оптимизации не является прямым запрещением использования алгоритма k-means как масштабируемого алгоритма (или теоретическим доказательством о несовместимости k-means и отличной от локальной функции оптимизации). Так, предложенный в [3] вариант использует только один проход по базе данных (или несколько проходов - если пользователь захочет перестраховаться с гарантией сходимости) - это минимум, ниже которого не опустится никакой масштабируемый алгоритм кластерного анализа. А алгоритм [4] позволяет еще сильнее снизить вычислительную сложность метода динамических ядер: если исходно на каждой итерации-эпохе сложность составляет СnN операций, где С - число кластеров, n - размерность векторов, N - число примеров, то в модификации [4] сложность эпохи будет сnN, где c<С, и чем больше число кластеров С, тем больше может быть относительное ускорение. Итог. Простейший метод кластерного анализа - алгоритм динамических ядер - очень просто дорабатывается для достижения потенциально пиковой масштабируемости при минимально задействуемом объеме дополнительной памяти (накапливаемые на фрагментах выборки вектора поправок к ядрам для [3] и матрица парных расстояний между центрами кластеров для [4]). И длина текста программы реализации этого модифицированного масштабируемого алгоритма будет меньше, чем для иных алгоритмов - т.е. снижаются трудозатраты на этапе программирования и требования к квалификации программиста. Отмечу, что выводы похожи на озвученное в другой заметке утверждение об относительно высокой эффективности многих базовых алгоритмов обработки и анализа данных по сравнению с сверхсовременными разработками. Действительно, простенькая доработка алгоритма k-means вывела его если и не в безусловные лидеры, то гарантированно в группу лидеров по многим характеристикам. K-means forever? :)
Литература
|