Table of Contents
데이터 변환 (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)
데이터 변환 과정 요약
- 데이터 준비: 데이터를 로드하고 훈련 데이터와 테스트 데이터로 분할합니다.
- 변환기 학습 및 적용: 훈련 데이터에 대해
fit_transform()
을 사용하여 변환기를 학습시키고 데이터를 변환합니다. - 새 데이터에 변환 적용: 테스트 데이터나 새로운 데이터에 대해
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)합니다.
- 동작:
fit
과transform
을 한 번에 수행합니다.- fit: 데이터의 통계적 속성(예: 평균, 표준편차, 최소값, 최대값 등)을 계산하여 학습합니다.
- transform: 학습된 통계적 속성을 사용하여 데이터를 변환합니다.
transform()
- 역할: 이미 학습된 통계적 속성을 사용하여 데이터를 변환(transform)합니다.
- 동작: 추가적인 학습 없이
fit_transform()
에서 학습된 속성을 그대로 사용하여 데이터를 변환합니다.
즉, fit_transform()
은 주어진 데이터로 변환기를 학습하고 변환하는 반면, transform()
은 이미 학습된 변환기를 사용하여 새로운 데이터를 동일한 방식으로 변환합니다.
예시로 설명
- 훈련 데이터에서
fit_transform()
수행:fit
:X_train
의 각 특징(feature)에 대한 최소값과 최대값을 학습합니다.transform
: 학습된 최소값과 최대값을 사용하여X_train
을 0과 1 사이로 변환합니다.
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)
- 테스트 데이터에서
transform()
수행:transform
: 훈련 데이터(X_train
)에서 학습된 최소값과 최대값을 사용하여X_test
를 동일한 방식으로 변환합니다.
# 테스트 데이터에 대해 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 또는 예측을 수행할 때 사용할 수 있는 정보를 학습하는 중요한 단계입니다.
'ML' 카테고리의 다른 글
모델 평가 방법 (0) | 2024.05.28 |
---|---|
베타𝛽계수 추정, 손실함수lossfunction, 편미분partial derivative, 폐쇄형 해Closed Form Solution (0) | 2024.05.28 |
머신러닝모델의 예측오류 Error = Noise(Data) + Variance + Bias (0) | 2024.05.28 |
라쏘(Lasso)와 리지(Ridge): loss function + regularization term (0) | 2024.05.28 |
머신러닝 입문자를 위한 추천 도서 (2) | 2024.04.05 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- 손실함수
- git
- English
- Lora
- classification
- nlp
- Hugging Face
- 오블완
- RAG
- clustering
- Github
- 해시
- 리스트
- 파이썬
- LIST
- cnn
- Numpy
- Python
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- recursion #재귀 #자료구조 # 알고리즘
- PEFT
- 코딩테스트
- Array
- speaking
- LLM
- Transformer
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- t5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |