Я хотел бы сделать тепловую карту с кластеризацией строк на основе косинусных расстояний. Я использую R и heatmap.2()
для создания фигуры. Я вижу, что есть dist
параметр, heatmap.2
но я не могу найти функцию для генерации косинусной матрицы различий. Встроенная dist
функция не поддерживает косинус расстояния, я также нашел пакет , называемый arules
с dissimilarity()
функцией , но он работает только на двоичных данных.
r
clustering
similarities
Грег Слодкович
источник
источник
Ответы:
который просто генерировать в
R
. ПозвольтеX
быть матрицей, где строки являются значениями, между которыми мы хотим вычислить сходство. Затем мы можем вычислить матрицу подобия с помощью следующегоR
кода:Тогда матрица
C
является матрицей косинусного сходства, и вы можете передать ее любой функции тепловых карт, которая вам нравится (единственная, с которой я знаком, этоimage()
).источник
Вы можете использовать
cosine
функцию из пакета lsa:http://cran.r-project.org/web/packages/lsa
источник
Следующая функция может быть полезна при работе с матрицами вместо 1-мерных векторов:
источник
Некоторые ответы выше неэффективны в вычислительном отношении, попробуйте это;
Для косинусной матрицы подобия
Перевести в косинусную матрицу различий (матрицу расстояний).
источник
Ускоряя часть предыдущего кода (от @Macro) по этой проблеме, мы можем обернуть это в более чистую версию в следующем:
Надеюсь это поможет!
источник