본문 바로가기
Archive/TIL

[TIL] 0808 아침스터디 - 다차원척도법 (MDS)

by 다람이도토리 2022. 8. 8.

다차원 척도법 (Multidimensional Scaling, MDS) 

 MDS란, 다변량 데이터의 특성 및 구조를 파악하여, 원래 차원보다 낮은 차원에 시각화를 시키는 방법이다.
이 때, 개체간의 유사성 / 비유사성이 드러나도록 진행한다.

즉, 개체간의 유사성 / 비유사성이 잘 표현되도록 "거리"를 시각화하는 작업을 하게 될 것이다.
중요한 점은, 거리 관계가 잘 유지되어야 한다는 점이다.

https://stackabuse.com/guide-to-multidimensional-scaling-in-python-with-scikit-learn/

거리를 계산하기 위해, 일반적으로는 Eucliden-metric을 쓰긴 하나, Manhattan distance 등 필요에 따라 다른 distance를 이용할 수 있다.

 

Python Example

코드를 통해서 어떻게 쓰는지 확인해보자.

# 출처 : https://stackabuse.com/guide-to-multidimensional-scaling-in-python-with-scikit-learn/

from sklearn.manifold import MDS
from matplotlib import pyplot as plt
import sklearn.datasets as dt
import seaborn as sns         
import numpy as np
from sklearn.metrics.pairwise import manhattan_distances, euclidean_distances

# data set 정의 후 MDS를 적용
X = np.array([[0, 0, 0], [0, 0, 1], [1, 1, 1], [0, 1, 0], [0, 1, 1]])
mds = MDS(random_state=0)

# 학습된 MDS를 데이터에 적용
X_transform = mds.fit_transform(X)
print(X_transform)

# metric을 바꾸고 싶다면? precomputed된 거리를 활용해야 한다.
# 따라서 사전에 거리 계산을 한 값을 준비해야 한다.
dist_manhattan = manhattan_distances(X)
mds = MDS(dissimilarity='precomputed', random_state=0)
X_transform_L1 = mds.fit_transform(dist_manhattan)

얻은 결과값들을 가지고, plot을 시켜 실제 시각화 결과를 볼 수 있을 것이다.

 

다차원 척도법의 절차

그런데, 대체 무슨 일을 한 것인지 알아보자.

Step 1.  유사성 / 비유사성, 즉 데이터 간의 거리를 계산한다.
Step 2 . 데이터를 2차원 / 3차원에 표현한다.
Step 3 . Stress 함수를 통해  실제 거리 행렬과, 추정된 거리 행렬을 비교하고, stress 값이 최소가 되게 한다.

일반적으로 데이터의 차원 축소가 일어난다면 거리에 변형이 생길 수 밖에 없을 것이다. 이에 대한 오차를 나타낼 지표가 필요하고, 이것이 stress 함수이다.

stress 함수는 다음과 같이 정의한다.

- 분모 : 실제 거리
- 분자 : (실제 거리와 추정 거리의 차이)의 거리

즉, 실제 거리 대비 추정 거리의 정확도가 어느정도인지, 그 비율을 나타주고 있다.

즉, 위의 값은 거리의 차이가 커질 수록 값이 커지므로, stress 값이 낮아야 MDS의 결과가 적합하다고 볼 수 있다.