지도 학습 vs 준지도 학습 vs 비지도 학습
지도 학습
타겟 데이터 (label)가 있는 경우
예시: A와 B 명확히 나누기
준지도 학습
일부 데이터만 타겟(label)이 존재
예시: 정상으로 분류된 데이터를 기준으로 이상치를 구분
비지도 학습
타겟(label) 없이 데이터의 유사성을 기준으로 패턴을 찾음
예시: 유사한 것들끼리 군집화
비지도 학습 특징
학습시 x만 사용
- x안에서 패턴 인식 문제
후속 작업 필요(비지도 학습으로 끝나지 않는다)
- 차원축소 - 고차원 데이터를 축소하여 새로운 feature를 생성 -> 시각화, 지도학습 연계
- 클러스터링 - 고객별 군집 생성 -> 고객 집단의 공통 특성 도출을 위한 추가 분석
- 이상탐지 - 정상 데이터 범위 지정 -> 범위 밖 데이터를 이상치로 변경
차원축소
변수가 너무 많아서 차원이 너무 많아지면?
차원의 저주가 시작된다...
차원의 저주란?
고차원 데이터 공간에서 발생하는 여러 가지 문제를 말합니다. 변수(특징)를 계속 추가하면 데이터의 차원이 늘어나는데, 이로 인해 데이터가 희박해지고, 머신러닝 모델의 성능이 저하되는 현상이 발생합니다.
차원의 저주가 발생하는 이유
- 데이터가 공간에 균일하게 분포되지 않음
- 차원이 높아질수록 데이터가 더 넓은 공간에 분포하게 되며, 각 데이터 간의 거리가 멀어짐.
- 즉, 데이터가 서로 희박하게 흩어지기 때문에 패턴을 찾기가 어려워집니다.
- 데이터의 양에 비해 변수(차원)가 너무 많아짐
- 고차원에서는 데이터 포인트가 충분하지 않으면 학습이 어려워지고 과적합(Overfitting) 위험이 커집니다.
- 예를 들어, 100차원 공간에 100개의 데이터 포인트가 있다면, 각 포인트는 거의 고유한 위치에 있게 됩니다.
- 유사한 데이터끼리도 멀어짐
- 차원이 증가할수록 두 점 사이의 거리(유클리드 거리)가 커지고, 데이터의 유사성 측정이 부정확해짐.
- 머신러닝 알고리즘(특히 K-평균, K-NN)에서 거리를 기반으로 한 분류나 군집화가 어려워짐.
차원의 저주가 초래하는 문제
- 모델 성능 저하
- 데이터가 희박해지면 모델이 패턴을 잘 학습하지 못하고 예측 성능이 떨어짐.
- 과적합의 가능성이 커지며, 학습 데이터 외부의 데이터에 대해 일반화 성능이 낮아짐.
- 학습 속도 저하
- 차원이 증가할수록 계산 복잡도가 기하급수적으로 늘어남.
- 더 많은 메모리와 연산이 필요하며, 학습 시간도 오래 걸림.
- 거리 기반 알고리즘의 성능 악화
- K-평균, K-NN과 같은 거리 기반 알고리즘에서 데이터가 희박해지면 의미 있는 군집이나 분류를 하기 어려움.
- 두 데이터 간의 거리 차이가 작아지거나 무의미해질 수 있음.
차원축소 방법
PCA, t-SNE, Autoencoder 등이 잇다!!
PCA
iris = pd.read_csv("")
target = 'Species'
x = iris.drop(target, axis = 1)
y = iris.loc[:, target]
scaler = MinMaxScaler()
x2 = scaler.fit_transform(x)
# (옵션)데이터프레임 변환
x2 = pd.DataFrame(x2, columns= x.columns)
from sklearn.decomposition import PCA
# feature 수
x2.shape[1]
# 주성분 수 2개
n = 2
pca = PCA(n_components = n)
# 만들고, 적용하기(결과는 넘파이 어레이)
x2_pc = pca.fit_transform(x2)
# 2개의 주성분
x2_pc[:5]
# (옵션) 데이터프레임으로 변환
x2_pc = pd.DataFrame(x2_pc, columns = ['PC1', 'PC2'])
x2_pc.head()
#기존 데이터에 차원 축소된 데이터를 붙여 봅시다
pd.concat([iris, x2_pc], axis = 1).head()
#두개의 주성분 시각화
sns.scatterplot(x = 'PC1', y = 'PC2', data = x2_pc, hue = y)
plt.grid()
plt.show()
냅다 코드 뿌리기 사실 이해잘 안감
1. PCA (주성분 분석) – 차원 축소
- 데이터를 압축해서 중요한 정보만 남기고 덜 중요한 정보는 버리는 거예요.
(예: 여러 변수 중에서 몇 개 중요한 것만 고르기) - 왜 필요할까요? 고차원 데이터(변수가 많을 때)를 줄여서 더 쉽게 분석하고, 처리 속도를 빠르게 하려고요!
예시:
사진에 있는 수십 가지 색깔 정보(빨강, 초록, 파랑, 밝기 등)를 단 2~3가지 색 정보로 줄여서 분석하면 훨씬 간단하겠죠?
2. Elbow Method (엘보우 방법) – 최적의 군집 개수 찾기
- 데이터를 여러 그룹으로 나눌 때, "몇 개의 그룹(K)이 적당할까?"를 찾는 방법이에요.
- 그래프를 그려보면, 군집 개수를 늘릴수록 **안쪽 거리(WCSS)**가 줄어드는데, 어느 순간부터 더 늘려도 큰 차이가 없어져요.
→ **이 변곡점(엘보우 모양)**이 최적의 K 값이에요!
PCA와 Elbow Method가 함께 쓰일 때
- PCA로 데이터 차원을 줄임:
- 차원이 너무 많으면 K-means 군집화가 어려워지니까, PCA로 차원을 줄여서 중요한 정보만 남겨요.
- 예를 들어, 100차원의 데이터를 2~3차원으로 줄이면 군집화가 훨씬 빠르고 정확해져요.
- Elbow Method로 최적의 군집 수(K)를 찾음:
- 줄인 데이터를 가지고 K-means로 그룹을 나눠요.
- Elbow Method로 **"몇 개로 나누는 게 좋을까?"**를 정해요.
쉽게 요약
- PCA: 복잡한 데이터를 줄여서 더 간단하게 만든다! (예: 100차원 → 3차원)
- Elbow Method: 나눈 그룹이 몇 개가 적당한지 찾는다! (예: 2개? 3개? 5개?)
→ 연결점:
PCA로 차원을 줄인 후, Elbow Method를 사용해 **적당한 그룹 수(K)**를 찾으면 데이터 분석이 훨씬 효율적이 됩니다!
비유로 이해하기 🎨
- PCA: 여러 색깔의 물감을 섞어서 주요 색 2~3개로 정리하기!
- Elbow Method: 이 색깔들로 몇 개의 그림 그룹을 나누는 게 적당한지 정하기!
이렇게 하면 데이터 분석도 깔끔하고 빠르게 할 수 있어요. 😄