특성 엔지니어링과 선택

엔드 투 엔드 Machine Learning

Joshua Stapleton

Machine Learning Engineer

특성 엔지니어링

특성 생성

  • 문제 단순화
  • 모델 효율 향상

기법

  • 기존 특성 수정
  • 새 특성 설계

이점

  • 배포·유지보수·학습 용이
  • 해석 가능성 향상

머신러닝 라이프사이클의 현재 단계: 특성 엔지니어링

엔드 투 엔드 Machine Learning

정규화

  • 수치형 특성을 [0, 1]로 스케일링
  • 특성 스케일/범위가 다를 때 유용
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Normalizer

# 데이터 분할
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# 정규화 객체 생성, 학습 데이터로 적합 후 변환, 테스트 세트 변환
norm = Normalizer()
X_train_norm = norm.fit_transform(X_train)
X_test_norm = norm.transform(X_test)
엔드 투 엔드 Machine Learning

표준화

  • 평균=0, 분산=1로 스케일링
  • 유사한 평균·분산을 가정하는 알고리즘에 유리
from sklearn.preprocessing import StandardScaler

# 데이터 분할
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# 스케일러 생성 후 학습 데이터에 적합해 표준화
sc = StandardScaler()
X_train_stzd = sc.fit_transform(X_train)
# 테스트 데이터는 변환만
X_test_stzd = sc.transform(X_test)
엔드 투 엔드 Machine Learning

좋은 특성의 요건

  • 관련 있는 특성 사용
  • 진료 당일의 날씨는 진단과 무관

 

특성 선택에서 특성 관련성 원칙을 보여주는 폭풍우 이미지

  • 상관이 낮은(직교) 특성 사용
  • 나이를 개월/연도로 중복 표현하면 비효율적

 

특성 선택에서 직교성 원칙을 보여주는 다이어그램

엔드 투 엔드 Machine Learning

sklearn.feature_selection

 

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

# 데이터 누수를 피하려면 먼저 학습/테스트로 분할 X_train, X_test, y_train, y_test = train_test_split( heart_disease_df_X, heart_disease_df_y, test_size=0.2, random_state=42)
엔드 투 엔드 Machine Learning

sklearn.feature_selection (계속)

 

# 랜덤 포레스트 모델 정의 및 학습
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
rf.fit(X_train, y_train)

# 특성 선택 정의 및 실행 model = SelectFromModel(rf, prefit=True) features_bool = model.get_support() features = heart_disease_df.columns[features_bool]
엔드 투 엔드 Machine Learning

Ayo berlatih!

엔드 투 엔드 Machine Learning

Preparing Video For Download...