2024.12.10 비지도학습 - 차원축소(피드백 반영완료)

SMALL

 

1. 비지도 학습(Clustering & Dimensionality Reduction) 

  • 지도학습은 정답을 알려주며 학습하는 방식이고,
  • 비지도학습은 정답 없이 스스로 데이터의 패턴을 찾는 방식
  • 대표적인 방법:
    - 클러스터링(Clustering): 비슷한 데이터끼리 그룹화
    - 차원 축소(Dimensionality Reduction): 데이터의 특성을 보존하면서 데이터의 차원을 줄이는 방법

지도학습과 비지도학습의 비전공자도 이해할 수 있는 예시 설명 :

더보기

1. 지도학습 (Supervised Learning)

  •  정답을 알고 학습
  •  마치 선생님이 학생에게 문제를 내고, 그에 대한 정답을 알려주는 것과 같다.
  •  데이터에는 입력(문제)과 출력(정답)이 함께 포함되어 있다.
  •  목표 : 정답을 예측하거나 분류하는 모델을 만드는 것.

예시

과일 구분하기

  • 문제 : 다양한 과일의 사진과 각 사진에 어떤 과일인지 적힌 라벨(사과, 바나나 등)이 있음.
  • 학습 : 모델은 사진(입력)과 라벨(정답)을 보고 학습하며, 사과와 바나나를 구분하는 법을 배움.
  • 결과 : 새로운 사진을 보여주면 모델이 어떤 과일인지 예측함.

 

대표적인 사용 사례

  • 이메일 스팸 필터링 (스팸/정상 여부를 학습)
  • 질병 진단 (증상 → 병명을 예측)
  • 판매량 예측 (과거 데이터 → 미래 판매량 예측)

2. 비지도학습 (Unsupervised Learning)

  • 정답 없이 학습
  • 선생님이 없고, 학생이 스스로 데이터를 보고 패턴이나 그룹을 찾는 것과 같다.
  • 데이터에는 입력(문제)만 있고, 정답(라벨)은 없다.
  • 목표 : 데이터 안에 숨겨진 구조나 유사성을 발견하는 것.

예시

취향에 따라 영화 추천하기

  • 문제 : 사람들이 본 영화 목록만 주어짐. (좋아하는지 여부는 모름)
  • 학습 : 사람들 간의 취향 패턴을 분석해서 비슷한 취향의 그룹을 찾음.
  • 결과 : 같은 그룹에 속한 사람이 좋아한 영화를 추천함.

대표적인 사용 사례

  • 고객 세분화 (비슷한 소비 패턴의 고객 그룹 찾기)
  • 이상치 탐지 (정상 데이터와 다른 특이한 데이터 탐지)
  • 데이터 압축 (이미지나 텍스트 데이터 간소화)

 표로 비교

구분 지도학습 비지도학습
라벨 존재 여부 라벨(정답) O 라벨(정답) X
목적 예측 및 분류 그룹화 및 패턴 발견
예시 과일 이름 맞히기, 스팸 필터링 취향 기반 영화 추천, 고객 세분화

 

 

2. 차원 축소의 필요성 

  • 데이터의 시각화: 사람이 데이터를 이해하려면 2D나 3D로 보통 시각화를 하는데 차원이 높아지면 표현하기 어려움.
  • 과적합 방지: 너무 많은 특성은 모델이 과적합(overfitting)되는 원인이 될 수 있는데 차원 축소는 이 문제를 해결할 수 있음.
  • 차원 문제: 많은 데이터에서 특성(Feature)의 수가 많을수록 계산이 복잡해지고 시각화가 어려워지기 때문에 차원 축소 후 모델링 성능 향상

특성의 예시 :

더보기

특성의 예시

  • 영화 데이터:
    영화 제목, 감독, 장르, 상영 시간, 평점 등이 특성이 될 수 있다.
    예를 들어, 평점이 높을수록 흥행 가능성이 크다는 것을 알고 싶다면, '평점'이 중요한 특성이다.
  • 학생 성적 데이터:
    이름, 나이, 과목별 점수, 출석 일수 등이 특성으로 사용될 수 있다.
    "수학 점수와 출석 일수가 학생의 평균 성적에 어떤 영향을 미칠까?"라는 분석에서 '수학 점수'와 '출석 일수'가 특성이다.
  • 쇼핑몰 고객 데이터:
    고객 ID, 구매 횟수, 총 구매 금액, 마지막 구매 날짜 등이 특성이다.
    "고객의 구매 금액에 따라 VIP 고객을 예측하고 싶다"면 '총 구매 금액'이 중요한 특성이다.

 

 

3. 차원 축소의 대표적인 기법들 

1. PCA ( 주성분 분석 , Principal Component Analysis):

  • 데이터의 분산을 최대한 보존하는 방식으로 차원을 축소.
  • 데이터를 선형적으로 변환하여 가장 중요한 특성(주성분)을 뽑아냄.
    예시: 얼굴 인식, 텍스트 분석 등에서 많이 사용됨.
 

2. t-SNE (t-Distributed Stochastic Neighbor Embedding):

  • 비선형 차원 축소 기법으로, 데이터의 지역적 구조를 잘 보존.
  • 데이터 간의 비슷한 관계를 잘 유지하며 2D나 3D로 시각화하기에 적합.
 

3. UMAP (Uniform Manifold Approximation and Projection):

  • t-SNE와 유사하지만 t-SNE보다 더 빠르다.
  • 비선형 차원 축소로 데이터의 구조를 보존하면서 차원을 축소.

 

4. 차원 축소 예시

 위  3가지 기법을  유방암 데이터셋을 사용하여 알아보자.

load_breast_cancer는 30개의 특성을 가진 유방암 데이터로, 악성(0)과 양성(1) 두 가지 클래스로 구성되어 있다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import umap.umap_ as umap

# 1. 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.target
labels = data.target_names

# 2. PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 3. t-SNE
tsne = TSNE(n_components=2, random_state=42, perplexity=30, n_iter=1000)
X_tsne = tsne.fit_transform(X)

# 4. UMAP
reducer = umap.UMAP(n_components=2, random_state=42)
X_umap = reducer.fit_transform(X)

# 5. 시각화
fig, axes = plt.subplots(1, 3, figsize=(18, 6), dpi=100)

# PCA
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='coolwarm', s=10)
axes[0].set_title("PCA")
axes[0].set_xlabel("PC1")
axes[0].set_ylabel("PC2")

# t-SNE
axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='coolwarm', s=10)
axes[1].set_title("t-SNE")
axes[1].set_xlabel("Dimension 1")
axes[1].set_ylabel("Dimension 2")

# UMAP
axes[2].scatter(X_umap[:, 0], X_umap[:, 1], c=y, cmap='coolwarm', s=10)
axes[2].set_title("UMAP")
axes[2].set_xlabel("Dimension 1")
axes[2].set_ylabel("Dimension 2")

plt.tight_layout()
plt.show()

 

코드 풀이 : 

더보기

1. 데이터 로드

from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
X = data.data  # 입력 데이터 (특성 행렬)
y = data.target  # 출력 라벨 (0=악성, 1=양성)
labels = data.target_names  # 클래스 이름 ("malignant", "benign")
  • 유방암 데이터셋은 30개의 수치형 특성(예: 평균 반지름, 질감, 둘레, 면적 등)과 2개의 클래스(악성, 양성)로 이루어져 있다.
  • 데이터 특성이 고차원(30차원)이므로 시각화하기 어렵기 때문에 PCA, t-SNE, UMAP을 사용해 저차원(2D)으로 축소해 분석하겠다는 코드.

 

2. PCA (Principal Component Analysis)

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
  • PCA는 고차원 데이터를 선형 변환하여 데이터의 분산(정보량)을 가장 잘 보존하는 축을 찾는다.
  • 30차원의 데이터를 2차원으로 축소했으며, PC1, PC2는 가장 중요한 두 개의 주성분(Principal Components)을 나타낸다.
  • PCA의 결과는 데이터의 **전반적인 분포(클러스터링 경향)**를 확인하기에 적합합니다. 하지만 클래스 경계가 명확하지 않을 수 있다.

 

3. t-SNE (t-Distributed Stochastic Neighbor Embedding)

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, random_state=42, perplexity=30, n_iter=1000)
X_tsne = tsne.fit_transform(X)
  • t-SNE는 비선형 차원 축소 기법으로, 데이터 간 거리(이웃 관계)를 보존하는 데 초점을 둔다.
  • 고차원의 데이터를 저차원 공간에서 시각화하기 좋지만, 분산(정보량)을 보존하지는 않는다.
  • perplexity: 데이터 밀도를 조절하는 하이퍼파라미터로, 클수록 전반적인 분포를, 작을수록 국소적인 구조를 강조한다.
  • t-SNE는 클래스 경계와 클러스터링이 명확히 드러나는 경우가 많으나, 결과가 반복되지 않을 수 있다.

  

4. UMAP (Uniform Manifold Approximation and Projection)

import umap.umap_ as umap

reducer = umap.UMAP(n_components=2, random_state=42)
X_umap = reducer.fit_transform(X)
  • UMAP은 t-SNE와 유사한 비선형 차원 축소 기법이지만, 속도가 빠르고 더 구조적인 표현을 제공.
  • UMAP의 특징:
    1) 전역(global) 구조와 지역(local) 구조를 동시에 보존.
    2) 대규모 데이터에 적합.
    3) t-SNE보다 재현성이 좋음 (같은 매개변수로 비슷한 결과 생성).

 

 5. 시각화

# PCA
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='coolwarm', s=10)
axes[0].set_title("PCA")

# t-SNE
axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='coolwarm', s=10)
axes[1].set_title("t-SNE")

# UMAP
axes[2].scatter(X_umap[:, 0], X_umap[:, 1], c=y, cmap='coolwarm', s=10)
axes[2].set_title("UMAP")

 

  • 각 차원 축소 방법을 사용한 결과를 2D 평면에 시각화한다.
  • 색상(c=y)은 클래스 라벨(악성=0, 양성=1)을 나타내며, 데이터가 어떻게 분포되는지 비교한다.

 

 

위 코드를 코랩을 이용하여 이런식으로 구현하면 된다.

 

 

왼쪽부터 PCA , t-SNE, UMAP의 시각화

표읽는법(대본에 있던 것) :

더보기

결과값을 보면 악성은 파란색, 양성은 빨간색으로 표현되었습니다.

 

피씨에이의 결과를 보면 빨간색(양성) 점들은 대부분 (0, 0) 부근에 밀집되어 있습니다.

이는 PCA가 분산을 기준으로 데이터를 변환했을 때, 양성 데이터가 비교적 좁은 범위에 분포한다는 뜻입니다.

 

파란색(악성) 점들은 양성 데이터에서 오른쪽(양의 방향)과 위쪽(양의 PC2 방향)으로 퍼져 있는 형태입니다.

악성 데이터는 분산이 더 크며, PC1 축을 따라 멀리 퍼져 나가는 경향이 있습니다.

이는 악성 데이터가 양성 데이터보다 다양한 특성을 가지고 있다는 것을 나타냅니다.

 

정리하면,

빨간색(양성) 데이터는 PCA 상에서 작은 영역에 집중되어 있으며, 악성 데이터와 구분되는 특성을 가집니다.

파란색(악성) 데이터는 넓은 영역에 퍼져 있으며, 양성 데이터와 어느 정도 겹치기도 하지만, 전체적으로 더 큰 분산을 가집니다.

악성 데이터는 주로 PC1(수평 방향)의 오른쪽으로 확장된 분포를 보이며, 이는 PC1이 악성 데이터의 중요한 특징을 설명하고 있다는 것을 시사합니다.

 

다음으로 티에센이의 경우

양성(빨간색)은 그래프의 왼쪽에서 위쪽 곡선 형태로 밀집되어 있습니다.

악성(파란색)은 그래프의 오른쪽으로 밀집되어 있으며, 양성과 명확히 분리되는 경향을 보입니다.

이는 t-SNE가 양성과 악성 데이터를 비선형적으로 분리했음을 의미합니다.

 

데이터 전체가 곡선 형태로 분포되어 있고 이것는 고차원 공간에서 데이터가 비선형적으로 연결되어 있음을 나타냅니다. 양성과 악성 데이터가 서로 인접하지만, 전반적으로 다른 영역에 위치한다는 것을 보여줍니다.

 

곡선의 중간 부분에서 빨간색(양성)과 파란색(악성)이 약간 섞여 있습니다.

이는 일부 데이터가 양성과 악성 간 경계에 위치하며, 두 클래스의 특성이 일부 겹칠 수 있음을 암시합니다.

 

마지막으로 유맵의 경우

t-SNE와 유사한 경향을 보이지만 더 구조적인 결과 제공합니다.

그리고 t-SNE보다 클래스 경계와 데이터 밀도를 더 잘 반영하는 모습을 볼 수 있습니다.

 

5. 결과 값 비교

  1. PCA
    • 분산을 기준으로 가장 중요한 두 축으로 데이터를 표현.
    • 클래스 간 경계가 불분명할 수 있음.
    • 데이터 전반적인 분포와 주요 방향성을 파악하는 데 유리.
    • 특징: 악성과 양성의 중심 방향성을 확인할 수 있지만, 두 클래스가 혼합되어 보일 가능성.
  2. t-SNE
    • 클래스 간 경계가 명확히 드러나며, 데이터가 작은 클러스터로 분리됨.
    • 클래스 내부 구조를 강조하므로, 고차원의 국소적 특징을 저차원으로 잘 보존.
    • 특징: 악성 데이터와 양성 데이터가 명확히 나뉘며, 세부적인 데이터 군집이 드러남.
  3. UMAP
    • t-SNE와 유사한 경향을 보이지만, 더 구조적인 결과 제공.
    • t-SNE보다 클래스 경계와 데이터 밀도를 더 잘 반영.
    • 특징: 데이터 간 관계를 자연스럽게 표현하며, 큰 구조와 세부 구조를 동시에 관찰 가능.

 

6. PCA, t-SNE, UMAP의 특징 비교

기법 PCA t-SNE UMAP
특징 선형 차원 축소, 분산 최대화 비선형 차원 축소,
데이터의 군집 보존
비선형 차원 축소,
전반적 구조 보존
장점 빠르고 효율적, 직관적 국소적 구조 잘 보존,
군집화 시각화에 강점
t-SNE와 유사하지만 계산 속도가 빠르고  확장성이 뛰어남,
대규모 데이터셋에서도 잘 작동
단점 비선형 관계는 잘 반영되지 않음 계산 속도 느림,
대규모 데이터에 비효율적
t-SNE보다 군집이 덜 직관적일 수 있음
사용목적 데이터 분산 보존 데이터 군집 시각화 데이터 군집 시각화,
대규모 데이터

 

 

 

끗 !

 

 


오늘까지 머신러닝을 완강하고 스터디 나눔회를 시작하기로 하였다.

젭을 돌아다니면서 어제부터 홍보하고 다녀서 원래 팀원보다 찔끔 더 많아질지 알았느데, ,,,!

튜터님까지 초빙해서 발표회를 할줄이야.... 손에서 땀이 줄줄이었다.

그래도 어떤 설명이 부족한지, 그리고 어떤식으로 공부해야할지 피드백을 들을 수 있어서 너무 좋았다.

보충할 내용은 좀 더 정리해서 수정했다.

 

오늘부터 시작된 스터디 발표회

 

 

팀원들이 발표 후 뿌듯했는지 매일 공부한걸 간단히 발표회 형식으로 나누자고 해서

아마 저녁마다 오늘 공부한 것에 대해 간단한 발표회를 할 것 같다.

오늘 같은 본격적인 발표는 아마 완강 찍을 때 또 하게 되지 않을까?

LIST