«Верх» в этом контексте напрямую связан с тем, как текст был преобразован в массив числовых значений.Используя TFIDF, для каждого отдельного документа вы назначаете каждому слову оценку, основанную на его распространенности в этом документе, в противоположность распространенности во всем наборе документов.Слово с высоким показателем в документе указывает на то, что оно является более значимым или более представительным для этого документа, чем другие слова.
Следовательно, при этом поколении высших терминов для каждого кластера они представляют собой слова, которые нав среднем, наиболее значимы в документах для этого кластера.
То, как это было сделано здесь, работает и эффективно, но мне трудно понять себя, и я не думаю, что это особенно интуитивно понятноТрудно понять, почему, если cluster_centers_
являются координатами для центроидов, то особенности с наивысшими числами координат являются главными словами.Я как бы понимаю, но не совсем (если кто-то хочет объяснить, как это работает, это было бы здорово!).
Я использую другой метод, чтобы найти главные термины для кластера, которые я считаю более интуитивными.Я только что проверил метод, который вы выложили, своим собственным на корпусе из 250 документов, и главные слова точно такие же.Ценность моего метода в том, что он работает, однако вы кластеризуете документы, если можете предоставить список назначений кластера (который должен обеспечивать любой алгоритм кластеризации), то есть вы не зависите от наличия атрибута cluster_centers_
,Это также, я думаю, более интуитивно понятно.
import numpy as np
def term_scorer(doc_term_matrix, feature_name_list, labels=None, target=None, n_top_words=10):
if target is not None:
filter_bool = np.array(labels) == target
doc_term_matrix = doc_term_matrix[filter_bool]
term_scores = np.sum(doc_term_matrix,axis=0)
top_term_indices = np.argsort(term_scores)[::-1]
return [feature_name_list[term_idx] for term_idx in top_term_indices[:n_top_words]]
term_scorer(X, terms, labels=model.labels_, target=1, n_top_words=10)
Атрибут model.labels_
дает список назначений кластера для каждого документа.В этом примере я хочу найти верхние слова для кластера 1, поэтому я присваиваю target=1
, функция фильтрует массив X
, сохраняя только строки, назначенные для кластера 1. Затем она суммирует все оценки по всем строкам документов, поэтомуодна строка с колонкой для каждого слова.Затем он использует argsort
для сортировки этой строки по самым высоким значениям к самым низким, заменяет значения исходными позициями индекса слов.Наконец, он использует понимание списка, чтобы перехватить индексные числа от верхней оценки до n_top_words
, а затем создает список слов, просматривая эти индексы в feature_name_list
.