본문 바로가기
Analysis/ML

[sklearn] 특성 공학

by 5ole 2021. 5. 11.

 

  • 특성 공학 Feature Engineering : 특정 애플리케이션에 가장 적합한 데이터 표현 찾는 것

 

 

1. 범주형 변수

 

  • One-hot-encoding - value_counts로 unique 값 먼저 확인
  • pd.get_dummies 는 숫자 범주형 특성은 .astype(str)로 문자열 특성으로 바꿔주어야 함

 

from sklearn.proprocessing import OneHotEncoder

 

  • sklearn의 OneHotEncoder(sparse=False)는 모두 범주형이라고 가정, 숫자/문자열 모두 바꿈
  • ohe.fit_transform(data)

 

 

2. 연속형 변수 - 스케일 조정

 

from sklearn.compose import ColumnTransformer

 

  • sklearn의 ColumnTransformer([('이름','변환기 객체','변환 적용될 열')])
  • ct.fit(X_train).transform(X_train)

 

from sklearn.compose import make_Column_transformer

 

  • sklearn의 make_column_transformer
  • 이름을 자동으로 붙여주는 함수

 

 

3. 구간 분할 - Bining, 이산화

 

  • 연속형 특성의 입력값 범위를 여러 구간으로 나눔
  • 결정트리의 경우에는 한번에 여려 특성을 살필 수 있으므로 부적절
  • 선형모델에선 대용량 고차원 데이터셋이라면 성능 향상에 도움됨

 

from sklearn.preprocessing import KBinsDiscretizer

 

  • sklearn의 KBinsDiscretizer(n_bins=n, strategy='uniform')
  • kb.fit(data).transform(data)
  • 균일한 너비로 구간 경계 정의
  • 구간에 원핫인코딩 적용, n차원의 희소 행렬 생성

 

 

4. 상호작용과 다항식

 

from sklearn.preprocessing import PolynomialFeatures

 

  • PolynomialFeatures(degree=n, include_bias=False)
  • poly.fit(data).transform(data)
  • n차원의 n개의 특성 생성 - 교차 특성
  • x1, x2,  x1**2, x2**2, x1*x2 ...

 

 

5. 일변량 비선형 변환

 

  • np.log(X+1) 등의 변환
  • 트리기반에서는 불필요하지만 선형 모델같은 경우 필수적
  • SVM, KNN, 신경망 등에서 이점을 볼 수 있음

 

 

6. 특성 자동 선택

 

 

(1) 일변량 통계 (Univariate)

 

  • 각 특성이 독립적으로 평가
  • 분산분석 (ANOVA)
from sklearn.feature_selection import SelectPercentile, f_classif

 

  • f_classif 분류, f_regression (회귀) - p값 기초해 제외하는 방식
  • SelectKBest 고정된 K개 특성값 선택
  • SelectPercentile 지정된 비율만큼 특성 선택
  • SelectPercentile(score_func=f_classif, percentile = n).fit(X_train,y_train)
  • select.transform(X_train)

 

 

(2) 모델 기반 선택 (Model-based-selection)

 

  • 지도학습 머신러닝 모델 사용해 특성의 중요도 평가
  • 한 번에 모든 특성을 고려하므로 상호작용 부분을 반영 가능
  • 트리기반 모델, 선형모델 계수 절댓값,  L1 규제

 

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

 

  • select = SelectFromModel( RandomForestClassifer(n_estimators=n, random_state =n), threshold='median')
  • select.fit(X_train, y_train).transform(X_train)
  • 중요도가 지정한 임계치보다 큰 모든 특성 선택

 

 

(3) 반복적 특성 선택 (Iterative Feature selection)

 

from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier

 

  • RFE 재귀적 특성 제거 - 모든 특성에서 시작해 특성 중요도가 가장 낮은 특성 제거
  • select = RFE( RandomForestClassifer(n_estimators=n, random_state =n), n_features_to_select=n)
  • select.fit(X_train, y_train).transform(X_train)

 

 

 

 

 

 

 

 

 

 

+ 참고 자료 및 출처
 
(한빛미디어) 안드레아스 뮐러, 세라 가이도  < 파이썬 라이브러리를 활용한 머신러닝 > 

 

 

 

 

 

 

'Analysis > ML' 카테고리의 다른 글

[sklearn] 교차 검증  (0) 2021.05.11
[sklearn] 비지도학습  (0) 2021.05.10
[sklearn] 지도학습  (0) 2021.05.10
[sklearn / statsmodels] 선형회귀 Linear Regression  (0) 2021.01.31

댓글