Сравнение меток 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 в качестве ближайшего кластера.

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

1 ответ

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

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

Другие вопросы по тегам