[데이터 사이언스/개념/문법] pipeline이란?
2024. 8. 15. 19:28ㆍAI & DS/머신러닝
Pipeline은 여러 변환기를 순차적으로 적용할 수 있게 해주는 유용한 도구입니다.
각 변환기를 파이프라인의 하나의 "단계(step)"로 추가합니다.
이러한 각 단계는 고유의 이름과 변환기로 구성됩니다.
num_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
- 수치형 데이터를 전처리하는 파이프라인을 정의
- 이 파이프라인에는 두 가지 주요 단계: 결측치 대체와 표준화
SimpleImputer & StandardScaler
SimpleImputer(strategy='mean'):
- 결측치를 평균값으로 대체합니다.
- 각 열에 대해 결측치가 있을 경우, 해당 열의 평균값으로 결측치를 대체합니다.
StandardScaler():
- 데이터를 표준화합니다.
- 각 열의 값에서 평균을 빼고, 그 값을 표준편차로 나눕니다. 결과적으로 각 열의 데이터는 평균이 0이고 분산이 1이 됩니다.
예시 데이터
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# 예시 데이터프레임
df = pd.DataFrame({
'feature1': [1, 2, None, 4, 5],
'feature2': [10, None, 30, 40, 50]
})
# 파이프라인 정의
num_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
# 원본 데이터 출력
print("Original DataFrame:")
print(df)
# 파이프라인을 사용한 전처리
transformed_data = num_transformer.fit_transform(df)
# 전처리된 데이터 출력
print("\\\\nTransformed DataFrame:")
print(transformed_data)
단계별 변화
원본 데이터
Original DataFrame:
feature1 feature2
0 1.0 10.0
1 2.0 NaN
2 NaN 30.0
3 4.0 40.0
4 5.0 50.0
SimpleImputer 적용 후
- feature1의 결측치는 (1+2+4+5)/4 = 3.0으로 대체됩니다.
- feature2의 결측치는 (10+30+40+50)/4 = 32.5로 대체됩니다.
DataFrame after imputation:
feature1 feature2
0 1.0 10.0
1 2.0 32.5
2 3.0 30.0
3 4.0 40.0
4 5.0 50.0
StandardScaler 적용 후
- feature1의 평균은 3.0, 표준편차는 1.5811 (약 1.58).
- feature2의 평균은 32.5, 표준편차는 14.6198 (약 14.62).
- 각 값에서 평균을 빼고 표준편차로 나눕니다.
Transformed DataFrame:
feature1 feature2
0 -1.264911 -1.540356
1 -0.632456 0.000000
2 0.000000 -0.239129
3 0.632456 0.511676
4 1.264911 1.267809
자세한 변화 설명
SimpleImputer:
- feature1의 결측치인 2번째 행이 평균 3.0으로 대체됩니다.
- feature2의 결측치인 1번째 행이 평균 32.5로 대체됩니다.
StandardScaler:
- feature1:
- 1.0 -> (1.0 - 3.0) / 1.5811 = -1.264911
- 2.0 -> (2.0 - 3.0) / 1.5811 = -0.632456
- 3.0 -> (3.0 - 3.0) / 1.5811 = 0.000000
- 4.0 -> (4.0 - 3.0) / 1.5811 = 0.632456
- 5.0 -> (5.0 - 3.0) / 1.5811 = 1.264911
- feature2:
- 10.0 -> (10.0 - 32.5) / 14.6198 = -1.540356
- 32.5 -> (32.5 - 32.5) / 14.6198 = 0.000000
- 30.0 -> (30.0 - 32.5) / 14.6198 = -0.239129
- 40.0 -> (40.0 - 32.5) / 14.6198 = 0.511676
- 50.0 -> (50.0 - 32.5) / 14.6198 = 1.267809
파이프라인(Pipeline)과 단계(Step)
- Pipeline은 여러 변환기를 순차적으로 적용할 수 있게 해주는 유용한 도구입니다.
- 각 변환기를 파이프라인의 하나의 "단계(step)"로 추가합니다. 이러한 각 단계는 고유의 이름과 변환기로 구성됩니다.
파이프라인 구성
- Pipeline을 정의할 때, steps 인자는 각 단계를 순서대로 지정합니다.
- 각 단계는 튜플 형태로, (단계 이름, 변환기 객체)로 구성됩니다.
- 파이프라인이 데이터를 처리할 때, 각 단계가 순차적으로 실행됩니다.
imputer 단계:
- SimpleImputer는 데이터의 결측치를 평균값으로 대체합니다.
- 예를 들어, 데이터가 [[1, 2, None], [4, None, 6], [7, 8, 9]]라면, None 값을 각 열의 평균값으로 대체합니다.
scaler 단계:
- StandardScaler는 결측치가 대체된 데이터를 표준화합니다.
- 표준화는 각 특성의 값에서 평균을 빼고 표준편차로 나누어, 평균이 0이고 분산이 1이 되도록 만듭니다.
예제 코드
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
# 수치형 변환기 파이프라인 정의
num_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
- imputer와 scaler는 Pipeline 단계에서 사용되는 이름일 뿐이므로, 이 이름들은 임의로 지정할 수 있습니다. 중요한 것은 각 단계가 수행하는 작업과 그 순서이지, 단계 이름 자체는 아닙니다. 단계 이름은 파이프라인 내에서 각 단계를 식별하고 관리하기 위해 사용됩니다.
- 아래 처럼 단계 이름 변경해도 됨
num_transformer = Pipeline(steps=[
('missing_value_replacement', SimpleImputer(strategy='mean')),
('normalizer', StandardScaler())
])
각 단계 설명
Pipeline 객체 생성
num_transformer = Pipeline(steps=[...])
- Pipeline 객체를 생성합니다. steps 인자에는 파이프라인에 포함될 각 단계를 순서대로 지정합니다.
'imputer' 단계 추가
('imputer', SimpleImputer(strategy='mean'))
- SimpleImputer(strategy='mean') 객체를 파이프라인의 'imputer' 단계로 추가합니다.
- SimpleImputer는 결측치를 평균값으로 대체하는 변환기입니다.
- 'imputer'라는 이름을 사용하여 이 단계를 명명합니다.
- 이는 파이프라인이 실행될 때 가장 먼저 실행될 단계입니다.
'scaler' 단계 추가
('scaler', StandardScaler())
- StandardScaler() 객체를 파이프라인의 'scaler' 단계로 추가합니다.
- StandardScaler는 데이터를 표준화(평균을 0, 분산을 1로)하는 변환기입니다.
- 'scaler'라는 이름을 사용하여 이 단계를 명명합니다.
- 이는 파이프라인 내에서 'imputer' 단계 다음에 실행될 단계입니다.
'AI & DS > 머신러닝' 카테고리의 다른 글
[데이터 사이언스/개념/문법] oneHotCoding이란? (0) | 2024.08.16 |
---|---|
[데이터 사이언스/개념] 표준화의 장점 및 데이터 scale 차이에 따른 영향 (0) | 2024.08.15 |
[데이터 사이언스/문법] DataFrame 이란? (0) | 2024.08.15 |
[데이터 사이언스/문법] Python 라이브러리 - tqdm 이란? (0) | 2024.08.14 |
[머신러닝] 주식 종목 추천 시스템 - (3) 데이터 전처리 & k-NN 모델 최근접 이웃 찾기 (0) | 2024.08.14 |