Я не могу найти достаточно простых руководств или описаний по кластеризации в scipy, поэтому я попытаюсь объяснить свою проблему:
Я попытаться сгруппировать документы (иерархическая агломеративная кластеризация) и создать вектор для каждого документа и создать симметричную матрицу расстояний. Vector_list содержит (действительно длинные) векторы, представляющие каждый документ. Порядок этого списка векторов такой же, как и в моем списке входных документов, так что я (надеюсь) смогу сопоставить результаты кластеризации с соответствующим документом.
distances = distance.cdist(vector_list, vector_list, 'euclidean')
Это дает матрицу, подобную этой, где диагональная линия - это расстояние каждого документа до самого себя (всегда 0)
[0 5 4]
[5 0 4]
[5 4 0]
Я передаю эту матрицу расстояний в функцию scipys linkage ().
clusters = hier.linkage(distances, method='centroid', metric='euclidean')
это возвращает то, что я не совсем понимаю, но получается как тип данных numpy.ndarray. Согласно документам, я могу снова передать это в fcluster, чтобы получить «плоские кластеры». Я использую половину максимального расстояния в матрице расстояний в качестве порога.
idx = hier.fcluster(clu,0.5*distances.max(), 'distance')
Это возвращает numpy.ndarray, который снова не имеет для меня особого смысла.Примером является [6 3 1 7 1 8 9 4 5 2]
Итак, мой вопрос: что я получаю от функций linkage и fcluster , и как можно Я перехожу оттуда и обратно к своему документу, для которого я создал матрицу расстояний в первую очередь, чтобы увидеть, имеют ли кластеры какой-либо смысл? Правильно ли я это делаю?