[파이썬][scikit-learn] scikit-learn에서 특성 선택

특성 선택은 머신 러닝 및 데이터 분석 작업에서 매우 중요한 단계입니다. 모델 성능 향상과 불필요한 특성의 제거를 통해 모델 복잡성을 줄여줄 수 있습니다. scikit-learn은 이를 위한 다양한 기능을 제공합니다.

특성 선택의 중요성

특성 선택은 머신 러닝 모델 학습에 사용되는 데이터에서 가장 중요한 특성들을 결정하는 과정입니다. 특성 선택을 통해 모델이 학습하는 데 사용되는 특성들의 수를 줄일 수 있으며, 이는 다음과 같은 이점을 제공합니다.

scikit-learn을 이용한 특성 선택

scikit-learn은 특성 선택을 위한 다양한 알고리즘과 함수를 제공합니다. 주요 기능은 다음과 같습니다.

1. Univariate Feature Selection (일변량 특성 선택)

일변량 특성 선택은 각 특성을 개별적으로 평가하여 가장 관련성이 높은 특성들을 선택하는 방법입니다. SelectKBest 클래스와 함께 사용할 수 있으며, 다양한 기준에 따라 특성을 선택할 수 있습니다.

from sklearn.feature_selection import SelectKBest, f_regression

# 입력 데이터와 타겟 변수 설정
X, y = ...

# 특성 선택 객체 생성
selector = SelectKBest(score_func=f_regression, k=10)

# 특성 선택 수행
X_new = selector.fit_transform(X, y)

# 선택된 특성 확인
selected_features = selector.get_support(indices=True)

2. Recursive Feature Elimination (재귀적 특성 제거)

재귀적 특성 제거는 모델을 반복적으로 학습하고 가장 중요하지 않은 특성을 제거하는 방법입니다. RFE 클래스와 함께 사용할 수 있으며, 모델과 제거할 특성의 수를 설정할 수 있습니다.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression

# 입력 데이터와 타겟 변수 설정
X, y = ...

# 모델 설정
model = LinearRegression()

# 특성 선택 객체 생성
selector = RFE(estimator=model, n_features_to_select=5)

# 특성 선택 수행
X_new = selector.fit_transform(X, y)

# 선택된 특성 확인
selected_features = selector.get_support(indices=True)

3. Feature Importance (특성 중요도)

특성 중요도는 모델을 훈련한 후 특성들의 중요도를 평가하여 가장 관련성이 높은 특성들을 선택하는 방법입니다. 다양한 모델에 따라 중요도를 계산하는 방법이 다를 수 있습니다. 예를 들면, RandomForestClassifier에서는 feature_importances_ 속성을 통해 특성 중요도를 얻을 수 있습니다.

from sklearn.ensemble import RandomForestClassifier

# 입력 데이터와 타겟 변수 설정
X, y = ...

# 모델 설정
model = RandomForestClassifier()

# 모델 학습
model.fit(X, y)

# 특성 중요도 확인
feature_importances = model.feature_importances_

결론

scikit-learn을 사용하면 특성 선택을 통해 모델의 성능을 향상시킬 수 있습니다. Univariate Feature Selection, Recursive Feature Elimination, 그리고 Feature Importance를 활용하여 중요한 특성을 선택하고 모델의 복잡성을 줄이세요. 나아가서 여러 알고리즘을 조합하여 다양한 특성 선택 메서드를 활용할 수도 있습니다.