정의: 정답 레이블(Label)이 없는 데이터를 기반으로 데이터 내 숨겨진 구조, 패턴, 관계를 자동으로 학습하는 방법론
목적: 데이터 속 숨겨진 특성을 찾아내는 것 (예: 고객 세분화, 이상 탐지, 시각화, 패턴 분석 등)
✅ 장점
정답 데이터 불필요 → 레이블링 비용 및 시간 절약
통찰력 확보: 데이터 구조나 패턴을 탐색하여 인사이트 도출
범용성: 다양한 유형 및 고차원 복잡 데이터에 적용 가능
❌ 단점
결과 해석의 어려움: 의미 부여는 사람이 해야 하는 경우 많음
평가 지표 부족: 성능의 객관적 평가가 어려움
노이즈 민감성: 데이터의 잡음에 민감하게 반응할 수 있음
2. 📊 비지도학습의 대표 과제 (문제 유형)
① 📌 군집화 (Clustering)
정의: 데이터를 유사한 특성에 따라 하위 그룹(Cluster)으로 나누는 작업
목적: 데이터 간 유사성을 바탕으로 자연스러운 그룹 발견
활용 예시:
고객을 충성/일반/잠재 고객 등으로 나누기
유사한 텍스트/이미지를 묶기
② 📉 차원 축소 (Dimensionality Reduction)
정의: 고차원 데이터를 저차원으로 축소하여 핵심 정보는 유지하고 노이즈는 제거
목적:
시각화 용이
계산 효율성 증가
데이터 구조 간소화
활용 예시:
100개 특성 중 주요한 2~3개로 줄여 그래프로 표현
데이터 압축 및 정보 요약
③ 🚨 이상 탐지 (Anomaly Detection)
정의: 일반적인 데이터 패턴과 크게 벗어나는 이상치 탐색
목적:
보안, 금융, 의료 등에서 비정상 데이터 탐지
활용 예시:
계좌 해킹 시도 탐지
의료 영상에서 이상 조직 탐색
1. 🧩 군집화 (Clustering) 알고리즘
✅ K-평균 (K-Means)
데이터를 사용자가 지정한 K개의 군집으로 분할
각 군집의 중심(centroid)을 기준으로 반복적으로 업데이트
데이터 포인트를 가장 가까운 중심에 할당하여 군집화
💡 장점: 단순하고 빠름
❗ 단점: K값 사전 지정 필요, 이상치에 민감
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 데이터 생성
X, _ = make_blobs(n_samples=300, centers=3, random_state=42)
# 모델 학습
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
# 예측 및 시각화
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
s=200, c='red', marker='X')
plt.title('K-Means Clustering')
plt.show()
✅ 계층적 군집화 (Hierarchical Clustering)
각 데이터를 하나의 클러스터로 시작 → 유사한 클러스터끼리 병합
트리 형태의 덴드로그램(Dendrogram)으로 표현
💡 장점: 군집 수를 몰라도 시작 가능
❗ 단점: 대용량 데이터엔 비효율적
✅ DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
밀도 기반으로 클러스터 형성
고밀도 영역은 클러스터로, 저밀도 영역은 이상치로 간주
💡 장점: 이상치 자동 감지, 비선형 구조에 강함
❗ 단점: 파라미터 선택 민감 (eps, minPts)
2. 🔻 차원 축소 (Dimensionality Reduction) 알고리즘
✅ 주성분 분석 (PCA, Principal Component Analysis)
데이터의 분산이 큰 방향을 찾아 그 축을 기준으로 투영
고차원 데이터를 낮은 차원으로 변환하면서 정보 손실 최소화
💡 활용: 시각화, 전처리, 특징 추출
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import seaborn as sns
import pandas as pd
# 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target
# PCA 적용
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 결과 시각화
df = pd.DataFrame(X_pca, columns=["PC1", "PC2"])
df['target'] = y
sns.scatterplot(data=df, x="PC1", y="PC2", hue="target", palette="Set2")
plt.title("PCA on Iris Dataset")
plt.show()