Setteki tüm noktalar için en yakın komşuya olan kth mesafesinin hesaplanması


9

Bir makine öğrenme uygulaması için, grubumun Öklid mesafesini kbir küme inci en yakın komşu X her biri için x(XY)Rd (için d 5 ile yaklaşık 100 arasında ve |X||Y|birkaç yüz ila birkaç milyon). Şu anda ya kaba gücü kullanıyoruzO(d|X||XY|) yaklaşımı veya açıkta kd ağacı olan X, Hangi zaman d yüksek ve |X|nispeten düşük olduğu için hiç kazanamazsınız. (Her şey hafızada.)

Bununla birlikte, kaba kuvvetten daha iyi bir yol olmalı gibi görünüyor - en azından üçgen eşitsizliğinden yararlanan en azından bir tane, ya da belki de bölgeye duyarlı karmalar. Oldukça sıkı bir yaklaşım da potansiyel olarak uygundur.

Bulabildiğim araştırma, en yakın tek komşuyu (veya en yakın olanı) bulma sorununa odaklanıyor gibi görünüyor. Aradığım sorun başka bir adla mı yoksa aklıma gelmediğim ilgili bir sorunla ilgili bir bağlantı var mı?


2
kd-ağaçları üçgen eşitsizliğinden YARARLANIR. Ağaçları bölümleyen diğer uzaysal verileri kullanmayı denediniz mi? Belirli noktaların yapıya sahip olup olmadığına bakabileceğiniz başka bir şey (makine öğrenme algoritmanız hakkında hiçbir şey bilmiyorum), bu da hiperplanları hızlı bir şekilde bulmanıza ve bunları normal medyan başına yerine kd benzeri bir ağaçta kullanmanıza yardımcı olabilir. yüksek boyutlarda kötü performans gösteren koordinat bölünmesi.
Ross Snider

@RossSnider öneriler için teşekkürler. Ve elbette, KD ağaçları üçgen eşitsizliğini kullanıyor, ama kaba kuvvetten daha hızlı bir şey düşünüyordum. :) Başka ne tür uzamsal veri bölümleme ağaçları önerirsiniz? Of Wikipedia'nın listesinde sadece belki vp-ağaçlar uygulanabilir görünüyor ve onlar Öklid mesafe için kd-ağaçlar daha iyi olacak gibi onlar görünmüyor. Ve hiperplanları ayırmanın daha iyi bir probleme özgü yolu olup olmadığını düşüneceğim, ama akla gelmeyecek.
Dougal

Sanırım bunu hepimiz için değerlendirdiğimizi bildiğimiz gerçeği X(diğer noktaların yanı sıra) algoritmada bir çeşit yardıma izin verebilir. Ancak durumun bundan emin değilim.
Dougal

nedir kgenellikle uygulamalarınızda?
Suresh Venkat

1
@SureshVenkat Genellikle bir kyaklaşık 3, bazen biraz daha büyük.
Dougal

Yanıtlar:


10

İşte faydalı olabilecek basit bir numara. Her noktayı 1 / k olasılıkla alan rastgele bir örnek düşünün. İyi olasılıkla en yakın komşunuzdan birinin örnekte olacağını doğrulamak kolaydır. Örnekteki en yakın komşuyu hesaplayın. Bu O (k log n) kez tekrarlayın. Yüksek olasılıkla kO(klogn)hesaplanan noktalar, sorgunuza en yakın komşulardır. Böylece, en yakın komşuyu bulmak,O(klogn) en yakın komşu sorguları.

Kısacası, bana en yakın komşu sorgularını yanıtlamak için hızlı bir veri yapısı verin ve size en yakın komşunun hızlı bir veri yapısını sunmaktan mutluluk duyarım.


İyi numara. Farklı sorgu noktaları için de örnekleri tekrar kullanmak doğru olmalı, değil mi? Yani hesaplamak içinksetteki her nokta için en yakın komşu, sadece veri yapısını oluşturmam gerekiyor O(klogn)zamanlar.
Dougal

1
Örnekleri tekrar kullanmak zordur, çünkü o zaman sabit bir numunenin HERHANGİ BİR sorgu için çalışmasını istersiniz (niceleme ters çevrilir) ve böylece olasılıklar değişecektir. Genel fikir, daha büyük boyutlu bir dizi örnek oluşturmak (bu # sorgulara bağlıdır) ve bu bir sorunsa bunları kullanmak olacaktır.
Suresh Venkat

@SureshVenkat Ah, elbette. Oturup gerçek olasılıkları bulacağım. Herkese teşekkürler!
Dougal

Yaparsan O(klog(1/δ)) sonra her sorgu olasılıkla başarılı olur 1δ. Dikkat edin, bu hile ilk bakışa göre biraz daha iyidir -O(klogn) her biri büyüklükte örnekler O(n/k) (yüksek olasılıkla kçok büyük değil). Bu, örneklerin her biri için daha iyi sorgu süresi anlamına gelir.
Sariel Har-Peled

3

"Yere duyarlı bir karma" kullanan ucuz bir yaklaşık çözüm, her noktayı biraz serpiştirilmiş forma dönüştürmek olacaktır:

[xxx, yyy, zzz] -> xyzxyzxyz

sonra önişleme için sayı tabanı sıralaması.

Sorgulamak ve devam etmek için noktanızı seçin k boyut almak için her iki yönde işaret eder 2kAyarlamak; o zaman alkthnoktanıza en yakın. Connor ve Kumar'ın bu makalesine de bakınız .

Callahan ve Kosaraju'nun bu makalesine de bakınız .

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.