Вот мой сценарий. Рассмотрим ряд событий, которые происходят в разных местах и в разное время - в качестве примера рассмотрим кого-то высоко, кто записывает удары молнии в городе во время шторма. Для моей цели молнии происходят мгновенно и могут поражать только определенные места (например, высотные здания). Также представьте, что каждый удар молнии имеет уникальный идентификатор, чтобы можно было ссылаться на удар позже. В этом городе около 100 000 таких мест (как вы догадываетесь, это аналогия, так как мой нынешний работодатель чувствителен к актуальной проблеме).
Для фазы 1 мой вход - это набор (идентификатор удара, время удара, местоположение удара) кортежей. Желаемый результат - это набор кластеров из более чем одного события, которые попадают в одно и то же место за короткое время. Количество кластеров заранее неизвестно (поэтому k-means здесь не так полезен). То, что считается «коротким», может быть предопределено для данной попытки кластеризации. То есть я могу установить, скажем, 3 минуты, чем запустить алгоритм; позже попробуйте с 4 минутами или 10 минутами. Возможно, было бы неплохо, если бы алгоритм определил «силу» кластеризации и рекомендовал, чтобы при заданном входе наиболее компактная кластеризация была достигнута с использованием определенного значения для «короткой», но это изначально не требуется.
Для фазы 2 я хотел бы принять во внимание амплитуду удара (т.е. действительное число) и искать кластеры, которые находятся в течение короткого времени и с одинаковыми амплитудами.
Я погуглил и проверил здесь ответы о кластеризации данных. Информация немного сбивает с толку (ниже приведен список ссылок, которые я нашел полезными). AFAIK, k-средних и связанные алгоритмы не будут полезны, потому что они требуют, чтобы число кластеров было указано априори. Я не прошу кого-то решить мою проблему (мне нравится ее решать), но некоторая ориентация в большом мире алгоритмов кластеризации данных будет полезна, чтобы сэкономить время. В частности, какие алгоритмы кластеризации подходят, когда число кластеров неизвестно.
Редактировать: я понял, что местоположение не имеет значения, в том смысле, что, хотя события происходят постоянно, мне нужно только кластеризовать их на место . Таким образом, каждое местоположение имеет свои собственные временные ряды событий, которые, таким образом, могут анализироваться независимо.
Некоторые технические данные:
- поскольку набор данных не такой большой, он может вместить все в память.
- параллельная обработка - это хорошо, но не обязательно. У меня есть только 4-ядерный компьютер, и MapReduce и Hadoop будет слишком много.
- язык, с которым я в основном знаком, это Java. Я еще не использовал R, и кривая обучения для него, вероятно, была бы слишком большой для того времени, которое мне дали. Я все равно посмотрю на это в свободное время.
- на данный момент, использование инструментов для запуска анализа нормально, мне не нужно создавать только код. Я упоминаю об этом, потому что, вероятно, будет предложено Weka .
- визуализация будет полезна. Поскольку набор данных достаточно велик, поэтому он не помещается в памяти, визуализация должна как минимум поддерживать масштабирование и панорамирование. И чтобы уточнить: мне не нужно создавать графический интерфейс визуализации, это просто хорошая возможность использовать для проверки результатов, полученных с помощью инструмента.
Спасибо. Вопросы, которые я нашел полезными: Как найти центр кластеров чисел? проблема статистики? , Алгоритм кластеризации для Paper Boys , Java Clustering Library , Как кластеризовать объекты (без координат) , Алгоритм обнаружения «скопления» точек