Ben kosinüs yer duyarlı bir hash inşa etmeye çalışıyorum, böylece olası her çift karşılaştırmak zorunda kalmadan aday benzer ürün çiftleri bulabilirsiniz. Temelde çalışıyorum, ancak verilerimdeki çiftlerin çoğunun -0.2 ila +0.2 aralığında kosinüs benzerliği var gibi görünüyor, bu yüzden oldukça ince zar atmaya ve kosinüs benzerliği 0.1 ve üzeri olan şeyleri almaya çalışıyorum.
Madencilik Masif Veri Kümeleri bölüm 3'ü okuyorum. Bu, Bölgeye Duyarlı Bir Aileyi Güçlendirerek aday çifti seçiminin doğruluğunu arttırmaktan bahsediyor. Sanırım sadece matematiksel açıklamayı anlıyorum, ama bunu pratik olarak nasıl uyguladığımı görmek için mücadele ediyorum.
Şimdiye kadar sahip olduğum şey şu
- Her biri 1M kullanıcılarından bazı derecelendirmelerle birlikte 1000 film söyledim. Her film, kullanıcı puanlarının seyrek bir vektörüyle temsil edilir (satır numarası = kullanıcı kimliği, değer = kullanıcı puanı)
- N rasgele vektör oluşturuyorum. Vektör uzunluğu, film vektörlerinin uzunluğuyla (yani kullanıcı sayısı) eşleşir. Vektör değerleri +1 veya -1'dir. Aslında bu vektörleri alan kazanmak için ikili olarak kodluyorum, +1 1'e ve -1 0'a eşlendi
- Filmin ve N rasgele vektörlerin nokta çarpımını alarak her film için eskiz vektörleri oluşturuyorum (ya da daha doğrusu, N rasgele vektörleri yatay olarak yerleştirerek ve bunları eskiz üzerine yerleştirerek bir matris R oluşturursam film m için R * m'dir), daha sonra elde edilen vektördeki her elemanın işaretini alarak, + 1s ve -1s'nin her filmi için bir eskiz vektörü ile bitiririm, ki bu yine ikili olarak kodlar. Her vektör uzunluk N bitidir.
- Sonra aşağıdakileri yaparak benzer eskizleri arıyorum
- Eskiz vektörünü r bitlerinin b bantlarına böldüm
- Her r bit bandı bir sayıdır. Bu sayıyı bant numarasıyla birleştiriyorum ve filmi bu sayının altındaki bir karma grubuna ekliyorum. Her film birden fazla gruba eklenebilir.
- Sonra her bir kovaya bakarım. Aynı gruptaki filmler aday çiftlerdir.
Bunu 3.6.3 mmds ile karşılaştırarak, AND adımım r bit bantlarına baktığımda - r bitleri aynı değere sahipse bir çift film AND adımını geçer. VEYA adımım kovalarda gerçekleşir: filmler her ikisi de kovalardan birinde ise aday çiftlerdir.
Kitap, daha fazla AND ve OR adımı ekleyerek sonuçlarımı "artırabileceğimi" gösteriyor, ancak daha sonraki katmanlar için inşaat sürecinin açıklaması, daha ziyade çift eşitliği kontrol etmek açısından olduğu için pratik olarak nasıl bir kayıptayım kova numaraları ile geliyor.
Herkes bunu nasıl yapacağımı anlamama yardımcı olabilir mi?