2.1.6.a Giới thiệu
Bài toán tìm kiếm láng giềng gần nhất có thểđược phát biểu như sau: Cho một tập S có n điểm trong không gian X, các điểm này sẽđược tiền xử lý để khi có một truy vấn q ϵ X thì các điểm gần q nhất sẽđược phát hiện một cách nhanh chóng. Đây là một bài toán được ứng dụng trong nhiều vấn đề như phát hiện tri thức, khai khoáng dữ liệu (data mining), nhận dạng mẫu, học máy, tìm kiếm…
Vấn đề tìm kiếm láng giềng gần nhất trên không gian nhiều chiều (high-dimension) càng trở nên khó khăn khi đối tượng được biểu diễn bởi véctơ có d số đặc trưng lớn. Giả sử không gian X là không gian số thực d chiều Rd, hàm khoảng cách chính là khoảng cách Minkowski Lm như sau:
Với m ≥ 1, khoảng cách Lm giữa 2 điểm p = (p1, p2, …, pd) và q = (q1, q2, …, qd) trong không gian Rd chính là căn bậc m của ∑ |QN− HN|,
3N
Với m = ∞ thì khoảng cách sẽ là ^683 N |QN − HN|
Dễ thấy rằng L1, L2, L∞ chính là khoảng cách Manhattan, Euclidean và Max.
Có rất nhiều thuật toán để tìm kiếm láng giềng gần nhất như brute-force, binary search, Voronoi diagrams,... Tuy nhiên với số chiều d càng lớn thì vấn đề càng trở nên khó khăn. Một trong những cách tiếp cận cho vấn đề số chiều d lớn đó là dùng thuật toán cây k-d, hoặc nếu chúng ta chấp nhận một sai số nhỏ (tìm kiếm xấp xỉ) thì có thể giúp tăng tốc tìm kiếm lên tốt hơn.
Trong tìm kiếm xấp xỉ, ta có một ngưỡng lỗi ϵ ≥ 0. Gọi điểm p là “láng giềng xấp xỉ gần nhất (1 + ϵ)” của điểm q nếu:
Với p* là láng giềng thật sự gần nhất của q. Nói một cách tổng quát, cho 1 ≤ k ≤ n, láng giềng xấp xỉ gần nhất (approximate nearest neighbor) thứ k của điểm q chính là điểm mà sai số tương đối từ nó đến láng giềng thật sự gần nhất thứ k của q là ϵ. Với 1 ≤ k ≤ n, dãy k láng giềng xấp xỉ gần nhất của điểm q chính là một dãy có k điểm phân biệt, mà điểm thứ i trong dãy chính là một xấp xỉ đến láng giềng gần nhất thứ i của q.
Hình 2.1-27: Láng giềng xấp xỉ (1 + ϵ) của q.
Vấn đề tìm kiếm xấp xỉ đã được nhiều tác giả nghiên cứu như: Bern (1993) dựa trên cấu trúc dữ liệu cây tứ phân (quadtree), hay Arya và Mount (1993) với cấu trúc dữ liệu ngẫu nhiên. Trong đề tài này không đi sâu vào nền tảng lý thuyết của tìm kiếm k láng giềng theo xấp xỉ, mà thừa kế kết quả của nhóm tác giả Mount và Arya [5] thông qua bộ thư viện lập trình ANN Library. Bộ thư viện được xây dựng trên cấu trúc dữ liệu chính là cây k-d (k-dimensional tree) và cây BBD (balanced box-decomposition). Cây BBD chính là một cấu trúc dữ liệu mở rộng của cây k-d với các cấu trúc dữ liệu phụ trợ nhằm bảo đảm việc tính toán láng giềng xấp xỉ gần nhất (1+ϵ) trong n điểm thuộc không gian Rd với hàm khoảng cách Ld có thể được tính trong thời gian ¡EZ¢1 + 6Z/∈ZXUl_I.
2.1.6.b Cây k-d (k-d Tree)
K-d tree là viết tắt của k-dimensional tree.
K-d tree là một cấu trúc dữ liệu phân hoạch không gian, dùng để tổ chức các điểm trong không gian k-chiều.
Mỗi node sẽ tạo ra một mặt phẳng phân chia mà sẽ chia không gian ra thành 2 không gian con.
Những điểm bên trái sẽđại diện cho cây con trái của node và những điểm bên phải sẽ đại diện cho cây con phải của node.
Thực chất k-d tree là một cây nhị phân, mà ở mỗi mức nó sẽ phân hoạch dữ liệu theo một chiều nào đó trong số các k chiều.
Ví dụ: nếu trục được chọn để phân hoạch là “X” thì, tất cả những điểm có giá trị x nhỏ hơn sẽ nằm bên cây con trái, và những điểm có giá trị x lớn hơn sẽ nằm bên cây con phải.
2.1.6.c Tìm k-approximate nearest neighbor trên k-d Tree
Hình 2.1-30: Tìm kiếm xấp xỉ trên cây k-d, với các vùng màu xám không cần xét đến.
Thuật toán có thể tóm tắt lại như sau:
Bước 1: Tìm nút lá gần nhất (P) với điểm truy vấn Q theo thuật toán tìm kiếm chuẩn của kd-tree
Bước 2: Thay vì theo vết lùi, ta sẽ lập ra 1 hàng đợi tất cả các bin thỏa – giả sử có M bin:
Có giao điểm với hình cầu tâm Q, bán kính r là khoảng cách từ P đến Q. Hàng đợi được sắp xếp tăng dần theo khoảng cách từ hình cầu tâm Q bán
kính r đến các bin.
Bước 3: Xét hữu hạn N(N <= M) lần khoảng cách từ Q đến các nút trong các bin được xét, nếu khoảng cách nhỏ hơn r => cập nhật lại r chính là khoảng cách đó.