4. Dimensionality Reduction & t-SNE

Eunji·2025년 12월 11일

1. Dimensionality Reduction

1.1 Curse of Dimensionality

  • BOW 기반의 문서 분류와 같은 문제에서 차원은 문서의 표현에 사용된 특성 수
    • 특성 수가 매우 커서 기본적으로 차원의 저주 같은 문제를 내포
  • 차원이 구성하는 공간의 크기가 커져서 데이터 간의 거리가 너무 멀게 위치
  • 데이터가 희박해지면 모형의 설명력이 일반적으로 떨어짐

Solution

  1. 충분히 많은 데이터 확보
    • 현실적으로 어려울 때 많음
  2. 특성의 수를 줄여서 차원 축소
    • 특성 선택: 현재 특성들 중에서 대표 특성 선택(e.g., Lasso)
    • 특성 추출: 기존 특성들의 선형 결합으로 이루어진 새로운 특성 추출(e.g., PCA, LSA)

1.2 PCA(Principal Component Analysis)

  • 데이터의 분산을 최대한 보존하는 새로운 축을 찾아 변환함으로써 차원 축소
  • 차원을 줄이는 과정에서 정보가 최대한 유지되도록
    • 그림 2 방향에서 가장 분산이 작고, 3의 방향에서 분산이 가장 큼
    • 점들이 넓게 분포할 때 정보량이 가장 많으므로 3번 방향으로 축소하는 것이 바람직

PCA는 가장 정보량이 큰 축을 찾아 단계적으로 차원을 축소하는 방식 \rightarrow 정보 손실 최소화

1. Stopwords 처리, PorterStemmer 추가

  • 전처리를 위한 my_tokenizer()
    • 토큰화, 불용어처리, 스테밍

2. TF-IDF 특성 벡터 변환

  • 차원 축소의 영향력을 확인하기 위해 토큰화 외에 아무것도 적용 안 함

3. Logistic Regression

  • 차원 축소 전 로지스틱 회귀 분석
  • 향후 차원 축소를 한 결과와 비교해서 성능 변화 탐지
  • 특성 선택, 특성 추출 방법에 따라 어떻게 성능이 변화하는지 확인
  • sklearn.decomposition.PCA
  • n_components: 축소할 차원 크기 지정
  • explained_variance: 각각의 새로운 차원이 설명하는 분산
  • explainedvariance_ratio: 각각의 새로운 차원이 설명하는 분산 비율
  • fit_transform: PCA 변환을 위한 학습 및 변환 수행
  • transform: 학습된 값을 이용해 PCA 변환

일반적으로 특성 선택은 PCA를 이용한 특성 추출이 Lasso Regression보다 잘 나옴

1.3 LSA(Latent Semantic Analysis)

  • 문서들에 잠재된 의미를 분석하고 동시에 단어들에 잠재된 의미도 분석
  • 잠재 의미는 문서와 단어를 연결하는 매개체, 축소된 차원이 잠재 역할
  • Truncated SVD로 구현
    • 대각원소(특이값) 가운데 상위 t개만 골라낸 형태
    • 행렬 A를 원복할 수 없게 되지만, 데이터 정보를 상당히 압축했음에도 행렬 A 근사

SVD(Singular Value Decomposition)

  • 주어진 DTM(document, term matrix, A)을 A=UVTA = U \sum V^T의 형태로 분해
  • document 수: m
  • term 수: n

Truncated SVD를 이용한 차원 축소

  • \sum 행렬
    • 차원 축소의 핵심
    • 가장 정보량이 많은 축이 위에 있고, 아래로 갈수록 점차 정보량이 작아짐 \rightarrow 텍스트 분석에 조금 더 적합한 차원 축소 방법(vs PCA)
    • Truncated SVD에서는 \sum의 대각 원소(특이값) 가운데 상위 t개만 골라냄
    • 즉, t는 잠재 의미 중에서 비중이 큰 것부터 차례대로 골라낸 것.
  • A'은 축소는 UU, \sum, VV로 복원한 값으로, A에 근사한 값

1.4 DTM

  • 문서 단어 행렬
  • 각 단어는 고유한 정수 인덱스를 가지며, 해당 단어가 등장 횟수를 해당 인덱스의 값으로 가짐
    • 고유한 정수로 mapping
  • 띄어쓰기 단위 토큰화를 수행한다고 가정
    • 각 문서에서 등장한 단어의 빈도를 행렬의 값으로 표기

구현

corpus는 토큰화되지 않은 문장들에 해당한다. 실행 결과 문서 4개 단어 9개인 것을 확인할 수 있다.

  • sklearn.decomposition.TruncatedSVD
  • n_components: 축소할 차원 크기 t
  • singularvalues: t\sum^t, 대각원소만으로 구성된 벡터
  • components_:VtTV_t^T, 축소된 차원을 행으로 하고 특성벡터(단어)를 열로 하는 벡터
  • fit_transform(XX):UttU_t \sum_t 반환, 즉 XX에 대해 TruncatedSVD를 수행한 결과를 이용해 XX를 t차원으로 축소한 행렬
  • transform(XX): XVtXV_t를 반환, 즉 학습 과정에서 생성한 VtV_t의 전치행렬을 주어진 XX에 곱함으로써 t차원으로 축소한 행렬 반환

1.5 Cosine Similarity

  • 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도
    • 두 벡터의 방향이 완전한 동일한 경우(0도)에는 1
    • 90도의 각을 이루면 0
    • 180도로 반대의 방향을 가지면 -1
  • 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단
  • 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미

LSA를 이용한 의미 기반의 문서 간 유사도

  • 모두 원본 문서와 동일한 카테고리 \rightarrow 의미적인 유사성이 작동
  • CountVector 및 TF-IDF 벡터와 비교
    • 차원이 적기 때문에 상대적으로 더 적은 공간에 문서들 위치
    • 이로 인해 거리에 기반한 작업, 클러스터링 및 시각화에서 더 유리

2. t-SNE

  • 시각화를 위해 사용되는 비지도 학습 알고리즘
  • 다차원 데이터 사이의 거리를 가장 잘 보존하는 2차원 좌표를 찾기 위해 사용

t-SNE를 이용한 시각화

  • t-SNE를 이용해 그린 그래프에서 모양이 좋게 나타나면 원래의 다차원 데이터 간의 거리도 의미 있게 잘 계산된다고 할 수 있음
  • 각각 x, y 좌표에 해당하는 2차원으로 차원을 축소 후 그래프를 그림

t-SNE를 이용한 시각화 준비

  • 크기 제한 없이 전체 특성 벡터를 다 사용하기 위해 새롭게 TF-IDF 특성벡터를 생성
  • 시각화가 목적이므로 학습 데이터셋만 변환하여 사용
  • TSNE 패키지를 이용하여 2차원으로 축소한 후 차원 확인

label, 즉 카테고리 간의 구분 없이 고르게 분포된다.

LSA를 이용한 차원 축소

  • 차원 축소 후의 t-SNE 결과
  • 1,2는 비교적 잘 구분이 되고, 0,3 카테고리는 겹치는 경향 존재
  • 0,3은 atheism, religion으로 우리말로는 각각 무신론과 종교
    • 따라서 내용 상으로 겹치는 부분이 있을 가능성 존재
profile
갓생호소인

0개의 댓글