В настоящее время у меня есть список с трехмерными координатами, которые я хочу кластеризовать по плотности в неизвестное количество кластеров. В дополнение к этому я хочу оценить кластеры по населению и расстоянию до центроидов.
Я также хотел бы иметь возможность установить максимально возможное расстояние от определенного центроида. В идеале центроид представляет собой точку набора данных, но это не является абсолютно необходимым. Я хочу сделать это для списка в диапазоне приблизительно от 100 до 10000 трехмерных координат.
Так, например, скажем, у меня есть точка [x, y, z], которая может быть моим центроидом:
Точки, наиболее близкие к x, y, z, должны вносить наибольший вклад в его оценку (т. Е. Функция логистической оценки, такая как y = (1 + exp (4 * (- 1.0 + x))) ** -1, где x представляет евклидово расстояние до точки [x, y, z]
(https://www.wolframalpha.com/input/?i=(1+%2B+exp(4(-1.0%2Bx)))**+-1)
Поскольку эта функция никогда не достигает 0, необходимо установить максимальное расстояние, например, 2 единицы расстояния, чтобы установить ограничение для кластера.
Я хочу делать это до тех пор, пока кластеры больше не будут созданы, меня интересует только центроид, поэтому желательно, чтобы он был реальным, а не интерполированным, у него также были связаны другие свойства.
Я уже пробовал DBSCAN от sklearn, что на несколько порядков быстрее, чем мой код, но, очевидно, он не выполняет то, что я хочу сделать
В настоящее время я просто вычисляю близость каждой точки относительно всех других точек и оцениваю каждую точку по количеству и расстоянию до ее соседей (с помощью той же функции оценки, которая обсуждалась выше), затем я беру самую высокую оценочную точку и удаляю все другие, с более низким баллом, точки, которые находятся в пределах определенного расстояния отсечки. Он выполняет свою работу и является точным, но слишком медленным.
Надеюсь, я смогу понять, что я хочу сделать.