[ML] t-SNE를 이용한 차원축소

Hα ყҽσɳɠ·2020년 11월 16일
0

MachineLearning

목록 보기
2/4
post-thumbnail

tSNE (t-Stochastic Neighbor Embedding)는 감독되지 않는 비선형 기술이며 일반적으로 높은 차원의 특징을 가진 데이터 샘플을 시각화하는 데 사용된다. t-SNE의 주요 목적은 Data Visualization으로 고차원 데이터를 2차원 또는 3차원의 저차원 데이터로 시각화하여 데이터 분석 과정에서 활용하기 위한 방법이다.
t-SNE 는 벡터 시각화를 위한 다른 알고리즘들보다 안정적인 임베딩 학습 결과를 보여준다. 이는 t-SNE 가 데이터 간 거리를 stochastic probability 로 변환하여 임베딩에 이용하기 때문이다. 그리고 이 stochastic probability 는 perplexiy 에 의하여 조절된다.

t-SNE의 아이디어는 데이터 포인트 사이의 거리를 가장 잘 보존하는 2차원 표현을 찾는 것이다.
먼저, 각 데이터 포인트를 2차원에 무작위로 표현한 후 원본 특성 공간에서 가까운 포인트는 가깝게, 멀리 떨어진 포인트는 멀어지게 만든다.
t-SNE는 가까이 있는 포인트에 더 많은 비중을 둔다. 따라서 이웃 데이터 포인트에 대한 정보를 보존하려함

데이터 분석 시 가장 먼저 하는 일이 데이터의 시각화인데 가장 기초적인 방법으로 주성분분석법(principal component analysis, PCA)이 있다. 이는 데이터의 공분산(covariance)을 분석하여 선형변환 행렬(linear transformation matriix)을 얻어 차원을 축소하는 방법이다. PCA는 선형변환을 이용하기 때문에 비선형 특성을 가진 데이터에 대해서는 데이터의 특성을 잘 추출하지 못하는 한계가 있다.

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE

tsne = TSNE(n_components=2).fit_transform(train_x)

tsne_df = pd.DataFrame({'x': tsne[:, 0], 'y':tsne[:, 1], 'classes':train_y})

plt.figure(figsize=(16, 10))
sns.scatterplot(
    x = 'x', y = 'y',
    hue = 'classes',
    palette = sns.color_palette("Set1", 10),
    data = tsne_df,
    legend = "full",
    alpha = 0.4
)

plt.title("tSNE")

plt.savefig('HW6/TSNE.png', bbox_inches='tight')  
plt.show()

data를 2차원 공간으로 축소하기 위해 'n_componets'를 2로 선언하였다.
'fit_transform' 메소드를 이용하여 train_x 데이터를 임베딩된 공간에 맞추고, 변환된 결과를 사용한다.
결과 시각화를 위해 각 컬럼을 DataFrame에 넣고, 데이터 샘플을 2차원 공간에 각 클래스별로 플로팅한다.

📊 Experimental Result

PCA는 데이터 샘플의 클래스에 관계없이 원본 데이터의 특성을 가장 잘 설명할 수 있는 축을 사용하여 차원을 줄인다. 따라서, 데이터의 특성은 알 수 있지만 각 데이터들의 클래스 간의 구분이 명확하지 않다. 반면, TSNE는 원본 데이터들의 거리를 잘 보존하는 2차원 표현을 찾기 위해 멀리 떨어진 원본 데이터는 더 멀게, 가까운 데이터는 더 가깝게 만든다. 따라서, 결과 사진에서 볼 수 있듯이 PCA보다 데이터들의 클래스를 더 잘 구분해준다.
하지만, tsne는 pca에 비해 계산시간이 더 많이 소요된다. 데이터가 선형적이라는 전제 조건을 가질 때는 PCA를 사용하는 것이 더 효율적이라고 생각한다. 어떤 데이터를 사용하느냐와 목적에 따라 비용을 고려하여 차원 축소 방법을 택해야 한다고 생각된다.

profile
𝑯𝒐𝒏𝒆𝒔𝒕𝒚 𝑰𝒏𝒕𝒆𝒈𝒓𝒊𝒕𝒚 𝑬𝒙𝒄𝒆𝒍𝒍𝒆𝒏𝒄𝒆

0개의 댓글