2015-05-23 1 views
0

Итак, у меня есть набор текстов, на которые я бы хотел сделать анализ кластеризации. Я взял Normalized Compression Distance между каждым текстом, и теперь я в основном построен полный граф с взвешенными дугами, который выглядит примерно так:Как подключить данные о расстоянии в агломерационные методы кластеризации Scipy?

text1, text2, 0.539 
text2, text3, 0.675 

У меня огромные трудности выяснить, лучший способ заткнуть эти данные в методы иерархической кластеризации Scipy. Вероятно, я могу преобразовать данные о расстоянии в таблицу, подобную таблице this page. Как я могу отформатировать эти данные, чтобы их можно было легко подключить к коду HAC scipy?

ответ

1

Вы находитесь на правильном пути с преобразованием данных в таблицу, подобную той, что находится на связанной странице (избыточная матрица расстояния). Согласно документации, вы должны иметь возможность передать это непосредственно в scipy.cluster.hierarchy.linkage или связанную функцию, такую ​​как scipy.cluster.hierarchy.single или scipy.cluster.hierarchy.complete. Связанные функции явно указывают, как должно рассчитываться расстояние между кластерами. scipy.cluster.hierarchy.linkage позволяет указать какой бы метод вы ни выбрали, но по умолчанию используется одиночная линия (т. Е. Расстояние между двумя кластерами - это расстояние между их ближайшими точками). Все эти методы возвращают многомерный массив, представляющий агломеративную кластеризацию. Затем вы можете использовать остальную часть модуля scipy.cluster.hierarchy для выполнения различных действий в этой кластеризации, таких как визуализация или сглаживание.

Однако есть улов. На момент написания this question вы не могли использовать избыточную матрицу расстояний, несмотря на то, что документация говорит, что вы можете. Исходя из того, что github issue все еще открыт, я не думаю, что это было разрешено еще. Как указано в ответах на связанный вопрос, вы можете обойти эту проблему, передав полную матрицу расстояний в функцию scipy.spatial.distance.squareform, которая преобразует ее в принятый формат (плоский массив, содержащий верхнетреугольную часть матрица расстояний, называемая уплотненной матрицей расстояний). Затем вы можете передать результат одной из функций scipy.cluster.hierarchy.