Isomap

2.4.6

Isomap

อัปเดต 2020-04-08 อ่าน 1 นาที
สรุป
  • สรุปเป้าหมาย สมมติฐาน และเงื่อนไขที่เหมาะสมของวิธีนี้.
  • ตรวจสอบว่ากฎการอัปเดตหรือเกณฑ์การแบ่งส่งผลต่อพฤติกรรมโมเดลอย่างไร.
  • ใช้ตัวอย่างโค้ดเพื่อกำหนดแนวทางปรับพารามิเตอร์อย่างเป็นรูปธรรม.

สัญชาตญาณ #

Isomap ควรเข้าใจผ่านสมมติฐาน กลไกการปรับปรุงโมเดล และรูปแบบความผิดพลาดบนข้อมูลจริง เพื่อให้เลือกโมเดลและปรับพารามิเตอร์ได้อย่างเหมาะสม.

คำอธิบายโดยละเอียด #

ขั้นตอน #

  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ขยายไปยังข้อมูลมิติสูงจำนวนมากได้ยาก