A A
[ML] t-SNE (t-Distributed Stochastic Neighbor Embedding)
์ด๋ฒˆ์—” t-SNE (t-Distributed Stochastic Neighbor Embedding)์— ๋ฐํ•˜์—ฌ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

t-SNE๋Š” ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ €์ฐจ์› ๊ณต๊ฐ„์— ํšจ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๋น„์„ ํ˜• ์ฐจ์› ์ถ•์†Œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ์ง€์—ญ์  ์œ ์‚ฌ์„ฑ์„ ๋ณด์กดํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.

https://www.linkedin.com/pulse/dimensionality-reduction-t-sne-mathematical-python-approach-sachin-8vzzc/

t-SNE์˜ ํŠน์ง•

t-SNE์˜ ํŠน์ง•์€ ์–ด๋– ํ•œ ์ ๋“ค์ด ์žˆ์„๊นŒ์š”?
  • ๋น„์„ ํ˜• ์ฐจ์› ์ถ•์†Œ: t-SNE๋Š” ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ๋น„์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ์ €์ฐจ์›์—์„œ ๋ณด์กดํ•˜๋Š” ๋ฐ ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์„ ํ˜•์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ์ ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ญ์  ์œ ์‚ฌ์„ฑ ๋ณด์กด: t-SNE๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ์ง€์—ญ์  ์œ ์‚ฌ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋“ค์ด ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ๋„ ๊ฐ€๊น๊ฒŒ ๋ฐฐ์น˜๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•๋ฅ  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ: t-SNE๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ํ™•๋ฅ ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฐจ์›์„ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋“ค์ด ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ๋„ ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜๋˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • KL ๋ฐœ์‚ฐ ์ตœ์†Œํ™”: t-SNE๋Š” ๊ณ ์ฐจ์›๊ณผ ์ €์ฐจ์› ๊ฐ„์˜ ํ™•๋ฅ  ๋ถ„ํฌ ์ฐจ์ด๋ฅผ KL ๋ฐœ์‚ฐ(Kullback-Leibler Divergence)์„ ํ†ตํ•ด ์ตœ์†Œํ™”ํ•˜์—ฌ ์ตœ์ ์˜ ์ €์ฐจ์› ์ž„๋ฒ ๋”ฉ์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

t-SNE์˜ ๊ธฐ๋ณธ ์›๋ฆฌ

t-SNE์€ 3๊ฐ€์ง€์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://gaussian37.github.io/ml-concept-t_sne/

๊ณ ์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ํ™•๋ฅ  ๋ณ€ํ™˜

  • ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ด ๊ฑฐ๋ฆฌ๋ฅผ ํ™•๋ฅ ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ€๊นŒ์šด ์ด์›ƒ ๊ฐ„์˜ ์œ ์‚ฌ์„ฑ์„ ํ™•๋ฅ ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ํ™•๋ฅ  ๋ณ€ํ™˜

  • ์ดˆ๊ธฐํ™”๋œ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ์˜ ๊ฑฐ๋ฆฌ๋„ ํ™•๋ฅ ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, ๊ณ ์ฐจ์› ๊ณต๊ฐ„์˜ ํ™•๋ฅ ๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ์˜ ๋ฐฐ์น˜๋Š” ์ด ํ™•๋ฅ ์„ ๋ฐ”ํƒ•์œผ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

ํ™•๋ฅ  ๋ถ„ํฌ ๊ฐ„์˜ ์ฐจ์ด ์ตœ์†Œํ™”

  • ๊ณ ์ฐจ์› ๊ณต๊ฐ„๊ณผ ์ €์ฐจ์› ๊ณต๊ฐ„์˜ ํ™•๋ฅ  ๋ถ„ํฌ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ KL ๋ฐœ์‚ฐ์„ ์‚ฌ์šฉํ•ด ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ์˜ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๋ฐฐ์น˜๊ฐ€ ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.

t-SNE์˜ ์žฅ, ๋‹จ์  & ๊ฐœ์„  ๋ฐฉ๋ฒ•

t-SNE์˜ ์žฅ์ 

  1. ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”: t-SNE๋Š” ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ 2์ฐจ์› ๋˜๋Š” 3์ฐจ์›์œผ๋กœ ํšจ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ง€์—ญ์  ์œ ์‚ฌ์„ฑ ๋ณด์กด: ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ์ง€์—ญ์  ์œ ์‚ฌ์„ฑ์„ ์ž˜ ์œ ์ง€ํ•˜์—ฌ, ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜• ์ฒ˜๋ฆฌ: t-SNE๋Š” ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ, ์œ ์ „์ž ๋ฐ์ดํ„ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ์ž˜ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

t-SNE์˜ ๋‹จ์ 

  1. ์‹œ๊ฐ„ ๋ณต์žก๋„: t-SNE๋Š” ํฐ ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š” ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋†’์•„ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐ์ดํ„ฐ์…‹์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด ๋ฌธ์ œ๊ฐ€ ์‹ฌ๊ฐํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฏผ๊ฐ์„ฑ: t-SNE๋Š” perplexity์™€ ํ•™์Šต๋ฅ ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ฏผ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์‹คํ—˜์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ•ด์„์˜ ์–ด๋ ค์›€: t-SNE์˜ ๊ฒฐ๊ณผ๋Š” ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ์–ด๋–ป๊ฒŒ ํ•ด์„๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ €์ฐจ์› ์ž„๋ฒ ๋”ฉ์˜ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

t-SNE์˜ ๊ฐœ์„  ๋ฐฉ๋ฒ•

  1. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ตœ์ ํ™”
    • perplexity, ํ•™์Šต๋ฅ  ๋“ฑ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ perplexity๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ์ˆ˜์˜ 1/10์—์„œ 1/5 ์‚ฌ์ด์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ถ”์ฒœ๋ฉ๋‹ˆ๋‹ค.
  2. ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹ ์ฒ˜๋ฆฌ
    • Barnes-Hut t-SNE์™€ ๊ฐ™์€ ๋ณ€ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ๋„ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ˜•์€ t-SNE์˜ ๊ณ„์‚ฐ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฐจ์› ์ถ•์†Œ ์ „ ์ „์ฒ˜๋ฆฌ
    • ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ์‚ฌ์ „์— PCA์™€ ๊ฐ™์€ ๊ธฐ๋ฒ•์œผ๋กœ ์ฐจ์›์„ ์ถ•์†Œํ•œ ํ›„ t-SNE๋ฅผ ์ ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด๋Š” t-SNE๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

t-SNE Example Code

# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

 

 

# Iris ๋ฐ์ดํ„ฐ์…‹ ๋กœ๋“œ
iris = load_iris()
X = iris.data
y = iris.target

# ๋ฐ์ดํ„ฐ ํ‘œ์ค€ํ™”
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# t-SNE ์ ์šฉ
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# t-SNE ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”
plt.figure(figsize=(10, 7))
for target in np.unique(y):
    plt.scatter(X_tsne[y == target, 0], X_tsne[y == target, 1], label=iris.target_names[target])
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.title('t-SNE of Iris Dataset')
plt.legend()
plt.show()