다차원 척도법 (Multidimensional Scaling, MDS)
MDS란, 다변량 데이터의 특성 및 구조를 파악하여, 원래 차원보다 낮은 차원에 시각화를 시키는 방법이다.
이 때, 개체간의 유사성 / 비유사성이 드러나도록 진행한다.
즉, 개체간의 유사성 / 비유사성이 잘 표현되도록 "거리"를 시각화하는 작업을 하게 될 것이다.
중요한 점은, 거리 관계가 잘 유지되어야 한다는 점이다.
거리를 계산하기 위해, 일반적으로는 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의 결과가 적합하다고 볼 수 있다.
'Archive > TIL' 카테고리의 다른 글
[TIL] Dacon 하면서 자잘하게 배운 내용들 정리 (0) | 2024.01.20 |
---|---|
[TIL] Soft Voting, Hard Voting (0) | 2024.01.14 |
[TIL] 0805 아침스터디 - 나이브 베이즈 복습 (0) | 2022.08.05 |
[TIL] 0729 아침스터디 - Kernel Trick (0) | 2022.07.29 |
[TIL] 0725 아침스터디 - ROC curve, 비용민감 곡선 (0) | 2022.07.25 |