Фон:
Я хотел бы объединить некоторые шаблоны. Один упрощенный шаблон определяется следующим образом:
public class Pattern {
private String id;
private double[] values;
private LocalDate localDate;
}
Каждое значение в массиве значений представляет количество попаданий, которые были обнаружены датчиком в течение 5-минутного интервала. Например, values[0]=7
означает, что за 5-минутный интервал времени между 0: 00-0: 05 утра конкретный датчик c обнаружил 7 попаданий; values[1]=2
означает, что датчик заметил 2 попадания между 0:05 и 0:10 и так далее. Полный паттерн (Pattern) состоит из 288 значений (288 * 5 минут = 1 день).
У меня есть много таких паттернов, и, как уже упоминалось выше, я хотел бы сгруппировать их. Я не знаю точное количество кластеров, поэтому я решил использовать алгоритм OPTICS, чтобы найти, сколько кластеров там.
Я использую следующие параметры:
- Расстояние мера - евклидово расстояние,
- MinPts - 10,
- Эпсилон - Бесконечность.
Задача:
Заказ Я получаю из OPTICS указание, что в наборе данных есть только один кластер, тогда как, когда я запускаю k-средних с k = 5, я получаю некоторые результаты, которые заставляют меня думать, что действительно есть некоторые кластеры (минимум 2) в набор данных.
Вот график достижимости, который я получил:
А вот несколько кластеров из k-средних:
Вопросы :
В чем причина такого поведения ОПТИКИ? Является ли OPTICS хорошим выбором для этого варианта использования? Количество очков слишком велико? Евклидово расстояние не лучший вариант здесь? Параметры неверны?
Дополнительные замечания:
Моя реализация, кажется, в порядке. Я запустил OPTICS для гораздо меньших наборов данных, и это дало разумные результаты. Я запустил его для 15 2d точек с 2 естественными кластерами, и я смог извлечь два кластера из порядка. Я также запускаю его в течение 15 Pattern
с, но с размером массива значений = 5, а не 288, и это тоже было нормально.