Ищем алгоритм кластеризации, который может кластеризоваться по плотности вокруг центроида, но с фиксированным максимальным расстоянием отсечки - PullRequest
0 голосов
/ 14 апреля 2019

В настоящее время у меня есть список с трехмерными координатами, которые я хочу кластеризовать по плотности в неизвестное количество кластеров. В дополнение к этому я хочу оценить кластеры по населению и расстоянию до центроидов. Я также хотел бы иметь возможность установить максимально возможное расстояние от определенного центроида. В идеале центроид представляет собой точку набора данных, но это не является абсолютно необходимым. Я хочу сделать это для списка в диапазоне приблизительно от 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, что на несколько порядков быстрее, чем мой код, но, очевидно, он не выполняет то, что я хочу сделать

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

Надеюсь, я смогу понять, что я хочу сделать.

1 Ответ

0 голосов
/ 19 апреля 2019

Используйте функцию поиска соседей sklearn, чтобы быстро найти точки на максимальном расстоянии 2.Делайте это только один раз , чтобы вычислить логистические веса только один раз.

Затем остаток использует только эти предварительно вычисленные данные?

...