Подтвердить что ты не робот

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

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

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

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

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

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

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

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

4b9b3361

Ответ 2

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

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

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

Ответ 3

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

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