Кластеризация с помощью scipy - кластеров через матрицу расстояний, как вернуть исходные объекты

Я не могу найти достаточно простых руководств или описаний по кластеризации в 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 , и как можно Я перехожу оттуда и обратно к своему документу, для которого я создал матрицу расстояний в первую очередь, чтобы увидеть, имеют ли кластеры какой-либо смысл? Правильно ли я это делаю?

6
задан Eiriks 11 October 2011 в 10:33
поделиться