[python] scikit-learn을 활용한 특징 선택

머신러닝 모델을 사용하여 데이터를 분석하고 예측하는 데 있어서 특징 선택은 매우 중요한 단계입니다. 특징 선택은 모델의 성능을 향상시키거나 과적합을 방지하기 위해 필요한 특징만 선택하는 과정입니다. 이번 글에서는 Python의 scikit-learn 라이브러리를 활용하여 특징 선택을 수행하는 방법을 알아보겠습니다.

scikit-learn의 feature_selection 모듈

scikit-learn은 머신러닝에 널리 사용되는 파이썬 라이브러리입니다. 이 라이브러리에는 특징 선택을 위한 feature_selection 모듈이 있습니다. 이 모듈을 사용하면 다양한 특징 선택 기법을 쉽게 적용할 수 있습니다.

주요 특징 선택 기법

  1. 일변량 특징 선택(Univariate Feature Selection)
    • SelectKBest: 주어진 모델과 특징 선택 방법을 사용하여 가장 중요한 K개의 특징 선택
    • SelectPercentile: 한정된 비율만큼 최상위 특징 선택
    • SelectFpr, SelectFdr, SelectFwe: 각각 지정된 가설 검정에 대한 선택 기준을 사용하여 특징 선택
  2. 모델 기반 특징 선택(Model-based Feature Selection)
    • SelectFromModel: 지정된 모델을 사용하여 학습된 특징 중요도에 기반하여 특징 선택
  3. 재귀적 특징 제거(Recursive Feature Elimination)
    • RFECV: 재귀적으로 모델을 학습시키고 특징을 제거하여 모델 성능을 평가하여 특징 선택
  4. L1 규제(L1 Regularization)
    • SelectFromModel + LinearSVC: L1 규제를 사용하여 특징 선택

예제 코드

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, SelectPercentile
from sklearn.feature_selection import SelectFromModel, RFECV
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression

# IRIS 데이터셋 로드
data = load_iris()
X = data.data
y = data.target

# Univariate Feature Selection
# 주요한 2개의 특징 선택
selector = SelectKBest(k=2)
X_new = selector.fit_transform(X, y)

# Model-based Feature Selection
# LinearSVC 모델을 사용하여 중요한 특징 선택
lsvc = LinearSVC(C=1, penalty="l1", dual=False).fit(X, y)
model_selector = SelectFromModel(lsvc)
X_new = model_selector.transform(X)

# Recursive Feature Elimination
# LogisticRegression 모델을 사용하여 2개의 특징 선택
rfe_selector = RFECV(estimator=LogisticRegression(), min_features_to_select=2)
X_new = rfe_selector.fit_transform(X, y)

# L1 Regularization
# LinearSVC를 사용하여 L1 규제에 기반한 특징 선택
lsvc_selector = SelectFromModel(LinearSVC(penalty="l1", dual=False))
X_new = lsvc_selector.fit_transform(X, y)

위의 코드는 scikit-learn의 feature_selection 모듈을 활용하여 특징 선택을 수행하는 예제입니다. 다양한 특징 선택 방법을 사용하여 주어진 데이터셋에서 중요한 특징을 선택하는 과정을 보여줍니다.

결론

머신러닝 모델의 성능을 향상시키고 과적합을 방지하기 위해서는 적절한 특징 선택이 필요합니다. Python의 scikit-learn 라이브러리를 활용하면 다양한 특징 선택 기법을 쉽게 적용할 수 있습니다. 이를 통해 주어진 데이터셋에서 가장 중요한 특징을 선택하여 더 좋은 예측 성능을 얻을 수 있습니다.