DBSCAN алгоритм и алгоритм кластеризации для интеллектуального анализа данных - PullRequest
2 голосов
/ 16 апреля 2011

Как реализовать алгоритм DBSCAN для категориальных данных (набор данных грибов)?

А что такое алгоритм однопроходной кластеризации?

Не могли бы вы предоставить псевдокод для алгоритма кластеризации за один проход?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вы можете запустить DBSCAN с функцией произвольного расстояния без каких-либо изменений. Часть индексации будет более сложной, поэтому вы, скорее всего, получите только O(n^2) сложность.

Но если вы внимательно посмотрите на DBSCAN, все, что он делает, это вычисляет расстояния, сравнивает их с порогом и подсчитывает объекты. Это является ключевым преимуществом, его можно легко применять к различным типам данных, все, что вам нужно, это определить функцию расстояния и пороговые значения.

Я сомневаюсь, что существует версия DBSCAN с одним проходом, так как она основана на попарных расстояниях. Вы можете обрезать некоторые из этих вычислений (здесь вступает в действие индекс), но, по сути, вам нужно сравнивать каждый объект с любым другим объектом, поэтому он находится в O(n log n), а не в одном проходе.

Однопроходный: я полагаю, что оригинальное k-среднее было алгоритмом однопроходного Первые k объектов - это ваши начальные средства. Для каждого нового объекта вы выбираете среднее значение и закрываете его (постепенно) новым объектом. До тех пор, пока вы не сделаете еще одну итерацию для своего набора данных, это был «однопроходный». (Результат будет даже хуже, чем у k-средних в стиле Ллойда).

0 голосов
/ 16 апреля 2011

Прочитайте первые k предметов и удерживайте их. Вычислить расстояния между ними.

Для каждого оставшегося предмета:

  • Узнайте, к какому из k предметов он ближе всего, и расстояние между этими двумя предметами.

  • Если это больше, чем ближайшее расстояние между любыми двумя из k элементов, вы можете поменять новый элемент одним из этих двух и, по крайней мере, не уменьшить ближайшее расстояние между любыми двумя из новых k элементов. Сделайте так, чтобы максимально увеличить это расстояние.

Предположим, что набор всех элементов можно разделить на кластеры l <= k, чтобы расстояние между любыми двумя точками в одном кластере было меньше расстояния между любыми двумя точками в разных кластерах. Затем, запустив этот алгоритм, вы сохраните хотя бы одну точку от каждого кластера. </p>

...