๋ฐ์ํ
์ด๋ฒ์๋ Isomap์ด๋ผ๋ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฒ์ ๋ฐํ์ฌ ์์๋ณด๊ฒ ์ต๋๋ค.
์์ด์๋งต(Isomap)์ ๋น์ ํ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ผ๋ก, ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ๊ธฐํํ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ๋ฉด์ ์ ์ฐจ์์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ(Geodesic Distance)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ฐจ์ ๊ณต๊ฐ์์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์๊ฐํํฉ๋๋ค.
Isomap์ ํน์ง
- ๋น์ ํ ์ฐจ์ ์ถ์: Isomap์ ๋ฐ์ดํฐ์ ๋น์ ํ ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ๋ฉด์ ์ฐจ์์ ์ถ์ํ ์ ์์ต๋๋ค. ์ด๋ PCA์ ๊ฐ์ ์ ํ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ผ๋ก๋ ์ด๋ ค์ด ๋ฐ์ดํฐ์ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ: ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ์ค์ ๊ฑฐ๋ฆฌ(์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ ๋ฐ์ํฉ๋๋ค. ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ๋ ๋ฐ์ดํฐ์ ๋ด์ฌ๋ ๊ธฐํํ์ ๊ตฌ์กฐ๋ฅผ ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
- ๊ทธ๋ํ ๊ธฐ๋ฐ ์ ๊ทผ: Isomap์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ๋ก ๋ชจ๋ธ๋งํฉ๋๋ค. ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ k๊ฐ์ ์ต๊ทผ์ ์ด์์ ์ฐพ์ ์ฐ๊ฒฐํ๊ณ , ์ด ๊ทธ๋ํ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํฉ๋๋ค.
- MDS ์ฌ์ฉ: ๋ค์ฐจ์ ์ฒ๋๋ฒ(Multidimensional Scaling, MDS)์ ์ฌ์ฉํ์ฌ ์ ์ฐจ์ ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค. MDS๋ ์ ๋ ฅ๋ ๊ฑฐ๋ฆฌ ํ๋ ฌ์ ์ต๋ํ ๋ณด์กดํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฐจ์ ๊ณต๊ฐ์์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
Isomap์ ๊ธฐ๋ณธ ์๋ฆฌ
๊ทธ๋ฌ๋ฉด Isomap์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ์ด๋ ํ ๊ฒ๋ค์ด ์์๊น์?
์ต๊ทผ์ ์ด์ ๊ทธ๋ํ ๊ตฌ์ฑ (Constructing Nearest Neighbor Graph)
- ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํด, k๊ฐ์ ์ต๊ทผ์ ์ด์์ ํ์ํ์ฌ ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด ๊ทธ๋ํ๋ ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ๊ทผ์ ์ฑ์ ๋ํ๋ด๋ฉฐ, Isomap์ ํต์ฌ ๊ตฌ์กฐ์ ๋๋ค.
์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ (Calculating Geodesic Distances)
- ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ ์ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ์ฌ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ(Dijkstra's algorithm)๊ณผ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ฐจ์ ์ฒ๋๋ฒ (Multidimensional Scaling, MDS)
- ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ํ๋ ฌ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์, ์ ์ฐจ์ ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค. MDS๋ ์ด ๊ฑฐ๋ฆฌ ํ๋ ฌ์ ๋ณด์กดํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฐจ์ ๊ณต๊ฐ์์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ฐฐ์นํ์ฌ, ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ (Calculating Geodesic Distances)
Isomap์์๋ ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ ์ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ์ฌ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํฉ๋๋ค.
- ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ i์ j์ฌ์ด์ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ dg(i. j)๋ ๊ทธ๋ํ ๋ด์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํตํด ๊ณ์ฐ๋ฉ๋๋ค.
- ์์ ์์์ ๋ณด๋ฉด P(i, j)๋ ๋ฐ์ดํฐ ํฌ์ธํธ i์ j ์ฌ์์ ๋ชจ๋ ๊ฒฝ๋ก์ ์งํฉ, d(u, v)๋ ๊ทธ๋ํ์์ ์ฐ๊ฒฐ๋ ํฌ์ธํธ u์ v๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋๋ค.
๋ค์ฐจ์ ์ฒ๋๋ฒ (Multidimensional Scaling, MDS)
๋ํ Isomap ์์ ๋ค์ฐจ์ ์ฒ๋๋ฒ (MDS)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ค์ฐจ์ ์ฒ๋๋ฒ (MDS)์์ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ํ๋ ฌ D๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฐจ์ ๊ณต๊ฐ์์ ์ ์ฌํ๊ฒ ์ฌํํ ์ ์๋ ์ ๋ค์ ๋ฐฐ์น๋ฅผ ํ์ํฉ๋๋ค.
Isomap์ ์ฅ, ๋จ์ & ๊ฐ์ ๋ฐฉ๋ฒ
Isomap์ ์ฅ์
- ๋น์ ํ ๊ตฌ์กฐ ๋ณด์กด: Isomap์ ๋ฐ์ดํฐ์ ๋น์ ํ ๊ตฌ์กฐ๋ฅผ ์ ๋ณด์กดํ๋ฉด์ ์ฐจ์์ ์ถ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋น์ ํ์ ์ด๊ณ ๋ณต์กํ ๋ฐ์ดํฐ์ ํนํ ์ ๋ฆฌํฉ๋๋ค.
- ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ์ฌ์ฉ: ์ค์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ ๋ฐ์ํ๋ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ๋ฐ์ดํฐ์ ๋ด์ฌ๋ ๊ธฐํํ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ์ ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ ์๊ฐํ: ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋ณํํ์ฌ ์๊ฐํํ ์ ์์ด, ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
Isomap์ ๋จ์
- ๊ณ์ฐ ๋ณต์ก์ฑ: ์ต๊ทผ์ ์ด์ ๊ทธ๋ํ ๊ตฌ์ฑ ๋ฐ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ ๊ณผ์ ์์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ๊ณ์ฐ ๋ณต์ก์ฑ์ด ํฌ๊ฒ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ๋ ธ์ด์ฆ์ ๋ฏผ๊ฐ: ๋ฐ์ดํฐ์ ๋ ธ์ด์ฆ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๊ทธ๋ํ ๊ตฌ์กฐ๊ฐ ์๊ณก๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฐจ์ ์๋ฒ ๋ฉ์ ํ์ง์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- k๊ฐ ๊ฒฐ์ : ์ ์ ํ k๊ฐ์ ์ ํํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค. k๊ฐ์ด ๋๋ฌด ์๊ฑฐ๋ ํฌ๋ฉด ๊ทธ๋ํ์ ์ฐ๊ฒฐ์ฑ๊ณผ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๋ณด์กด์ด ์ ์ ํ ์ด๋ฃจ์ด์ง์ง ์์ ์ ์์ต๋๋ค.
Isomap์ ๊ฐ์ ๋ฐฉ๋ฒ
- ์ต์ ์ k๊ฐ ์ ํ
- ๋ค์ํ k๊ฐ์ ์๋ํ์ฌ ์ต์ ์ k๊ฐ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ด ์ ํ์ ๊ทธ๋ํ์ ์ฐ๊ฒฐ์ฑ๊ณผ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๋ณด์กด์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ๋
ธ์ด์ฆ ์ ๊ฑฐ
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋จ๊ณ์์ ๋ ธ์ด์ฆ๋ฅผ ์ ๊ฑฐํ์ฌ ๊ทธ๋ํ ๊ตฌ์กฐ์ ์๊ณก์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ด๋ ๋ ์ ํํ ์ง์ค๋ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋, ๋จผ์ PCA ๋ฑ์ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ฐจ์์ ์ค์ธ ํ Isomap์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ๊ณ์ฐ ๋น์ฉ์ ์ค์ด๋ฉด์๋ ๋ฐ์ดํฐ์ ์ฃผ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ ์ ์์ต๋๋ค.
Isomap Example Code (by Python)
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import Isomap
import matplotlib.pyplot as plt
# Iris ๋ฐ์ดํฐ์
๋ก๋
iris = load_iris()
X = iris.data
y = iris.target
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Isomap ์ ์ฉ
isomap = Isomap(n_components=2, n_neighbors=5)
X_isomap = isomap.fit_transform(X_scaled)
# Isomap ๊ฒฐ๊ณผ ์๊ฐํ
plt.figure(figsize=(10, 7))
for target in np.unique(y):
plt.scatter(X_isomap[y == target, 0], X_isomap[y == target, 1], label=iris.target_names[target])
plt.xlabel('Isomap Component 1')
plt.ylabel('Isomap Component 2')
plt.title('Isomap of Iris Dataset')
plt.legend()
plt.show()
๋ฐ์ํ
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] ์ฐ๊ด ๊ท์น ํ์ต (Association Rule Learning) (0) | 2024.08.22 |
---|---|
[ML] t-SNE (t-Distributed Stochastic Neighbor Embedding) (0) | 2024.08.20 |
[ML] Principal Component Analysis (PCA - ์ฃผ์ฑ๋ถ ๋ถ์) (0) | 2024.08.18 |
[ML] DBSCAN (Density-Based Spatial Clustering of Applications with Noise) (0) | 2024.08.18 |
[ML] Hierarchical Clustering (๊ณ์ธต์ ๊ตฐ์ง ๋ถ์) (0) | 2024.08.17 |