Какой алгоритм кластеризации данных подходит для обнаружения неизвестного количества кластеров во временном ряду событий? - PullRequest
11 голосов
/ 20 февраля 2010

Вот мой сценарий. Рассмотрим ряд событий, которые происходят в разных местах и ​​в разное время - в качестве примера рассмотрим кого-то высоко, кто записывает удары молнии в городе во время шторма. Для моей цели молнии происходят мгновенно и могут поражать только определенные места (например, высотные здания). Также представьте, что каждый удар молнии имеет уникальный идентификатор, чтобы можно было ссылаться на удар позже. В этом городе около 100 000 таких мест (как вы догадываетесь, это аналогия, так как мой нынешний работодатель чувствителен к актуальной проблеме).

Для фазы 1 мой вход - это набор (идентификатор удара, время удара, местоположение удара) кортежей. Желаемый результат - это набор кластеров из более чем одного события, которые попадают в одно и то же место за короткое время. Количество кластеров заранее неизвестно (поэтому k-means здесь не так полезен). То, что считается «коротким», может быть предопределено для данной попытки кластеризации. То есть я могу установить, скажем, 3 минуты, чем запустить алгоритм; позже попробуйте с 4 минутами или 10 минутами. Возможно, было бы неплохо, если бы алгоритм определил «силу» кластеризации и рекомендовал, чтобы при заданном входе наиболее компактная кластеризация была достигнута с использованием определенного значения для «короткой», но это изначально не требуется.

Для фазы 2 я хотел бы принять во внимание амплитуду удара (т.е. действительное число) и искать кластеры, которые находятся в течение короткого времени и с одинаковыми амплитудами.

Я погуглил и проверил здесь ответы о кластеризации данных. Информация немного сбивает с толку (ниже приведен список ссылок, которые я нашел полезными). AFAIK, k-средних и связанные алгоритмы не будут полезны, потому что они требуют, чтобы число кластеров было указано априори. Я не прошу кого-то решить мою проблему (мне нравится ее решать), но некоторая ориентация в большом мире алгоритмов кластеризации данных будет полезна, чтобы сэкономить время. В частности, какие алгоритмы кластеризации подходят, когда число кластеров неизвестно.

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

Некоторые технические данные:
- поскольку набор данных не такой большой, он может вместить все в память.
- параллельная обработка - это хорошо, но не обязательно. У меня есть только 4-ядерный компьютер, и MapReduce и Hadoop будет слишком много.
- язык, с которым я в основном знаком, это Java. Я еще не использовал R, и кривая обучения для него, вероятно, была бы слишком большой для того времени, которое мне дали. Я все равно посмотрю на это в свободное время.
- на данный момент, использование инструментов для запуска анализа нормально, мне не нужно создавать только код. Я упоминаю об этом, потому что, вероятно, будет предложено Weka .
- визуализация будет полезна. Поскольку набор данных достаточно велик, поэтому он не помещается в памяти, визуализация должна как минимум поддерживать масштабирование и панорамирование. И чтобы уточнить: мне не нужно создавать графический интерфейс визуализации, это просто хорошая возможность использовать для проверки результатов, полученных с помощью инструмента.

Спасибо. Вопросы, которые я нашел полезными: Как найти центр кластеров чисел? проблема статистики? , Алгоритм кластеризации для Paper Boys , Java Clustering Library , Как кластеризовать объекты (без координат) , Алгоритм обнаружения «скопления» точек

Ответы [ 3 ]

2 голосов
/ 22 февраля 2010

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

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

Я не использовал Weka, поэтому я не уверен, имеет ли он среднюю смену кластеров. Однако, если вы используете MATLAB, вот набор инструментов ( KDE toolbox ), чтобы сделать это. Надеюсь, это поможет.

1 голос
/ 22 февраля 2010

Не могли бы вы просто использовать иерархическую кластеризацию с разницей во времени ударов как часть метрики расстояния?

0 голосов
/ 08 ноября 2015

Слишком поздно, но все равно я бы добавил:

В R есть пакет fpc и метод pamk(), который предоставляет вам кластеры. Используя pamk(), вам не нужно указывать количество кластеров изначально. Он сам рассчитывает количество кластеров во входных данных.

...