Не уверен, что это то, что вы ищете, потому что алгоритм очень хорошо объяснен в wikipedia . Вы хотите объяснить алгоритм или его перевод (или хорошую библиотеку) в C #?
Вы также можете взглянуть на общий алгоритм кластеризации .
Алгоритм
Допустим, вы выбрали epsilon, а количество элементов для запуска кластера равно 4.
Вам необходимо определить функцию расстояния, функцию DBSCAN и функцию расширения кластера:
из википедии:
DBSCAN(D, eps, MinPts)
C = 0
for each unvisited point P in dataset D
mark P as visited
N = getNeighbors (P, eps)
if sizeof(N) < MinPts
mark P as NOISE
else
C = next cluster
expandCluster(P, N, C, eps, MinPts)
expandCluster(P, N, C, eps, MinPts)
add P to cluster C
for each point P' in N
if P' is not visited
mark P' as visited
N' = getNeighbors(P', eps)
if sizeof(N') >= MinPts
N = N joined with N'
if P' is not yet member of any cluster
add P' to cluster C
У вас есть список баллов:
Первый: выбрать точку случайным образом:
Тест в эпсилоне (Эпсилон - это радиус окружностей), если число точек равно 4. Если да, запустить кластер (зеленый), в противном случае пометить как шум (красный) :( функция DBSCAN для каждой не посещенной точки)
Стрелки показывают все точки, которые вы посетили
во-вторых: разверните кластер: как только вы найдете кластер, отметьте все точки зелеными и проверьте наличие других точек в этом кластере
ПРИМЕЧАНИЕ: ранее созданную точку шума можно изменить на зеленый, если в кластере
2 красные точки на самом деле находятся в кластере ...
Как только вы прошли все пункты, вы останавливаетесь