Praktikum 1
!pip install annoyimport numpy as np
import matplotlib.pyplot as plt
import time
from annoy import AnnoyIndex
# 1. Dataset 2D
np.random.seed(42)
n_points = 1000
X = np.random.rand(n_points, 2) * 100 # titik random dalam ruang 100x100
# Query point (ambil salah satu titik random)
query = X[np.random.randint(0, n_points)]
# 2. Exact NN (brute force)
start = time.time()
distances = np.linalg.norm(X - query, axis=1)
idx_exact = np.argsort(distances)[:3] # ambil 3 terdekat
time_exact = time.time() - start
print("Exact NN index:", idx_exact)
print("Exact NN jarak:", distances[idx_exact])
print("Waktu Exact:", round(time_exact*1000, 4), "ms")
# 3. Annoy NN (3 tree)
f = 2 # dimensi
t = AnnoyIndex(f, 'euclidean')
for i, vec in enumerate(X):
t.add_item(i, vec)
t.build(3) # 3 trees
start = time.time()
idx_ann = t.get_nns_by_vector(query, 3) # cari 3 NN
time_ann = time.time() - start
print("\nAnnoy NN index:", idx_ann)
print("Annoy NN jarak:", [np.linalg.norm(X[i]-query) for i in idx_ann])
print("Waktu Annoy:", round(time_ann*1000, 4), "ms")
# 4. Visualisasi hasil
plt.figure(figsize=(6,6))
plt.scatter(X[:,0], X[:,1], c="lightgray", s=20, label="Dataset")
plt.scatter(query[0], query[1], c="red", marker="x", s=100, label="Query")
# Exact NN ditandai biru
plt.scatter(X[idx_exact,0], X[idx_exact,1], c="blue", s=80, label="Exact NN")
# Annoy NN ditandai hijau
plt.scatter(X[idx_ann,0], X[idx_ann,1], c="green", s=50, marker="s", label="Annoy NN")
plt.legend()
plt.title("Exact NN vs Annoy NN (3 trees)")
plt.show()

Distance Metrics
Tree
Jumlah data
Hasil Index terdekat ENN vs ANN
Waktu komputasi Vs
Distance Metrics
Tree
Jumlah data
Hasil Index terdekat ENN vs ANN
Waktu komputasi Vs
Last updated