Isomap

Basic

Isomap | คลี่ manifold ด้วยระยะทางตามพื้นผิว

Isomap เชื่อมข้อมูลเป็นกราฟค่าน้ำหนัก แล้วใช้ระยะทางตามพื้นผิว (geodesic) ที่ประมาณจากกราฟ เพื่อป้อนให้ MDS ผลคือสามารถคลี่ manifold ที่โค้งให้อยู่ในมิติที่ต่ำกว่าได้


ขั้นตอน #

  1. สร้างกราฟ k-nearest neighbors หรือ \(\varepsilon\)-neighbors
  2. คำนวณเส้นทางที่สั้นที่สุดบนกราฟ (ประมาณระยะทางตามพื้นผิว)
  3. ส่งเมทริกซ์ระยะให้กับ Multidimensional Scaling (MDS) เพื่อได้พิกัดใหม่

ตัวอย่างด้วย 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 3 มิติ")
axes[1].scatter(emb[:, 0], emb[:, 1], c=color, cmap="Spectral", s=5)
axes[1].set_title("ผลฉายด้วย Isomap")
for ax in axes:
    ax.set_xticks([])
    ax.set_yticks([])
plt.tight_layout()
plt.show()

การคลี่ Swiss roll ด้วย Isomap


วิธีเลือกพารามิเตอร์ #

  • n_neighbors: เล็กไปกราฟขาดการเชื่อมต่อ ใหญ่ไประยะ geodesic จะคล้าย Euclidean
  • n_components: หากเน้น visualization ใช้ 2 หรือ 3 ถ้าต้องการลดมิติเพื่อโมเดลให้ใช้ค่าที่เหมาะกับงาน
  • ข้อมูลที่มี noise มากควรทำความสะอาดก่อน เพราะกราฟพึ่งพาระยะใกล้มาก

ข้อดี / ข้อจำกัด #

ข้อดีข้อจำกัด
จัดการโครงสร้างไม่เชิงเส้นได้ดีต้องคำนวณ shortest path บนกราฟ ขนาดใหญ่จะช้า
พิกัดใหม่ตีความได้ตรงไปตรงมาไวต่อการเลือกพารามิเตอร์ k และ noise
เหมาะกับการมองภาพ manifoldขยายไปยังข้อมูลมิติสูงจำนวนมากได้ยาก

สรุป #

  • Isomap = กราฟระยะทาง + MDS ช่วยคลี่ manifold ที่ซับซ้อนได้
  • คุณภาพของกราฟคือหัวใจ จึงควรทดลองหลายค่าของเพื่อนบ้านและจัดการ noise ให้ดี
  • ใช้ร่วมกับ t-SNE หรือ UMAP เพื่อเห็นมุมมองที่ต่างกันของข้อมูล