Реализация алгоритма OPTICS (кластеризация) в Python - PullRequest
32 голосов
/ 01 апреля 2011

Я ищу достойную реализацию алгоритма OPTICS в Python.Я буду использовать его для формирования основанных на плотности кластеров пар точек ((x, y)).

Я ищу что-то, что принимает пары (x, y) и выводит список кластеров, гдекаждый кластер в списке содержит список (x, y) пар, принадлежащих этому кластеру.

Ответы [ 7 ]

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

Я не знаю о полной и точной реализации OPTICS на python. Ссылки, размещенные здесь, кажутся лишь приблизительным приближением идеи ОПТИКИ. Они также не используют индекс для ускорения, поэтому они будут работать в O(n^2) или, более вероятно, даже O(n^3).

В ОПТИКЕ есть ряд хитрых вещей, помимо очевидной идеи. В частности, предлагается установить пороговое значение с относительными пороговыми значениями ("xi") вместо абсолютных пороговых значений, как указано здесь (в этот момент результат будет приблизительно равен DBSCAN!)

Оригинальный документ OPTICS содержит предложенный подход к преобразованию вывода алгоритма в фактические кластеры:

http://www.dbs.informatik.uni -muenchen.de / Publikationen / Документы / OPTICS.pdf

Реализация OPTICS в Weka по существу не поддерживается и столь же неполна. На самом деле он не создает кластеры, он только вычисляет порядок кластеров. Для этого он создает копию базы данных - это не совсем код Weka.

Кажется, существует довольно обширная реализация, доступная в ELKI на Java группой, которая в первую очередь опубликовала OPTICS. Возможно, вы захотите протестировать любую другую реализацию на этой «официальной» версии.

7 голосов
/ 28 апреля 2011

РЕДАКТИРОВАТЬ: известно, что не является полной реализацией ОПТИКИ.

Я сделал быстрый поиск и обнаружил следующее ( Оптика ). Я не могу ручаться за его качество, однако алгоритм кажется довольно простым, поэтому вы сможете быстро его проверить / адаптировать.

Вот краткий пример того, как построить кластеры на выходе алгоритма оптики:

def cluster(order, distance, points, threshold):
    ''' Given the output of the options algorithm,
    compute the clusters:

    @param order The order of the points
    @param distance The relative distances of the points
    @param points The actual points
    @param threshold The threshold value to cluster on
    @returns A list of cluster groups
    '''
    clusters = [[]]
    points   = sorted(zip(order, distance, points))
    splits   = ((v > threshold, p) for i,v,p in points)
    for iscluster, point in splits: 
        if iscluster: clusters[-1].append(point)
        elif len(clusters[-1]) > 0: clusters.append([])
    return clusters

    rd, cd, order = optics(points, 4)
    print cluster(order, rd, points, 38.0)
6 голосов
/ 11 июня 2018

В настоящее время существует библиотека pyclustering , которая содержит, среди прочего, реализацию OPTICS на Python и C ++.

6 голосов
/ 15 апреля 2016

Хотя технически это не ОПТИКА, существует реализация HDBSCAN * для python, доступная в https://github.com/lmcinnes/hdbscan. Это эквивалентно ОПТИКЕ с бесконечным максимальным эпсилоном и другим методом выделения кластера. Поскольку реализация предоставляет доступ к сгенерированной кластерной иерархии, вы также можете извлечь кластеры из нее с помощью более традиционных методов OPTICS, если хотите.

Обратите внимание, что, несмотря на не ограничение параметра epsilon, эта реализация по-прежнему достигает производительности O (n log (n)) с использованием алгоритмов минимального связующего дерева на основе kd-дерева и шарового дерева и может обрабатывать довольно большие наборы данных .

1 голос
/ 13 марта 2019

Теперь он реализован в разрабатываемой версии (scikit-learn v0.21.dev0) sklearn (модуль изучения кластеров и машин для Python)

вот ссылка: https://scikit -learn.org / DEV / модули / генерироваться / sklearn.cluster.OPTICS.html

1 голос
/ 24 апреля 2011

Вы хотите посмотреть на кривую заполнения пространства или пространственный индекс.Sfc уменьшает 2d сложность до 1d сложности.Вы хотите взглянуть на блог пространственного индекса дерева квадратов кривой Гильберта.Вы хотите скачать мою реализацию sfc на phpclasses.org (кривая Гильберта).

1 голос
/ 01 апреля 2011

См. «Кластерные подходы на основе плотности» http://www.chemometria.us.edu.pl/index.php?goto=downloads

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...