데이터전처리

데이터 전처리 기법: Autoencoder를 활용한 차원 축소 및 특징 추출

8353cc 2025. 4. 16. 11:05
반응형
Autoencoder를 활용한 차원 축소 및 특징 추출

Autoencoder를 활용한 차원 축소 및 특징 추출

1. 개념

Autoencoder는 입력 데이터를 압축한 뒤 다시 복원하는 비지도 신경망입니다. Encoder → Latent Space → Decoder 구조로 구성됩니다.

✅ 목표: 입력과 복원 데이터의 차이를 최소화하면서 중요한 특징만 추출하는 것

2. 적용 방법

목적설명
차원 축소고차원 데이터를 중요한 정보만 남기고 축소
특징 추출Encoder의 Latent Output을 새로운 Feature로 활용

3. 실무 코드 (PyTorch)

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset

X = torch.rand(1000, 100)

class Autoencoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Linear(100, 64), nn.ReLU(),
            nn.Linear(64, 32), nn.ReLU(),
            nn.Linear(32, 10)
        )
        self.decoder = nn.Sequential(
            nn.Linear(10, 32), nn.ReLU(),
            nn.Linear(32, 64), nn.ReLU(),
            nn.Linear(64, 100), nn.Sigmoid()
        )
    def forward(self, x):
        latent = self.encoder(x)
        output = self.decoder(latent)
        return output, latent

model = Autoencoder()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
loader = DataLoader(TensorDataset(X, X), batch_size=64, shuffle=True)

for epoch in range(20):
    for x_batch, _ in loader:
        optimizer.zero_grad()
        output, _ = model(x_batch)
        loss = criterion(output, x_batch)
        loss.backward()
        optimizer.step()

with torch.no_grad():
    _, latent_features = model(X)

4. 장단점

구분내용
장점비선형 구조 학습, 노이즈 제거, 복잡한 데이터에 유리
단점학습 시간 필요, 과적합 위험, 구조 설계 필요

5. 기대 효과

  • 복잡한 고차원 데이터의 효과적 압축
  • PCA보다 우수한 비선형 특징 보존
  • 클러스터링이나 분류 전 처리로 활용

6. 사용 시기

상황설명
고차원 이미지, 텍스트ResNet, BERT 출력 압축 시
노이즈 제거Denoising Autoencoder로 활용
클러스터링 전 처리Latent space를 KMeans 등에 활용

7. 실무 팁

  • BatchNorm, Dropout으로 안정적 학습 유도
  • 과적합 방지를 위한 EarlyStopping 활용
  • Latent Vector 분포 시각화로 검증

8. 응용 코드: Autoencoder + KMeans

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

with torch.no_grad():
    _, z = model(X)

kmeans = KMeans(n_clusters=5)
labels = kmeans.fit_predict(z.numpy())

pca = PCA(n_components=2)
z_2d = pca.fit_transform(z.numpy())

plt.scatter(z_2d[:, 0], z_2d[:, 1], c=labels, cmap='rainbow')
plt.title("Autoencoder 기반 KMeans 시각화")
plt.show()

9. 요약

항목내용
목적고차원 비정형 데이터 압축 및 특징 추출
구성Encoder → Latent → Decoder
활용클러스터링, 이상 탐지, 시각화 등
비교PCA(선형)보다 유연함
반응형