Saya ingin membuat peta panas dengan pengelompokan baris berdasarkan jarak kosinus. Saya menggunakan R dan heatmap.2()
untuk membuat gambar. Saya dapat melihat bahwa ada dist
parameter di heatmap.2
tetapi saya tidak dapat menemukan fungsi untuk menghasilkan matriks ketidakseimbangan cosinus. Fungsi builtin dist
tidak mendukung jarak cosinus, saya juga menemukan paket yang dipanggil arules
dengan dissimilarity()
fungsi tetapi hanya bekerja pada data biner.
r
clustering
similarities
Greg Slodkowicz
sumber
sumber
Jawaban:
Seperti @Max ditunjukkan dalam komentar (+1) akan lebih mudah untuk "menulis sendiri" daripada menghabiskan waktu mencarinya di tempat lain. Seperti kita ketahui, persamaan cosinus antara dua vektor dengan panjang adalahnA , B n
yang sangat mudah untuk menghasilkan di
R
. MembiarkanX
menjadi matriks di mana baris adalah nilai yang ingin kita hitung kesamaannya. Kemudian kita dapat menghitung matriks kesamaan denganR
kode berikut :Kemudian matriksnya
C
adalah cosine similarity matrix dan Anda bisa meneruskannya ke fungsi heatmap apa pun yang Anda suka (satu-satunya yang saya kenal adalahimage()
).sumber
Anda dapat menggunakan
cosine
fungsi dari paket lsa:http://cran.r-project.org/web/packages/lsa
sumber
Fungsi berikut mungkin berguna ketika bekerja dengan matriks, bukan vektor 1-d:
sumber
Beberapa jawaban di atas tidak efisien secara komputasi, coba ini;
Untuk matriks cosine similarity
Konversikan ke matriks ketidaksamaan cosinus (matriks jarak).
sumber
Menjelajahi beberapa kode sebelumnya (dari @ Macro) tentang masalah ini, kita dapat membungkusnya dengan versi yang lebih bersih sebagai berikut:
Semoga ini membantu!
sumber