В scipy, в чем смысл двух разных функций расстояния, используемых в иерархической кластеризации?

Есть одна функция расстояния, которую я могу передать pdist и использовать ее для создания матрицы расстояний, которая передается linkage. Есть вторая функция расстояния, которую я могу передать linkage в качестве метрики.

Почему возможны две функции расстояния?

Если они разные, как они используются? Например, использует ли связь расстояния в матрице расстояний для своих начальных итераций, т. Е. Чтобы увидеть, должны ли какие-либо два исходных наблюдения быть объединены в кластер, а затем использовать метрическую функцию для дальнейших комбинаций, т. Е. Двух кластеров или кластера с оригинальным наблюдением?


person Ghopper21    schedule 17.08.2015    source источник
comment
docs.scipy.org/doc/scipy/ ссылка / сгенерированный / Из раздела параметров похоже, что pdist - это функция расстояния по умолчанию, и она дает вам возможность указать свою собственную, которая, например, может быть взвешена по размерам.   -  person Charlie Haley    schedule 18.08.2015
comment
Спасибо @CharlieHaley. Однако мой вопрос касается того факта, что вы можете указать пользовательскую функцию дважды: один раз при создании матрицы расстояний и один раз при связывании - почему дважды?   -  person Ghopper21    schedule 18.08.2015


Ответы (1)


Всегда используется только одна функция расстояния.

Если вы передадите одномерную сжатую матрицу расстояний (т.е. результат pdist) в linkage, тогда linkage проигнорирует свой параметр metric. (См. исходный код здесь, где scipy вызывает соответствующую базовую функцию связывания Cython без использования параметра metric.)

С другой стороны, если вы передадите 2D-матрицу, linkage будет рассматривать эту матрицу как наблюдение и вызывать pdist в этой матрице для вас, используя параметр metric в качестве функции расстояния. (См. исходный код здесь.)

person Ghopper21    schedule 18.08.2015