Table of Contents

ML

Feature Selection

꼬꼬마코더 2024. 6. 8. 16:16
728x90

특성의 수를 줄이는 방법에는 여러 가지가 있습니다. 특성 선택(feature selection)과 차원 축소(dimensionality reduction)를 통해 불필요한 특성을 제거하거나 변환할 수 있습니다. 아래에 몇 가지 방법을 소개합니다.

1. 특성 선택 (Feature Selection)

1.1. 필터 방식 (Filter Method)

통계적 방법을 사용하여 각 특성의 중요도를 평가하고, 중요도가 낮은 특성을 제거합니다.

  • 분산 임계값 (Variance Threshold): 분산이 낮은 특성을 제거합니다.

      from sklearn.feature_selection import VarianceThreshold
    
      selector = VarianceThreshold(threshold=0.1)
      X_reduced = selector.fit_transform(X)
  • 상관 계수 (Correlation Coefficient): 특성 간의 상관관계를 분석하여 상관관계가 높은 특성 중 하나를 제거합니다.

1.2. 래퍼 방식 (Wrapper Method)

특정 모델을 사용하여 반복적으로 특성을 선택합니다.

  • 순방향 선택 (Forward Selection): 처음에 특성이 없는 상태에서 하나씩 추가하여 모델 성능이 개선되는 특성을 선택합니다.

  • 후진 제거 (Backward Elimination): 모든 특성을 포함한 상태에서 하나씩 제거하여 모델 성능에 미치는 영향을 평가합니다.

  • RFE (Recursive Feature Elimination): 모델을 학습시키고, 가장 중요도가 낮은 특성을 반복적으로 제거합니다.

      from sklearn.feature_selection import RFE
      from sklearn.ensemble import RandomForestClassifier
    
      model = RandomForestClassifier()
      selector = RFE(model, n_features_to_select=10)
      X_reduced = selector.fit_transform(X, y)

1.3. 임베디드 방식 (Embedded Method)

모델 학습 과정에서 특성 선택을 수행합니다.

  • Lasso 회귀 (Lasso Regression): L1 정규화를 사용하여 중요하지 않은 특성의 계수를 0으로 만듭니다.

      from sklearn.linear_model import Lasso
    
      lasso = Lasso(alpha=0.1)
      lasso.fit(X, y)
      X_reduced = X[:, lasso.coef_ != 0]

2. 차원 축소 (Dimensionality Reduction)

2.1. PCA (Principal Component Analysis)

고차원 데이터를 저차원으로 변환하여 중요한 성분만을 유지합니다.

from sklearn.decomposition import PCA

pca = PCA(n_components=10)
X_reduced = pca.fit_transform(X)

2.2. LDA (Linear Discriminant Analysis)

분류 문제에서 클래스 간 분산을 최대화하는 축을 찾습니다.

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

lda = LDA(n_components=2)
X_reduced = lda.fit_transform(X, y)

3. 특성 엔지니어링 (Feature Engineering)

도메인 지식을 활용하여 새로운 유용한 특성을 생성하거나, 불필요한 특성을 제거합니다.

4. 특성 중요도 평가

랜덤 포레스트와 같은 트리 기반 모델을 사용하여 각 특성의 중요도를 평가하고, 중요도가 낮은 특성을 제거합니다.

model = RandomForestClassifier()
model.fit(X, y)
importances = model.feature_importances_

# 중요도 기준으로 특성 선택
import numpy as np
important_indices = np.argsort(importances)[-10:]  # 상위 10개 특성 선택
X_reduced = X[:, important_indices]

결론

위의 방법들을 사용하여 특성의 수를 줄일 수 있습니다. 데이터와 문제의 특성에 맞게 적절한 방법을 선택하여 적용해 보세요. 필요하다면 여러 방법을 조합하여 사용할 수도 있습니다.