Сравнение меток HDBSCAN с результатами мягкого кластера

Я получаю мягкие кластеры из набора данных с помощью HDBSCAN следующим образом:

clusterer = hdbscan.HDBSCAN(min_cluster_size=10, prediction_data=True)
clusterer.fit(data)
soft_clusters = hdbscan.all_points_membership_vectors(clusterer)
closest_clusters = [np.argmax(x) for x in soft_clusters]

soft_clusters — это двумерный массив вероятностей того, что точка данных принадлежит каждому кластеру, поэтому closest_clusters должен быть массивом с меткой, которой точка данных, скорее всего, принадлежит. Однако, когда я сравниваю closest_clusters с clusterer.labels_ (метка, которую HDBSCAN присваивает точке данных), я обнаруживаю, что почти ни один из кластеров не совпадает с точками данных, имеющими метку, то есть точка данных с меткой 3 имеет 4 ближайших кластер.

Я не уверен, что я неправильно понимаю, как работает мягкая кластеризация, или что-то не так с кодом. Любая помощь приветствуется!


person Andrew Ng    schedule 05.07.2017    source источник
comment
Я не помню ничего подобного из статьи HDBSCAN * ... какова теоретическая поддержка этого?   -  person Has QUIT--Anony-Mousse    schedule 06.07.2017
comment
Я думаю, что это относительно новая функция. Пример здесь: hdbscan.readthedocs.io/en/latest/soft_clustering.html и объяснение того, как это работает, здесь: hdbscan.readthedocs.io/en/ последний/   -  person Andrew Ng    schedule 07.07.2017
comment
Я имею в виду опубликованную теоретическую поддержку подхода. Легко взломать какую-нибудь нечеткую вариацию HDBSCAN*, но это не значит, что она статистически верна.   -  person Has QUIT--Anony-Mousse    schedule 07.07.2017
comment
Вероятно, это связано с этой ошибкой: github.com/scikit-learn-contrib/ hdbscan/issues/123   -  person gmjonker    schedule 30.04.2018
comment
Да, я поднял эту проблему после того, как задал этот вопрос — я сделал повторное сопоставление на основе своих выводов, и это сработало для меня, но, судя по некоторым другим комментариям, поведение кажется непоследовательным.   -  person Andrew Ng    schedule 01.05.2018
comment
Только что столкнулся с этой проблемой. Вроде еще не исправили...   -  person Isopycnal Oscillation    schedule 10.05.2018


Ответы (1)


Автор HDBSCAN попытался решить эту проблему, но кажется, что в нынешнем виде это просто то, как это работает, и нет никакого способа исправить это без какой-либо серьезной реструктуризации. Вот его комментарий:

Копаясь в этом, я думаю, что ответ (к сожалению?) заключается в том, что это «именно так это работает». Мягкая кластеризация учитывает расстояние от экземпляров и высоту слияния в дереве между точкой и каждым из кластеров. Эти точки, которые в конечном итоге оказываются "неправильными", являются точками, которые находятся на разветвлении дерева - они имеют одинаковую высоту слияния со своим собственным кластером (возможно, это ошибка, я посмотрю на это дальше). Это означает, что мы не различаем их по дереву, а с точки зрения чистого расстояния до экземпляров они ближе к «неправильному» кластеру и поэтому классифицируются неправильно. Это немного странно, но мягкая кластеризация, в конечном счете, немного отличается от жесткой кластеризации, поэтому теоретически могут возникать такие крайние случаи.

person Isopycnal Oscillation    schedule 08.06.2018