feature 엔지니어링 - feature generation

권형준·2025년 11월 7일

머신러닝

목록 보기
4/18

피쳐 엔지니어링에는 3가지 축이 있다.
1. Feature Generation
2. Feature Selection
3. Anomaly Detection

피쳐 제너레이션은 데이터에 숨겨진 패턴을 명시적으로 표현하는 것

그 중에 피쳐 제너레이션 방법은 2가지 Binning과 PolynomialFeature가 있다.

그 중에 Binning 방법은 Equal Width Binning(동일 폭으로 묶는 바이닝)과 Equal Frequency Binning(동일 개수로 묶는 바이닝) 그리고 Custom Binning(개인이 직접)이 있다.

1. Binning

일단 실습 시작하기에 앞서서 필요한 모듈 import 와 실제로 써볼 데이터를 가져오자

import pandas as pd
import numpy as np
from sklearn.preprocessing import KBinsDiscretizer

ages = np.array([22, 25, 35, 45, 52, 58, 67, 72]).reshape(-1, 1)

여기서 나이 데이터는 np.array 로 계산되기 쉽게 가져온다. 특히 reshape(-1, 1)을 써서 2차원으로 변경해준다.

동일 폭 바이닝

일단 동일 폭으로 나누는 bining은

#Equal Width Binning - 같은 너비로 구간 나누기 예: [0-25], [25-50], [50-75], [75-100]
kbd_width = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
age_binned_width = kbd_width.fit_transform(ages)
print('Equal Width:', age_binned_width.ravel())

KBinsDiscretizer 클래스는 n_bins, encode, strategy를 정해주어야 하는데, n_bins= 는 몇 개의 칼럼으로 나눌건지?, encode= 는 어떤 모양으로 데이터를 내보낼건데? ordinal는 값에 구간 번호만 붙여줌. strategy= 경계는 어떻게 나눌까? 'uniform'은 모든 경계 폭을 동일.

fit_transform(ages)를 통해서 학습을 시켜주고, age_binned_width.ravel() 는 위에서 학습된 내용. ravel()을 붙이면 2차원 데이터인 것을 1차원으로 변경시켜준다.

동일 갯수 바이닝

# Equal Frequency Binning  
kbd_freq = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='quantile')
age_binned_freq = kbd_freq.fit_transform(ages)
print("Equal Frequency:", age_binned_freq.ravel())

여기도 같은 클래스를 쓰지만 마지막에 strategy=가 quantile로 나누어져 있다. quantile은 각 구간의 갯수가 비슷하게 나눔. 나머지는 다 동일하다.

커스텀 바이닝

# Custom Binning with pandas 요거는 개인 지식가지고 직접 구간 설정
df = pd.DataFrame({'age': ages.ravel()})
df['age_group'] = pd.cut(df['age'], 
                         bins=[0, 30, 60, 100],
                         labels=['청년', '중년', '노년'])
print(df)

ages는 위에서 reshape으로 2차원으로 변경시켜놨는데, 여기서는 다시 1차원 리스트 형식으로 변경 ravel()써서 데이터 변경. 그리고 bins=[0, 30, 60, 100]을 쓰고 각 컬럼 라벨이름을 labels = (['청년', '중년', '노년']) 요렇게 해준다. 라벨은 0과 30사이, 30 60사이, 60 100 사이 총 개니 라벨 이름도 3개지정!

2. PolynomialFeatures

여기서 선형 모델 만들기
model_linear = LinearRegression() 클래스를 넣어주고 fit으로 교육하는 것까지는 동일.

그 다음 2차 다항식 만들 때 PolynomialFeatures(degree=2) 클래스로 지정해주고, 그 다음 fit_transform(X)를 써서 2차 다항식을 만들어 준다. PolynomialFeatures클래스를 한 다음 교육할 때는 LinearRegression 쓸 때랑은 달리 학습할 데이터로 X 하나만 넣어준다.

profile
천리길도 한발짝부터

0개의 댓글