Table of Contents

728x90

데이터 변환 (data transformation)

데이터 변환(data transformation)은 원본 데이터를 분석, 모델링 또는 다른 작업을 위해 더 적합하게 만드는 일련의 작업을 의미합니다. 데이터 변환은 다양한 방법을 통해 수행될 수 있으며, 여기에는 스케일링, 정규화, 차원 축소 등이 포함됩니다. 일반적으로 데이터 변환은 데이터 전처리 과정의 일환으로 수행됩니다.

아래에서는 데이터 변환의 주요 기법 몇 가지를 소개하고, 이를 실제 코드로 보여드리겠습니다.

1. 스케일링(Scaling)

데이터의 값을 특정 범위로 조정하는 작업입니다. 주로 사용되는 방법은 다음과 같습니다:

  • 표준화(Standardization): 데이터를 평균이 0, 표준편차가 1이 되도록 변환합니다.
  • 최소-최대 스케일링(Min-Max Scaling): 데이터를 0과 1 사이의 값으로 변환합니다.

표준화 예시

from sklearn.preprocessing import StandardScaler

# 데이터 로드 및 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# StandardScaler 객체 생성
scaler = StandardScaler()

# 훈련 데이터에 대해 fit_transform() 적용
X_train_scaled = scaler.fit_transform(X_train)

# 테스트 데이터에 대해 transform() 적용
X_test_scaled = scaler.transform(X_test)

최소-최대 스케일링 예시

from sklearn.preprocessing import MinMaxScaler

# MinMaxScaler 객체 생성
scaler = MinMaxScaler()

# 훈련 데이터에 대해 fit_transform() 적용
X_train_scaled = scaler.fit_transform(X_train)

# 테스트 데이터에 대해 transform() 적용
X_test_scaled = scaler.transform(X_test)

2. 정규화(Normalization)

데이터의 각 행(샘플)의 크기를 1로 만드는 작업입니다. 주로 텍스트 데이터나 희소 행렬에서 사용됩니다.

from sklearn.preprocessing import Normalizer

# Normalizer 객체 생성
normalizer = Normalizer()

# 훈련 데이터에 대해 fit_transform() 적용
X_train_normalized = normalizer.fit_transform(X_train)

# 테스트 데이터에 대해 transform() 적용
X_test_normalized = normalizer.transform(X_test)

3. 차원 축소(Dimensionality Reduction)

고차원 데이터를 더 낮은 차원으로 변환하는 작업입니다. 주로 사용되는 방법은 다음과 같습니다:

  • 주성분 분석(PCA): 데이터의 분산을 최대화하는 방향으로 변환합니다.
  • 선형 판별 분석(LDA): 클래스 분리를 최대화하는 방향으로 변환합니다.

PCA 예시

from sklearn.decomposition import PCA

# PCA 객체 생성 (주성분 개수 설정)
pca = PCA(n_components=2)

# 훈련 데이터에 대해 fit_transform() 적용
X_train_pca = pca.fit_transform(X_train)

# 테스트 데이터에 대해 transform() 적용
X_test_pca = pca.transform(X_test)

데이터 변환 과정 요약

  1. 데이터 준비: 데이터를 로드하고 훈련 데이터와 테스트 데이터로 분할합니다.
  2. 변환기 학습 및 적용: 훈련 데이터에 대해 fit_transform()을 사용하여 변환기를 학습시키고 데이터를 변환합니다.
  3. 새 데이터에 변환 적용: 테스트 데이터나 새로운 데이터에 대해 transform()을 사용하여 학습된 변환기를 적용합니다.

각 변환 방법에 따라 데이터가 어떻게 변하는지 예시로 설명하겠습니다:

예시: 데이터 스케일링

import numpy as np
from sklearn.preprocessing import StandardScaler

# 샘플 데이터 생성
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# StandardScaler 객체 생성
scaler = StandardScaler()

# 데이터 변환
X_scaled = scaler.fit_transform(X)

print("원본 데이터:\n", X)
print("표준화된 데이터:\n", X_scaled)

결과

원본 데이터:
 [[1 2]
 [3 4]
 [5 6]
 [7 8]]
표준화된 데이터:
 [[-1.34164079 -1.34164079]
 [-0.4472136  -0.4472136 ]
 [ 0.4472136   0.4472136 ]
 [ 1.34164079  1.34164079]]

이 예시에서 원본 데이터는 [1, 2], [3, 4], [5, 6], [7, 8]이고, 표준화된 데이터는 각 값이 평균이 0, 표준편차가 1이 되도록 변환되었습니다. 이처럼 데이터 변환은 분석 및 모델링의 정확성을 높이기 위해 중요한 단계입니다.

 

질문: 여기서 fit_transform은 0과 1 사이로 만드는 걸 알겠어. 그러면 transform은 뭘 해주는거야?

훈련 데이터에 대해 fit_transform() 적용 X_train_scaled = scaler.fit_transform(X_train)

테스트 데이터에 대해 transform() 적용 X_test_scaled = scaler.transform(X_test)

여기서 fit_transform은 0과 1 사이로 만드는 걸 알겠어. 그러면 transform은 뭘 해주는거야?

 

fit_transform과 transform의 차이

fit_transform()transform()의 차이를 명확히 이해하는 것이 중요합니다. 이 둘의 역할은 데이터 전처리 과정에서 매우 중요합니다.

fit_transform()

  • 역할: 주어진 훈련 데이터에 대해 학습(fit)하고, 변환(transform)합니다.
  • 동작: fittransform을 한 번에 수행합니다.
    • fit: 데이터의 통계적 속성(예: 평균, 표준편차, 최소값, 최대값 등)을 계산하여 학습합니다.
    • transform: 학습된 통계적 속성을 사용하여 데이터를 변환합니다.

transform()

  • 역할: 이미 학습된 통계적 속성을 사용하여 데이터를 변환(transform)합니다.
  • 동작: 추가적인 학습 없이 fit_transform()에서 학습된 속성을 그대로 사용하여 데이터를 변환합니다.

즉, fit_transform()은 주어진 데이터로 변환기를 학습하고 변환하는 반면, transform()은 이미 학습된 변환기를 사용하여 새로운 데이터를 동일한 방식으로 변환합니다.

예시로 설명

  1. 훈련 데이터에서 fit_transform() 수행:
    • fit: X_train의 각 특징(feature)에 대한 최소값과 최대값을 학습합니다.
    • transform: 학습된 최소값과 최대값을 사용하여 X_train을 0과 1 사이로 변환합니다.
  2. from sklearn.preprocessing import MinMaxScaler # 데이터 로드 및 분할 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # MinMaxScaler 객체 생성 scaler = MinMaxScaler() # 훈련 데이터에 대해 fit_transform() 적용 X_train_scaled = scaler.fit_transform(X_train)
  3. 테스트 데이터에서 transform() 수행:
    • transform: 훈련 데이터(X_train)에서 학습된 최소값과 최대값을 사용하여 X_test를 동일한 방식으로 변환합니다.
  4. # 테스트 데이터에 대해 transform() 적용 X_test_scaled = scaler.transform(X_test)

예시 코드와 결과

import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# 샘플 데이터 생성
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# 데이터 분할
X_train, X_test = train_test_split(X, test_size=0.5, random_state=42)

# MinMaxScaler 객체 생성
scaler = MinMaxScaler()

# 훈련 데이터에 대해 fit_transform() 적용
X_train_scaled = scaler.fit_transform(X_train)

# 테스트 데이터에 대해 transform() 적용
X_test_scaled = scaler.transform(X_test)

print("원본 훈련 데이터:\n", X_train)
print("스케일된 훈련 데이터:\n", X_train_scaled)
print("원본 테스트 데이터:\n", X_test)
print("스케일된 테스트 데이터:\n", X_test_scaled)

결과 설명

원본 훈련 데이터:
 [[5 6]
  [1 2]]
스케일된 훈련 데이터:
 [[1. 1.]
  [0. 0.]]
원본 테스트 데이터:
 [[3 4]
  [7 8]]
스케일된 테스트 데이터:
 [[0.5 0.5]
  [1.5 1.5]]
  • 훈련 데이터:
    • fit_transform()을 통해 X_train의 최소값(1, 2)과 최대값(5, 6)을 학습하고 이를 사용하여 데이터를 0과 1 사이로 변환합니다.
    • 결과적으로 X_train_scaled는 [[1, 1], [0, 0]]로 변환됩니다.
  • 테스트 데이터:
    • transform()을 통해 X_test의 값을 훈련 데이터의 최소값과 최대값을 기준으로 변환합니다.
    • X_test의 값들은 X_train의 최소값(1, 2)과 최대값(5, 6)을 기준으로 0과 1 사이로 스케일링됩니다.
    • 결과적으로 X_test_scaled는 [[0.5, 0.5], [1.5, 1.5]]로 변환됩니다.

이와 같이 fit_transform()은 훈련 데이터를 학습하고 변환하는 반면, transform()은 이미 학습된 변환기를 사용하여 테스트 데이터나 새로운 데이터를 변환합니다. 이를 통해 동일한 기준으로 훈련 데이터와 테스트 데이터를 변환할 수 있습니다.

 

질문: 그러면 fit과정에서는 뭘 하는 거야?

fit 과정 설명

fit 과정에서는 주어진 데이터를 기반으로 변환기 또는 모델이 학습됩니다. 이 과정은 변환기의 경우 데이터를 변환하는 데 필요한 통계적 속성을 계산하고, 모델의 경우 주어진 데이터에서 패턴을 학습하는 것입니다.

변환기 (Transformer)에서의 fit

변환기에서 fit 과정은 변환을 수행하는 데 필요한 통계적 속성을 학습합니다. 예를 들어, 스케일러의 경우 데이터의 평균과 표준편차를 계산합니다.

예시: StandardScaler

StandardScaler의 경우, fit 과정에서 각 특징(feature)의 평균과 표준편차를 계산합니다.

from sklearn.preprocessing import StandardScaler

# 샘플 데이터 생성
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# StandardScaler 객체 생성
scaler = StandardScaler()

# fit 과정에서 각 특징의 평균과 표준편차 계산
scaler.fit(X)

print("각 특징의 평균:", scaler.mean_)
print("각 특징의 표준편차:", scaler.scale_)

결과

각 특징의 평균: [4. 5.]
각 특징의 표준편차: [2.23606798 2.23606798]

여기서 scaler.fit(X)는 각 특징의 평균과 표준편차를 학습합니다. 이후 이 값을 사용하여 데이터를 변환할 수 있습니다.

모델 (Model)에서의 fit

모델에서 fit 과정은 주어진 데이터로부터 패턴을 학습하는 과정입니다. 예를 들어, 선형 회귀 모델의 경우, 입력 특징과 타겟 값 간의 관계를 학습합니다.

예시: Linear Regression

여기서 scaler.fit(X)는 각 특징의 평균과 표준편차를 학습합니다. 이후 이 값을 사용하여 데이터를 변환할 수 있습니다.

모델 (Model)에서의 fit
모델에서 fit 과정은 주어진 데이터로부터 패턴을 학습하는 과정입니다. 예를 들어, 선형 회귀 모델의 경우, 입력 특징과 타겟 값 간의 관계를 학습합니다.

예시: Linear Regression

결과

학습된 계수: [1.8]
학습된 절편: 0.1999999999999993

여기서 model.fit(X, y)는 주어진 X와 y 데이터로부터 선형 회귀 모델을 학습합니다. 학습된 모델의 계수와 절편을 출력합니다.

요약

  • 변환기에서의 fit: 데이터를 변환하는 데 필요한 통계적 속성을 학습합니다. 예를 들어, StandardScaler는 각 특징의 평균과 표준편차를 계산합니다.
  • 모델에서의 fit: 주어진 데이터로부터 패턴을 학습합니다. 예를 들어, 선형 회귀 모델은 입력 특징과 타겟 값 간의 관계를 학습합니다.

fit 과정은 변환기나 모델이 데이터를 이해하고, 이후 transform 또는 예측을 수행할 때 사용할 수 있는 정보를 학습하는 중요한 단계입니다.