Untuk aplikasi pembelajaran mesin, kebutuhan kelompok saya untuk menghitung jarak Euclidean ke th tetangga terdekat di set X untuk setiap x ∈ ( X ∪ Y ) ⊂ R d (untuk d antara 5 dan sekitar 100, dan | X | ≈ | Y | beberapa ratus hingga beberapa juta). Kami saat ini menggunakan pendekatan brute force O ( d | X | | X ∪ Y | ) atau yang jelas dengan kd-tree pada X, yang ketika tinggi dan | X | relatif rendah tidak pernah menang. (Semuanya ada di memori.)
Sepertinya harus ada cara yang lebih baik daripada brute-force, meskipun - setidaknya satu yang mengambil keuntungan dari ketimpangan segitiga, atau mungkin dengan hash yang sensitif terhadap lokalitas. Perkiraan yang cukup ketat juga berpotensi oke.
Penelitian yang saya dapat temukan tampaknya berfokus pada masalah menemukan tetangga terdekat tunggal (atau yang kira-kira terdekat). Apakah masalah yang saya cari menggunakan nama lain, atau apakah ada koneksi ke masalah terkait yang belum saya pikirkan?
Jawaban:
Singkatnya, beri saya struktur data cepat untuk menjawab pertanyaan tetangga terdekat, dan saya akan dengan senang hati memberi Anda struktur data cepat dari k-tetangga terdekat.
sumber
Solusi perkiraan murah menggunakan "hash sensitif-lokalitas" adalah mengonversi setiap titik menjadi bentuk yang sedikit disisipkan:
[xxx, yyy, zzz] -> xyzxyzxyz
kemudian radix sort untuk preprocessing.
Lihat juga makalah ini oleh Callahan dan Kosaraju.
sumber