Tính khoảng cách đến hàng xóm gần thứ k cho tất cả các điểm trong tập hợp


9

Đối với một ứng dụng học máy, nhóm của tôi cần tính khoảng cách Euclide với hàng xóm gần nhất thứ trong một tập cho mỗi (cho trong khoảng từ 5 đến khoảng 100 và vài trăm đến vài triệu). Hiện tại chúng tôi đang sử dụng phương pháp tiếp cận hoặc phương pháp rõ ràng với cây kd trên , khi cao vàlà tương đối thấp không bao giờ chiến thắng. (Mọi thứ đều trong bộ nhớ.)kXx(XY)Rdd|X||Y|O(d|X||XY|)Xd|X|

Dường như phải có một cách tốt hơn so với vũ phu, mặc dù vậy - ít nhất là một lợi thế của bất đẳng thức tam giác, hoặc có thể với băm nhạy cảm cục bộ. Một xấp xỉ hợp lý chặt chẽ cũng có khả năng ổn.

Nghiên cứu mà tôi có thể tìm thấy dường như tập trung vào vấn đề tìm kiếm người hàng xóm gần nhất (hoặc một người gần nhất). Có phải vấn đề tôi đang tìm kiếm theo một tên khác, hoặc có liên quan đến một vấn đề liên quan mà tôi chưa từng nghĩ đến?


2
cây kd DO tận dụng bất đẳng thức tam giác. Bạn đã thử sử dụng các cây phân vùng dữ liệu không gian khác? Một điều khác mà bạn có thể xem xét (tôi không biết gì về thuật toán học máy của bạn) liệu các điểm cụ thể có xu hướng có cấu trúc hay không, điều này có thể giúp bạn nhanh chóng tìm thấy siêu máy bay và sử dụng chúng trong một cây giống như kd thay vì trung bình thông thường phối hợp phân chia mà thực hiện kém trong kích thước cao.
Ross Snider

@RossSnider cảm ơn những lời đề nghị. Và chắc chắn, cây KD sử dụng bất đẳng thức tam giác, nhưng tôi đã nghĩ về thứ gì đó sẽ nhanh hơn lực lượng vũ phu. :) Bạn muốn giới thiệu loại cây phân vùng dữ liệu không gian nào khác? Trong danh sách của Wikipedia chỉ có thể có cây vp dường như có thể áp dụng được và dường như chúng không tốt hơn cây kd cho khoảng cách Euclide. Và tôi sẽ suy nghĩ xem liệu có cách nào tốt hơn để xác định tách siêu máy bay không, nhưng người ta không nghĩ đến.
Dougal

Tôi đoán tôi đã hy vọng rằng thực tế là chúng ta biết rằng chúng ta đang đánh giá điều này cho tất cả (cũng như các điểm khác) sẽ cho phép một số loại trợ giúp trong thuật toán. Tôi không chắc đó là trường hợp, mặc dù. X
Dougal

là những gì thường trong các ứng dụng của bạn? k
Suresh Venkat

1
@SureshVenkat Chúng tôi thường sử dụng khoảng 3, đôi khi lớn hơn một chút. k
Dougal

Câu trả lời:


10

Đây là một mẹo đơn giản có thể hữu ích. Xem xét một mẫu ngẫu nhiên chọn mọi điểm với xác suất 1 / k. Thật dễ dàng để xác minh rằng với xác suất tốt chính xác một trong những người hàng xóm gần nhất của bạn sẽ ở trong mẫu. Tính toán hàng xóm gần nhất trong mẫu. Lặp lại O (k log n) lần này. Với xác suất cao, k điểm gần nhất trong điểm được tính là k hàng xóm gần nhất với truy vấn của bạn. Do đó, tìm k hàng xóm gần nhất, tương đương với thực hiện O ( k log n ) các truy vấn lân cận gần nhất.Ôi(kđăng nhậpn)Ôi(kđăng nhậpn)

Nói tóm lại, hãy cho tôi một cấu trúc dữ liệu nhanh để trả lời các truy vấn lân cận gần nhất và tôi sẽ rất vui khi cung cấp cho bạn cấu trúc dữ liệu nhanh của hàng xóm gần nhất k.


Bí quyết đẹp. Cũng có thể sử dụng lại các mẫu cho các điểm truy vấn khác nhau, phải không? Vì vậy, để tính toán -gần nhất hàng xóm cho mỗi điểm trong tập hợp, tôi chỉ cần xây dựng cấu trúc dữ liệu O ( k log n ) lần. kÔi(kđăng nhậpn)
Dougal

1
Việc sử dụng lại các mẫu rất khó khăn, bởi vì sau đó bạn yêu cầu một mẫu cố định hoạt động cho BẤT K query truy vấn nào (định lượng được lật) và do đó xác suất sẽ thay đổi. Ý tưởng chung sau đó sẽ là xây dựng một tập hợp các mẫu có kích thước lớn hơn (điều này phụ thuộc vào #queries) và sử dụng chúng, nếu đó là một vấn đề.
Suresh Venkat

@SureshVenkat À, tất nhiên rồi. Tôi sẽ ngồi xuống và tìm ra xác suất thực tế. Cảm ơn mọi người!
Dougal

Ôi(kđăng nhập(1/δ))1-δÔi(kđăng nhậpn)Ôi(n/k)k

3

Một giải pháp gần đúng giá rẻ sử dụng "hàm băm nhạy cảm cục bộ" sẽ là chuyển đổi từng điểm thành dạng xen kẽ bit của nó:

[xxx, yyy, zzz] -> xyzxyzxyz

sau đó sắp xếp cơ số cho tiền xử lý.

Chọn điểm của bạn để truy vấn và đi điểm theo cả hai hướng để có được kích thước 2 k được đặt; sau đó lấy k t h gần nhất với điểm của bạn. Cũng xem bài viết này của Connor và Kumar.k2kkth

Cũng xem bài viết này của Callahan và Kosaraju.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.