- 특성 공학 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 |
댓글