Bölgeye Duyarlı Bir Karmayı Güçlendirme


10

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

  1. 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ı)
  2. 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
  3. 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.
  4. Sonra aşağıdakileri yaparak benzer eskizleri arıyorum
    1. Eskiz vektörünü r bitlerinin b bantlarına böldüm
    2. 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.
    3. 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?

Yanıtlar:


4

Sanırım bir şey çözdüm. Temelde bir harita / tip azaltma ortamında çalışan bir yaklaşım arıyorum ve bu yaklaşımın bunu yaptığını düşünüyorum.

Yani,

  • diyelim ki r satır b bandım var ve başka bir AND aşaması eklemek istiyorum, başka bir c ANDs diyelim.
  • bu yüzden b * r bit yerine b * r * c bitlerinin karmaşasına ihtiyacım var
  • ve her seferinde b * r bitlerinde önceki prosedürümü c kere çalıştırıyorum
  • X ve y'nin bu prosedürlerden herhangi biri tarafından bir aday çifti olduğu tespit edilirse, anahtar değeri çifti ((x, y), 1), anahtar kimlikleri (x, y) anahtar ve değer 1 olarak verilir.
  • C prosedürlerinin sonunda bu çiftleri anahtar ve toplamlara göre gruplandırıyorum
  • Toplamı c'ye eşit olan herhangi bir çift (x, y), c turlarının her birinde bir aday çiftti ve bu nedenle tüm prosedürün bir aday çifti oldu.

Bu yüzden şimdi uygulanabilir bir çözümüm var ve tek yapmam gereken, bunun gibi 3 adım kullanmanın aslında daha az toplam karma biti veya daha iyi genel performans ile daha iyi bir sonuç elde etmeme yardımcı olup olmayacağı ...


0

Ben sadece yorum olurdu ama yapamam. LSH'de pratik bir amplifikasyon tedavisi arıyordum ve sunduğunuz çok mantıklı. Topladığımdan, birincil sağlama işlevibazı rasgele vektörler için sonra bu ve nihayet OR'den sonra veyaArtık kullanarak VE / VEYA yapabilirsiniz

h(x,v)={0if sgn(xv)<01else
vh(x,i)=(h(x,vi+1),...,h(x,vi+r))h(x,j)=f(h(x,rj),j)
h(x,y)={1if h(x,j)=h(y,j) for any j[0,b)0else
h(x,y)tarif ettiğiniz gibi. Daha sonra AND / VEYA mantıksal ifadeleri temel alan adayları seçersiniz; artık gerçekten hash etmiyorsun. Bu noktada, hash işlemine devam , her vektörün yalnızca kez görünmesi için çöp kutularının eşlemesine ihtiyacınız olacak, ancak bunun yapılması muhtemelen yanlış pozitifler ve / veya negatifler. Bir karma için bir fikir tüm için minimum (veya tüm minimum ve doğrudan ve dolaylı olarak ilişkili ). Her ikisi de açıkça önyargı getirecektir. Bunlardan birini deneyebilirim, ancak bir rastgele AND / OR'den gelen karmaların bir dahaki sefere anlamlı olacağından emin değilim.h^:SSSh(x,j)jjyv ve çok sayıda kopya, belki?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.