🎱Lab 3
Exact NN vs. HNSW
Pengantar
Pada praktikum ini, kita akan melakukan hal yang sama dengan praktikum sebelumnya. Akan tetapi, kali ini kita akan membandingkan exact NN dengan HNSW.
Langkah 1 - Instal Library
!pip install hnswlib
Langkah 2 - Import Library
import hnswlib
import numpy as np
import time
from sklearn.neighbors import NearestNeighbors
Langkah 3 - Buat Dataset Dummy
# Build Dummy Dataset
num_elements = 1000
dim = 2
data = np.random.random((num_elements, dim)).astype(np.float32)
# Query point
query = np.array([[0.5, 0.5]], dtype=np.float32)
k = 5 # cari 5 tetangga terdekat
Langkah 4 - Buat Model NN
# Build NN Model
nn = NearestNeighbors(n_neighbors=k, algorithm='brute', metric='euclidean')
nn.fit(data)
# Compute time performace
start = time.time()
distances, indices = nn.kneighbors(query)
end = time.time()
print("=== Exact NN ===")
print("Indices:", indices)
print("Distances:", distances)
print("Waktu:", end - start, "s")
Hasilnya,
=== Exact NN ===
Indices: [[102 238 579 373 486]]
Distances: [[0.01328841 0.01816678 0.03427347 0.03446613 0.0375734 ]]
Waktu: 0.0011098384857177734 s
Langkah 5 - Buat Model HNSW
# Initiate Index
p = hnswlib.Index(space='l2', dim=dim)
# Define Max Elements
p.init_index(max_elements=num_elements, ef_construction=100, M=16)
# Add Data
p.add_items(data)
# Set searching parameter
p.set_ef(50) # tradeoff speed vs accuracy
start = time.time()
labels, distances = p.knn_query(query, k=k)
end = time.time()
print("\n=== HNSW ===")
print("Indices:", labels)
print("Distances:", distances)
print("Waktu:", end - start, "s")
Hasilnya,
=== HNSW ===
Indices: [[102 238 579 373 486]]
Distances: [[0.00017658 0.00033003 0.00117467 0.00118791 0.00141176]]
Waktu: 0.00013875961303710938 s
Last updated