Isomap menjaga jarak geodesik pada graf tetangga lalu menjalankan MDS klasik untuk “menggelar” manifold melengkung seperti Swiss roll.
1. Ide dasar #
- Bentuk graf tetangga dengan (k)-NN atau radius (\varepsilon).
- Hitung jarak lintasan terpendek (geodesik) antar pasangan titik pada graf tersebut.
- Masukkan matriks jarak itu ke MDS agar memperoleh embedding berdimensi lebih rendah.
Hasilnya mempertahankan struktur global sambil membuka lipatan manifold.
2. Contoh Python #
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_swiss_roll
from sklearn.manifold import Isomap
X, color = make_swiss_roll(n_samples=1500, noise=0.05, random_state=0)
iso = Isomap(n_neighbors=10, n_components=2)
emb = iso.fit_transform(X)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].scatter(X[:, 0], X[:, 2], c=color, cmap="Spectral", s=5)
axes[0].set_title("Swiss roll asli")
axes[1].scatter(emb[:, 0], emb[:, 1], c=color, cmap="Spectral", s=5)
axes[1].set_title("Embedding Isomap")
for ax in axes:
ax.set_xticks([])
ax.set_yticks([])
plt.tight_layout()
plt.show()
3. Parameter penting #
n_neighbors: menentukan graf lokal; terlalu kecil membuat graf terputus, terlalu besar merusak bentuk manifold.n_components: jumlah dimensi target (biasanya 2–3 untuk visualisasi).- Bersihkan noise/duplikat dan lakukan penskalaan fitur sebelum membuat graf.
4. Kelebihan vs kekurangan #
| Kelebihan | Kekurangan |
|---|---|
| Menjaga struktur manifold dan jarak geodesik | Biaya tinggi karena perlu shortest path untuk semua pasangan |
| Visualisasi intuitif | Sangat sensitif terhadap pemilihan tetangga |
5. Catatan #
- Isomap = graf tetangga + MDS; pastikan grafnya benar-benar merefleksikan topologi data.
- Periksa apakah graf memiliki satu komponen terhubung; jika tidak, embedding akan pecah.
- Alternatif modern seperti UMAP/t-SNE lebih cepat saat fokus pada hubungan lokal.