⚽Lab 1

Exact NN vs. ANNOY

Pengantar

Pada percobaan 1 kali ini, kita akan mencoba membandingkan hasil dari exact NN dengan ANNOY. data yang kita buat adalah data random 2D, dengan 1000 data point, mencari 3 data terdekat dari query point, Metric Similarity menggunakan Euclidean, dengan 3 tree Annoy.

Langkah 1 - Install Library ANNOY

# Install ANNOY
!pip install annoy

Langkah 2 - Import Library

# Import Library
import numpy as np
import matplotlib.pyplot as plt
import time

from annoy import AnnoyIndex

Langkah 3 - Membuat Dataset Dummy

Pada langkah ini Anda akan membuat dataset dummy dan memilih titik awal untuk cluster (query point).

# Build Random Dataset and Query Point
np.random.seed(42)
n_points = 1000
X = np.random.rand(n_points, 2) * 100  # random value at 100x100 space

# Query point (pick 1 random data point)
query = X[np.random.randint(0, n_points)]

Langkah 4 - Exact NN

Pada langkah ini, Anda akan mengkomputasi jarak terdekat dengan menggunakan metode brute force. Perhatikan waktu yang dihasilkan!

Hasilnya,

Langkah 5 - Perhitungan Jarak dengan ANNOY

Selanjutnya, bandingkan dengan ANNOY. Jumlah Tree yang digunakan adalah 3.

Hasilnya,

Dapat dilihat perbedaan waktu yang sangat signifikan. ANNOY hanya memerlukan waktu 0.13ms sedangkan NN konvensional mencapai 9.17ms.

Langkah 6 - Visualisasi Hasil NN

Untuk mengetahui tingkat ketepatan prediksi NN dari ANNOY, lakukan proses visualisasi sehingga Anda dapat mengetahui titik exact NN dibandingkan dengan perkiraan NN dari ANNOY.

Hasilnya,

Terlihat bahwa ANNOY tidak memilih NN tepat seperti exact NN. Akan tetapi, posisi ini sudah cukup untuk kebutuhan pencarian kedekatan dengan jumlah data yang besar dengan kompensasi waktu yang lebih cepat. Ingat, tujuan utama ANNOY adalah mencari titik balance antara akurasi klasterisasi dan kecepatan.

Last updated