Как оценить текстовые кластеры HDBSCAN?
В настоящее время я пытаюсь использовать HDBSCAN для кластеризации данных фильма. Цель состоит в том, чтобы объединить похожие фильмы вместе (на основе информации о фильмах, таких как ключевые слова, жанры, имена актеров и т. Д.), А затем применить LDA к каждому кластеру и получить репрезентативные темы. Тем не менее, мне трудно оценивать результаты (кроме визуального анализа, который не так хорош по мере роста данных). С LDA, хотя это трудно оценить, я использовал показатель когерентности. Тем не менее, есть ли у кого-нибудь идеи о том, как оценить кластеры, созданные HDBSCAN? Я не смог найти много информации об этом, поэтому, если у кого-то есть идеи, я буду очень признателен!
2 ответа
Такая же проблема везде в обучении без учителя.
Это без присмотра, вы пытаетесь открыть что-то новое и интересное. Компьютер не может решить, является ли что-то действительно интересным или новым. Он может решать и тривиальные случаи, когда предшествующее знание уже закодировано в обрабатываемой машиной форме, и вы можете вычислить некоторые эвристические значения в качестве показателя интереса. Но такие меры (включая меры на основе плотности, такие как DBCV, на самом деле ничуть не лучше судить об этом, чем сам алгоритм кластеризации выбирает "лучшее" решение).
Но в конце концов, нет никакого способа вручную посмотреть на данные и сделать следующие шаги - попытаться использовать то, что вы узнали о данных. Предположительно, вы не академик Инвори-Тауэр, просто делаете это из-за того, что пытаетесь придумать еще один бесполезный метод... Так что используйте его, не обманывайте его.
HDBSCAN реализует проверку кластеризации на основе плотности в методе, называемом относительной_дальностью. Это позволит вам сравнить одну кластеризацию, полученную с заданным набором гиперпараметров, с другой. В общем, прочитайте о кластерном анализе и валидации кластера. Вот хорошее обсуждение этого вопроса с автором библиотеки HDBSCAN.
Вы можете попробовать clusteval
библиотека. Эта библиотека поможет вам найти оптимальное количество кластеров в наборе данных, в том числе для hdbscan. Когда у вас есть метки кластера, вы можете начать анализ обогащения, используяhnet
.
pip install clusteval
pip install hnet
Пример:
# Import library
from clusteval import clusteval
# Set the method
ce = clusteval(method='hdbscan')
# Evaluate
results = ce.fit(X)
# Make plot of the evaluation
ce.plot()
# Make scatter plot using the first two coordinates.
ce.scatter(X)
Итак, на данный момент у вас есть оптимальные обнаруженные метки кластера, и теперь вы можете узнать, существует ли связь между любым из кластеров с (группой) функцией (ами) в ваших метаданных. Идея состоит в том, чтобы вычислить для каждой метки кластера, как часто она встречается для определенного класса в ваших метаданных. Это можно определить с помощью P-значения. Чем ниже значение P (ниже альфа =0,05), тем меньше вероятность, что это произошло случайно.
results является dict и содержит оптимальные метки кластера в ключе labx. С участиемhnet
мы можем очень легко вычислить обогащение. Более подробную информацию можно найти здесь: https://erdogant.github.io/hnet
# Import library
import hnet
# Get labels
clusterlabels = results['labx']
# Compute the enrichment of the cluster labels with the dataframe df
enrich_results = hnet.enrichment(df, clusterlabels)
Когда мы смотрим на enrich_results, есть столбец с category_label. Это переменные метаданных df фрейма данных, которые мы дали в качестве входных данных. Второй столбец: P обозначает P-значение, которое представляет собой вычисленную значимость catagory_label с целевой переменной y. В этом случае целевая переменная y - это метки кластера clusterlabels.
Целевые метки в y можно значительно расширить более одного раза. Это означает, что некоторые y обогащены несколькими переменными в фрейме данных. Это может произойти, потому что нам может потребоваться более точная оценка меток кластера или его смешанной группы или чего-то еще.
Более подробную информацию об обогащении кластера можно найти здесь:https://erdogant.github.io/hnet/pages/html/Use%20Cases.html