Hippo's data
변수 선택(Feature selection) - RFE/RFE-CV/UFS 본문
데이터에는 다양한 칼럼으로 이루어진 변수들이 존재하는데요 어떠한 변수들을 모델학습에 사용하느냐에 따라서 모델의 성능이 달라지곤 합니다 이 경우 사용할 수 있는 변수 선택(Feature selection) 방법들을 소개해보겠습니다!
1. RFE (Recursive Feature Elimination)
-> 변수중요도(예: 회귀 계수, 결정 트리에서의 Gini importance 등)를 기반으로 원하는 변수 수에 도달할 때까지 중요하지 않은 변수를 재귀적으로 제거
-> 재귀적이라는 단어가 왜 쓰였나?
전체 변수 학습 -> 변수 중요도 가장 낮은 변수 삭제 -> 남은 변수 학습 (원하는 변수 수까지 반복)
# 선택된 최종 변수는 모델 예측에 가장 큰 영향을 주는 특성 / 점수 지표가 가장 높음
<코드로 구현>
from sklearn.feature_selection import RFE # 사이킷런 모듈 불러오기
X = data[['feature1', 'feature2', 'feature3']] # 독립 변수
y = data['output'] # 종속 변수
model = LinearRegression() # 예시로 선형회귀 모델 적용
# RFE 모델 생성 및 학습
selector = RFE(model, n_features_to_select=2) # 원하는 최종 변수 수 지정
selector = selector.fit(X, y)
# 결과 출력
print(selector.support_) # 선택된 최종 변수
print(selector.ranking_) # 변수 중요도 순위
2. RFE-CV (Recursive Feature Elimination with Cross-Validation)
-> RFE에 교차검증(Cross-validation)을 추가한 것 / 변수 중요성에 대해 더 정확한 평가 제공, 변수 개수 지정안해도 됨
<코드로 구현>
from sklearn.feature_selection import RFECV # 사이킷런 모듈 불러오기
X = data[['feature1', 'feature2', 'feature3']] # 독립 변수
y = data['output'] # 종속 변수
model = LinearRegression() # 예시로 선형회귀 모델 적용
# RFE 모델 생성 및 학습
selector = RFECV(model, step=1, cv=5) # step = 각 반복에서 제거할 변수의 수 / cv = 교차 검증을 위한 분할 수
selector = selector.fit(X, y)
# 결과 출력
print(selector.support_) # 선택된 최종 변수
print(selector.ranking_) # 변수 중요도 순위
3. UFS (Univariate Feature Selection)
-> 일변량 통계 테스트(F-value, 카이 제곱값 등)을 통해 최상의 변수를 선택 / 변수 간의 관계를 고려하지 않음
<코드로 구현>
from sklearn.feature_selection import SelectKBest
# SelectKBest 상위 K개 변수 선택 / SelectPercentile 상위 백분위수 개수 변수 선택
from sklearn.feature_selection import chi2 # 카이제곱값 이용
X = data[['feature1', 'feature2', 'feature3']] # 독립 변수
y = data['output'] # 종속 변수
selector = SelectKBest(chi2, k=2) # SelectKBest를 사용하여 상위 2개의 특성 선택
X_new = selector.fit_transform(X, y)
'ML(Machine Learning)' 카테고리의 다른 글
모델 평가 - 회귀(Regression) 모델 (0) | 2024.01.07 |
---|---|
모델 평가 - 분류(Classification) 모델 (0) | 2024.01.06 |
스케일링(Scaling) (2) | 2024.01.02 |
범주형 데이터 정제하기 - 범주형 인코딩(Categorical Encoding) (0) | 2023.12.31 |
이상치(outlier) 처리하기 (0) | 2023.12.28 |