다차원 척도법(MDS)이란? AI에서 사례 사이의 비유사도를 좌표로 나타내는 방법
TL;DR
다차원 척도법(MDS)은 사례 사이의 비유사도를 낮은 차원의 좌표 사이 거리로 나타내는 방법입니다. 계량 MDS는 비유사도의 수치 크기를, 비계량 MDS는 순서를 반영하려고 합니다. 고전적 MDS는 중심화한 거리 행렬에서 고유값을 구하는 별도 방식입니다. 스트레스는 선택한 거리 관계의 표현 오차이며 분류 정확도가 아닙니다. 거리 행렬의 의미와 계산 방식을 먼저 정하고 그림의 축에 임의의 의미를 붙이지 않습니다.
핵심 3줄 요약
- 핵심 1
비유사도를 점 간 거리로 옮깁니다. 서로 다르다고 평가한 사례가 좌표에서도 멀도록 배치합니다. - 핵심 2
세 방식의 목표가 다릅니다. 계량·비계량·고전적 MDS의 목적함수와 계산을 구분합니다. - 핵심 3
작은 스트레스만 믿지 않습니다. 입력 거리·출력 차원·정규화와 원본 사례를 함께 확인합니다.
이 글에서 다룰 내용
- 다차원 척도법의 한 문장 정의
- 세 사례의 거리로 이해하는 좌표 배치
- 계량·비계량·고전적 MDS의 작동 원리
- 스트레스·거리 입력·초기화 설정의 뜻
- PCA·Isomap·t-SNE·군집화와의 차이
- 사용처와 거리 행렬 점검 순서
- 축 해석·0값·계산 비용·새 입력의 주의점
다차원 척도법을 한 문장으로 정의하면 무엇인가요?
다차원 척도법은 여러 사례 사이의 비유사도 관계를 낮은 차원의 유클리드 좌표 공간에 점 사이 거리로 표현하는 분석 방법입니다.
영문명은 Multidimensional Scaling이며 MDS로 줄입니다. 다차원 스케일링이라는 이름도 씁니다. 여기의 척도법은 표의 각 열을 0과 1 사이로 맞추는 특징 스케일링과 다릅니다. 사례들을 얼마나 가깝거나 멀게 배치할지 정하는 작업입니다.
출발 자료는 수치 특징에서 계산한 거리일 수도 있고, 두 대상이 얼마나 다른지 평가한 비유사도일 수도 있습니다. 비유사도는 작을수록 비슷하다는 방향으로 읽습니다. 큰 값일수록 비슷한 유사도를 아무 변환 없이 같은 입력으로 넣으면 해석이 뒤집힙니다. 이 글의 API 설명은 scikit-learn 1.9.1 문서와 공식 구현을 기준으로 합니다.
한 줄 정리: 원래 특징의 이름 대신 사례 사이의 관계를 읽고, 그 관계를 나타내는 새 좌표를 만듭니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 사례 A·B·C의 차이를 비교한다고 가정해 보겠습니다. A와 B의 비유사도는 1, B와 C는 2, A와 C는 3입니다. 이해를 돕기 위해 직접 정한 합성 자료이며 실제 고객이나 문서의 측정 결과는 아닙니다.
- 한 줄 위 좌표를 A=0, B=1, C=3으로 두면 세 쌍의 거리가 각각 1, 2, 3이 됩니다. 입력 관계를 모두 표현합니다.
- 좌표를 A=0, B=1, C=2로 바꾸면 A·B는 1, B·C는 1, A·C는 2가 됩니다. 두 쌍의 거리가 목표보다 짧습니다.
- 뒤 배치의 원시 스트레스는
(1 - 1)^2 + (2 - 1)^2 + (3 - 2)^2 = 2입니다. 서로 다른 쌍을 한 번씩 더합니다.
이 값은 Python 표준 라이브러리로 거리와 오차를 실제 계산해 확인했습니다. MDS 추정기를 실행해 얻은 최적 좌표가 아니라 두 고정 배치를 비교한 계산입니다. 첫 배치의 원시 스트레스는 0이며 뒤 배치의 점 간 거리 제곱합은 6입니다.
뒤 배치에서 정규화한 Stress-1은
√(2/6)
으로 약 0.57735입니다. 원시 스트레스 2와 같은 숫자가 아닙니다. 실제 자료에서는 모든 비유사도를 적은 차원에 완벽히 담지 못할 수 있으므로 어떤 관계를 더 많이 왜곡했는지도 살핍니다.
쉬운 예시: 세 지점 사이의 간격표를 보고 지도에 점을 놓는다고 생각하세요. 가로축 이름보다 점 사이 간격이 입력표와 얼마나 맞는지가 중심입니다.
왜 AI에서 다차원 척도법이 중요한가요?
거리만 있는 자료도 탐색합니다
여러 문서나 이미지의 특징을 이미 비교했더라도 그 관계를 표만으로 읽기는 어렵습니다. MDS는 정사각 비유사도 행렬을 좌표로 옮겨 가까운 사례와 먼 사례를 살펴보는 후보입니다. 원본 특징 없이도 관계를 입력하지만 거리의 의미가 업무 목적에 맞는지는 분석자가 확인합니다.
수치 크기와 순서의 가정을 나눕니다
비유사도의 차이가 정량적으로 의미 있다면 계량 방식을 검토합니다. 사람이 매긴 차이 평가처럼 순서가 더 중요하다면 비계량 방식을 비교할 수 있습니다. 어느 쪽도 자동으로 정답은 아닙니다. 자료를 만든 기준과 표현하려는 관계를 먼저 적습니다.
좋은 그림과 좋은 표현을 구분합니다
좌표를 얻으면 기존 라벨이나 측정 조건을 색으로 표시하고 원본을 열어 봅니다. 기본 MDS의 학습은 정답 라벨을 사용하지 않습니다. 색이 잘 나뉜 그림, 거리 표현 오차, 후속 분류 성능은 서로 다른 결과이므로 하나의 점수로 묶어 보고하지 않습니다.
핵심 인사이트: MDS의 출발점은 어떤 AI 모델을 쓸지가 아니라 사례 사이에서 무엇을 비슷함의 기준으로 삼을지입니다.
다차원 척도법은 어떤 순서로 작동하나요?
1. 사례별 비유사도를 준비합니다
원본 특징을 입력하면 선택한 거리 기준으로 사례 쌍의 비유사도를 계산합니다. 사전 계산 행렬을 넣으면 행과 열이 같은 사례 순서여야 합니다. 대칭성·대각선 0·비음수·유한값을 점검합니다. 입력이 정사각형이라는 이유만으로 도구가 거리 행렬로 자동 해석한다고 생각하지 않습니다.
2. 계량·비계량 방식의 목표를 정합니다
계량 MDS는 좌표 사이 거리와 입력 비유사도의 차이를 제곱해 더한 스트레스를 줄입니다. 비계량 MDS는 입력 순서를 반영하는 단조 변환값인 디스패리티를 구하고 좌표 거리를 맞춥니다. 순서 보존을 겨냥해도 차원과 자료의 제약 때문에 모든 쌍의 관계가 완벽히 지켜진다고 보장하지 않습니다.
scikit-learn의 MDS는 SMACOF로 좌표를 반복 갱신합니다. 비계량 방식에는 등장성 회귀 단계가 추가됩니다. 초기 배치에서 시작해 오차와 좌표를 갱신하고 종료 기준을 확인합니다. 반복이 끝났거나 스트레스가 줄었다는 사실은 전역 최적해나 올바른 의미 표현의 증명이 아닙니다.
3. 고전적 방식은 다른 손실을 풉니다
고전적 MDS는 제곱 비유사도를 이중 중심화해 내적을 나타내는 행렬을 만들고 고유값 분해로 좌표를 구합니다. 스트레스 대신 내적 행렬의 표현 차이인 스트레인을 다룹니다. 현재 문서에서는 별도 ClassicalMDS 클래스입니다. MDS의 반복 알고리즘과 같은 계산으로 설명하지 않습니다.
입력이 어떤 벡터들의 유클리드 거리라면 고전적 MDS는 그 벡터들에 PCA를 적용한 표현과 연결됩니다. 일반 비유사도에서도 언제나 PCA와 같다는 뜻은 아닙니다. 비유클리드 관계는 적은 좌표로 나타낼 때 왜곡이 남으므로 거리의 성질과 표현 한계를 함께 읽습니다.
주요 설정과 결과는 어떻게 읽나요?
거리 입력과 계량 여부는 다른 설정입니다
확인한 MDS에서
metric="precomputed"
는 이미 계산한 비유사도 행렬을 넣는 설정입니다.
metric="euclidean"
는 특징으로 유클리드 거리를 계산합니다. 계량 여부는
metric_mds=True
또는
metric_mds=False
로 정합니다. 이름이 비슷해도 입력 거리와 목적함수의 선택은 다릅니다.
오래된 예제의
metric=False
와
dissimilarity="precomputed"
는 현재 MDS에서 각각 이름 변경·지원 중단 예정 안내가 있는 표기입니다. 새 코드에 그대로 옮기기 전에 설치 버전을 확인합니다. 반면 함수 smacof의
metric=False
는 여전히 비계량 선택입니다. 클래스와 함수의 인자를 섞지 않습니다.
출력 차원과 초기화 횟수를 구분합니다
n_components
는 출력 좌표 수이며 기본값은 2입니다.
n_init
는 서로 다른 초기화의 실행 횟수이고 확인한 버전의 기본값은 1입니다. 여러 실행에서는 최종 스트레스가 작은 결과를 고릅니다. 군집 수나 반복 횟수가 아닙니다.
init="random"
은 무작위 배치,
init="classical_mds"
는 고전적 MDS 좌표를 초기값으로 씁니다. 후자는 n_init을 무시합니다. 명시적 초기 좌표를 fit에 넘겨도 한 번 실행합니다. 고전적 초기화 뒤 SMACOF를 수행하는 일과 고전적 MDS만 수행하는 일을 구분합니다.
좌표·스트레스·반복 상태를 따로 봅니다
embedding_
는 사례 수 × 출력 차원의 좌표입니다.
dissimilarity_matrix_
는 사용한 사례 쌍의 비유사도이며
n_iter_
는 선택된 실행의 반복 수입니다.
max_iter
는 한 실행의 반복 한도이고
eps
는 정규화된 스트레스 변화의 종료 허용값입니다.
normalized_stress="auto"
에서는 계량 방식이 원시 스트레스를, 비계량 방식이 Stress-1을 반환합니다.
normalized_stress=True
는 정규화한 값을 요청합니다. 낮은 값의 뜻을 읽기 전에 어느 계산인지 확인하며 서로 다른 표본·거리·차원의 숫자를 무조건 같은 순위로 비교하지 않습니다.
다차원 척도법과 헷갈리는 용어는 무엇이 다른가요?
PCA·특징 스케일링과의 차이
주성분 분석(PCA)는 원본 특징의 분산이 큰 직교 방향을 찾습니다. MDS는 사례 쌍의 비유사도를 출발점으로 삼습니다. 고전적 MDS와 PCA의 연결 조건을 모든 MDS로 확대하지 않습니다. 표준화나 최소-최대 스케일링은 특징의 단위·크기를 바꾸는 전처리이며 사례 간 좌표를 맞추는 MDS 자체는 아닙니다.
Isomap·t-SNE와의 차이
아이소맵(Isomap)은 먼저 이웃 그래프에서 최단 경로 거리를 만듭니다. MDS가 모든 입력에서 이런 경로를 자동으로 구하는 것은 아닙니다. t-SNE는 이웃 유사도 확률을 맞추는 방법입니다. 같은 점 그림이 나와도 거리의 수치 크기·순서·확률 관계 중 무엇을 겨냥하는지가 다릅니다.
군집화·의미 임베딩과의 차이
MDS의 출력은 좌표이며 자동 군집 라벨이 아닙니다. 점이 모여 보인다는 이유만으로 실제 범주가 발견됐다고 단정하지 않습니다. 텍스트 의미를 학습해 벡터로 만드는 임베딩 모델과도 역할이 다릅니다. 의미 벡터에서 만든 거리를 MDS로 그릴 수는 있지만 그 그림이 원래 모델의 검색 성능을 보장하지 않습니다.
비교 정리: PCA는 특징 분산의 방향, Isomap은 이웃 경로 거리, MDS는 입력 비유사도의 좌표 표현을 중심으로 읽습니다.
실전에서는 어디에 쓰이나요?
합성 자료에서 거리 표현을 비교합니다
공식 예제는 평면에 만든 점들의 거리에 잡음을 더하고 대칭 행렬을 유지한 뒤 세 MDS 방식을 비교합니다. 비계량 결과의 크기를 조정하고 좌표를 회전·반전해 그림을 비교하기 쉽게 만듭니다. 이런 정렬은 시각 비교를 위한 처리이며 출력 축에 고유한 의미가 있다는 증거는 아닙니다.
문서·이미지·평가 대상의 관계를 탐색합니다
정한 비유사도 기준으로 가까운 사례를 찾아 원문과 특징을 검토합니다. 사람의 평가 순서만 믿을지 실제 수치 차이도 믿을지에 따라 계량·비계량 후보를 비교합니다. 관계를 탐색하는 지도와 신규 입력을 자동 처리하는 서비스 모델은 다른 산출물이므로 둘의 검증 경계를 구분합니다.
다차원 척도법을 적용할 때 어떤 순서로 확인하나요?
1. 사례 ID와 비유사도 기준을 고정합니다
한 행이 무엇인지, 거리를 어떤 특징과 단위로 만들었는지 적습니다. 행렬의 행·열 ID를 같은 순서로 저장하고 결측값·중복·비정상 값을 검사합니다. 정답 라벨을 그림에 붙일 때도 같은 순서를 대조합니다. 다른 표본의 거리와 라벨을 섞으면 계산이 끝나도 해석은 틀립니다.
2. 0값과 입력 경로를 점검합니다
비계량 MDS에서 입력 비유사도 0은 결측으로 취급됩니다. 대각선 밖의 0이 정말 같은 사례를 뜻한다면 그 의미가 알고리즘의 처리와 맞는지 검토합니다. 무조건 0으로 채워 빈칸을 숨기거나 근거 없이 작은 양수로 바꿔 해결했다고 하지 않습니다. 사전 계산 행렬은 해당 입력 설정을 명시합니다.
3. 같은 조건에서 차원과 초기화를 비교합니다
거리와 표본을 고정하고 출력 차원·초기 배치·시드·반복 설정을 기록합니다. 여러 시작점의 결과와 쌍별 거리 왜곡을 함께 봅니다. 스트레스가 작아지는 것만 좇아 차원을 계속 늘리면 작은 그림을 만드는 목적이 사라질 수 있습니다. 선택한 차원의 이유를 남깁니다.
4. 탐색과 새 입력 처리를 분리합니다
확인한 MDS 클래스는 fit과 fit_transform으로 입력 사례의 좌표를 구하지만 저장된 공간에 새 사례만 넣는 transform은 제공하지 않습니다. 전체를 다시 맞추면 기존 점도 이동할 수 있습니다. 새 입력의 지속적인 변환이 필요한 경우 별도 방법이나 검증된 확장 절차를 검토하며 없는 API를 호출하지 않습니다.
실전 팁: 좌표 그림과 함께 사례 ID·거리 생성법·버전·초기화·스트레스 종류를 보관하세요. 그림만 저장하면 비교 조건을 되찾기 어렵습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 좌표축에 임의의 이름을 붙이지 않습니다. 같은 점 간 거리를 유지하면서 평행이동·회전·반전한 배치도 가능합니다. 가로축을 문서 품질이나 사람의 능력처럼 단정하지 않습니다. 다른 실행의 좌표를 비교할 때도 첫 열끼리 바로 대조하기보다 관계와 정렬 조건을 확인합니다.
둘째, 원시 스트레스와 정규화 값을 섞지 않습니다. 원시 스트레스는 거리 단위와 비교한 쌍의 수에 영향을 받습니다. Stress-1은 좌표의 거리 제곱합으로 나눈 뒤 제곱근을 취한 값입니다. 정규화했어도 입력 기준이나 목표가 다른 결과가 자동으로 공정한 비교가 되지는 않습니다.
셋째, 전체 쌍의 계산 부담을 봅니다. 사례 수 × 사례 수의 행렬을 다루므로 저장 부담이 사례 수의 제곱에 비례합니다. 여러 초기화와 반복은 실행 비용도 늘립니다. 작은 표본으로 시간·메모리를 확인하되 표본 선택이 관계 지도에 미치는 영향도 남깁니다.
넷째, 표현 오차와 업무 성능을 따로 검증합니다. 낮은 스트레스는 선택한 비유사도를 잘 표현했다는 단서입니다. 그 비유사도 자체가 잘못됐거나 일부 사례가 크게 왜곡될 수도 있습니다. 원본 확인, 거리별 오류, 후속 업무의 독립 평가를 생략하지 않습니다.
주의: 거리표를 잘 그렸다는 사실만으로 의미·군집·인과관계·새 입력의 품질까지 입증되지는 않습니다.
자주 묻는 질문
Q1. 다차원 척도법은 정답 라벨이 필요한가요?
설명한 MDS는 특징이나 비유사도 행렬로 좌표를 구하며 fit의 y는 사용하지 않습니다. 기존 라벨로 점의 색을 정하는 해석과 좌표 학습을 구분합니다. 라벨을 쓰지 않아도 전체 평가 자료를 포함한 탐색과 독립적인 예측 검증은 같은 실험이 아닙니다.
Q2. 계량 MDS는 유클리드 거리만 입력하나요?
계량은 비유사도의 수치 크기를 맞추려는 목적을 가리킵니다. 확인한 MDS의 metric은 입력 거리를 정하는 별도 인자입니다. 이미 계산한 비유사도도 넣을 수 있지만 결과 좌표에서 잰 거리는 유클리드 거리이며 모든 입력 관계의 완벽한 표현을 보장하지 않습니다.
Q3. 비계량 방식은 비유사도의 순서를 완벽히 지키나요?
입력 순서를 반영하는 단조 변환과 좌표를 함께 맞추려는 방식입니다. 적은 차원과 자료의 제약, 계산 종료 때문에 모든 쌍의 순서가 항상 일치한다고 단정하지 않습니다. 원본 순서와 출력 거리의 어긋난 관계를 따로 살핍니다.
Q4. 스트레스가 0이면 AI가 정확하다는 뜻인가요?
선택한 방식과 입력 관계에서 표현 오차가 없다는 의미입니다. 분류 정확도나 사람 평가의 진실성을 뜻하지 않습니다. 원시 값인지 Stress-1인지 확인하고 사용한 비유사도의 적절성과 개별 사례를 함께 검토합니다.
Q5. 고전적 MDS 초기화를 쓰면 고전적 MDS 결과인가요?
MDS에서 고전적 초기화를 선택하면 그 좌표를 시작점으로 이후 SMACOF를 수행합니다. 별도 ClassicalMDS로 고전적 풀이만 수행하는 것과 다릅니다. 최종 손실과 좌표를 어떤 알고리즘이 계산했는지 구분합니다.
Q6. 새 사례를 기존 지도에 바로 넣을 수 있나요?
확인한 scikit-learn MDS에는 새 사례용 transform이 없습니다. fit_transform을 다시 호출하면 전체 입력의 좌표를 새로 맞춥니다. 기존 지도 고정과 신규 변환이 필요한 업무라면 별도의 검증된 처리 경로를 마련합니다.
출처
마무리
다차원 척도법은 사례 사이의 비유사도를 좌표의 거리로 나타내는 방법입니다. 계량 방식의 수치 크기, 비계량 방식의 순서, 고전적 방식의 내적 행렬 표현을 구분하면 같은 이름 아래 다른 결과를 더 정확히 읽습니다.
처음에는 작은 거리표에서 사례 순서와 0값의 뜻부터 확인하세요. 같은 입력으로 차원과 초기화를 비교하고 스트레스 종류와 원본 사례를 남깁니다. 출력 축의 이름이나 보기 좋은 그림보다 거리의 의미와 실제 왜곡을 확인하는 것이 마지막 점검입니다.
