Apa yang seharusnya menjadi nilai bidang yang tidak diperingkat saat menemukan kesamaan cosinus


8

Saya sedang mengerjakan sistem rekomendasi buku yang sangat mendasar. Saya ingin tahu apa yang harus dilakukan dengan bidang yang tidak diberi peringkat oleh pengguna saat menemukan kesamaan cosinus, haruskah kita mengabaikannya dan menghitung hanya dengan bidang yang diberi nilai atau harus kita beri tanda 0.

The buku saya mengikuti kata untuk mengecualikan bidang karena akan memberikan interpretasi yang salah dalam kasus Euclidean dan Pearson Korelasi tetapi dalam kasus Cosine Similarity, itu membuat semua bidang non-dinilai untuk 0.

Dapatkah seseorang menjelaskan mengapa diperlukan untuk membuat bidang yang tidak diberi nilai menjadi 0 hanya untuk Cosine dan bukan yang lain atau apakah ada cara yang berbeda untuk melakukannya. (Saya tahu bagaimana membuat bidang 0 di Euclidean dan Pearson mempengaruhi output tetapi tidak yakin akan kosinus)


Anda dapat melihat pertanyaan ini di stackoverflow untuk mendapatkan wawasan lebih lanjut tentang ini.
janpreet singh

Jawabannya sebagian menjawab pertanyaan karena menunjukkan bahwa menjaga entri tidak dinilai sebagai 0 pasti akan mempengaruhi kesamaan yang sesuai. Yang bisa (atau tidak) digunakan dalam algoritma untuk mesin
pemberi

Sudahkah Anda mencoba normalisasi kejam?
Valentin Calomme

Jawaban:


1

Sisi implementasi, ada alasan bagus untuk membuat 0 korespondensi dengan tidak diberi peringkat. Karena sebagian besar pengguna belum memberi peringkat pada sebagian besar buku, 0 akan menjadi nilai yang paling umum dan fungsi kesamaan cosinus dapat menggunakan matriks jarang secara internal untuk mempercepat perhitungan. Pintasan matriks jarang adalah alasan utama mengapa orang menggunakan kesamaan cosinus di tempat pertama.

Di sisi lain, itu akan membuang rekomendasi Anda jika algoritma menginterpretasikan 0 lebih dekat ke 1 daripada 2. Anda memang perlu sengaja mengabaikannya, tetapi Anda dapat dengan mudah melakukannya di dalam implementasi kesamaan cosinus Anda daripada memfilter data sebelum menerapkannya.


1. Jadi sesuai jawaban Anda, mengikuti apa pun tidak akan memengaruhi hasil?
divyum

0

Pertimbangkan bagaimana cosine similarity dihitung .

Kesamaan cosine mengambil produk titik dari dua vektor nyata, dan membagi nilai ini dengan produk besarnya mereka. Dengan identitas titik produk Euclidean, ini sama dengan cosinus sudut antara kedua vektor. Hasilnya adalah nilai antara 1 dan -1.

Ketika nilainya 1, vektor tersebut menunjuk ke arah yang persis sama. Ketika nilainya -1, vektor menunjuk tepat ke arah yang berlawanan (satu adalah negasi yang lain). Ketika nilainya 0, vektor-vektor itu saling tegak lurus; dengan kata lain, ketika nilainya nol, kedua vektor ini tidak sama dalam ruang fitur yang mungkin didapat.

Produk titik adalah jumlah dari semua produk elemen-bijaksana dari dua vektor Anda. Semakin besar angka-angka itu, semakin besar kontribusinya pada persamaan cosinus.

Sekarang, ambil fitur apa saja di vektor Anda. Kelima, katakanlah. Jika Anda menetapkan ini ke nol dalam salah satu vektor Anda, elemen kelima dalam produk elemen-bijaksana dari dua vektor juga akan menjadi nol, terlepas dari nilainya dalam vektor lainnya. Saat Anda meringkas semua produk elemen-bijaksana ini, elemen kelima tidak akan berdampak pada penjumlahan. Akibatnya, menetapkan nilai dalam vektor fitur Anda ke nol berarti itu tidak memberikan kontribusi apa pun terhadap kesamaan cosinus.

Inilah sebabnya mengapa menetapkan nilai ke nol dalam vektor fitur setara dengan tidak termasuk fitur dalam perhitungan cosine similarity, dan tidak tidak mendistorsi cosine similarity.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.