Ищем алгоритм кластеризации для сильно зашумленных данных.

Вопрос или проблема

Я пытаюсь найти кластеры в некоторых данных с высоким уровнем шума (см. график ниже, данные здесь).

вставьте описание изображения сюда

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

Некоторые соображения:

  • Я использую Julia для обработки данных.

  • Данные имеют периодические граничные условия в обоих направлениях.

  • Количество кластеров известно заранее.

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

Спасибо!

Может быть интересно уменьшить шум (=сглаживание) как можно больше перед применением алгоритма кластеризации.

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

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

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

Смотрите также:

https://juliapackages.com/p/hexagons

https://github.com/JuliaStats/KernelDensity.jl

Ответ или решение

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

Понимание проблемы

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

Рекомендованные подходы

  1. Сглаживание данных: Перед применением метода кластеризации, рекомендуется попробовать уменьшить уровень шума в ваших данных. Использование методов сглаживания, таких как скользящее среднее или метод ядерной регрессии, может существенно улучшить качество кластеризации. Это поможет визуализировать структуру данных и выделить потенциальные кластеры более точно.

  2. Методы понижения размерности: В случае сложной структуры данных применение алгоритмов понижения размерности, таких как t-SNE или UMAP, может помочь выделить скрытые паттерны. Эти методы позволяют сохранить локальные структуры данных, что может быть полезно для выявления кластеров.

  3. Алгоритмы кластеризации:

    • HDBSCAN: Этот алгоритм является расширением DBSCAN и работает лучше в условиях варьируемой плотности кластеров. HDBSCAN автоматически настраивает параметры, что уменьшает необходимость ручной настройки.
    • Кластеризация k-средних (k-means): Если вы знаете заранее количество кластеров, можно использовать k-средние. Этот метод работает быстрее и легче в реализации, однако он требует хорошего начального очевидного распределения кластеров.
    • Gaussian Mixture Models (GMM): Этот метод позволяет учитывать различия в свойствах кластеров, таких как форма и размер. GMM может быть более устойчив к шуму, чем k-средние, и подходит для работы с данными, имеющими регулярные и симметричные распределения.
  4. Группировка на основе плотности: Методы, основанные на плотности, такие как описанные вами функции оценки плотности, могут помочь выявить кластеры без необходимости задавать конкретное количество кластеров. Вы можете использовать Kernel Density Estimation (KDE), чтобы выделить области с высокой плотностью значений и, тем самым, создать подмножества данных для дальнейшей кластеризации.

  5. Использование теплофильтров и гексагоны: Как вы предложили, можно применять гексагональные сетки для определения участков с высокой плотностью. Это снизит влияние шума и поможет в выделении существенных кластеров.

Заключение

Учитывая вашу ситуацию с высоконечными данными, сложно дать однозначный ответ. Выбор алгоритма зависит от конкретного распределения данных и ваших требований к производительности. Рекомендуется протестировать несколько описанных методов и сбалансировать их сложность, качество кластеризации и требования к скорости. Использование Julia для реализации этих алгоритмов будет иметь свои преимущества благодаря множеству поддерживаемых библиотек, включая Clustering.jl для кластеризации и KernelDensity.jl для оценки плотности.

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

Оцените материал
Добавить комментарий

Капча загружается...