Scikit-Learn 을 이용한 특징 선택

Beginner

This tutorial is from open-source community. Access the source code

소개

기계 학습에서 특징 선택은 중요한 단계입니다. 이는 모델의 정확성과 성능을 향상시키기 위해 데이터 세트에서 가장 관련성이 높은 특징을 선택하는 것을 포함합니다. scikit-learn 에서는 sklearn.feature_selection 모듈이 특징 선택 및 차원 축소를 위한 다양한 방법을 제공합니다.

이 실습에서는 scikit-learn 을 사용하여 특징 선택 과정을 안내합니다. 낮은 분산을 가진 특징 제거, 단변량 특징 선택, 재귀적 특징 제거 및 SelectFromModel 을 사용한 특징 선택과 같은 기술을 다룰 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

낮은 분산을 가진 특징 제거

scikit-learn 의 VarianceThreshold 클래스는 낮은 분산을 가진 특징을 제거하는 데 사용될 수 있습니다. 낮은 분산을 가진 특징은 일반적으로 모델에 많은 정보를 제공하지 않습니다. VarianceThreshold를 사용하여 0 분산 특징을 제거하는 방법을 보여 드리겠습니다.

from sklearn.feature_selection import VarianceThreshold

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

## 80% 의 변동성을 갖는 임계값으로 VarianceThreshold 를 초기화합니다.
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))

## 높은 변동성을 가진 특징을 선택합니다.
X_selected = sel.fit_transform(X)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", sel.get_support(indices=True))

이 코드 조각은 VarianceThreshold를 사용하여 데이터 세트에서 0 분산 특징을 제거하는 방법을 보여줍니다. 출력은 데이터 세트의 원래 모양과 높은 변동성을 가진 특징을 선택한 후의 모양을 보여줄 것입니다.

단변량 특징 선택

단변량 특징 선택은 단변량 통계 검정을 기반으로 최상의 특징을 선택하는 방식입니다. scikit-learn 에는 단변량 특징 선택을 구현하는 여러 클래스가 있습니다.

  • SelectKBest: 상위 k 개의 점수가 높은 특징을 선택합니다.
  • SelectPercentile: 사용자가 지정한 상위 백분위 점수의 특징을 선택합니다.
  • SelectFpr: 거짓 양성률을 기반으로 특징을 선택합니다.
  • SelectFdr: 거짓 발견률을 기반으로 특징을 선택합니다.
  • SelectFwe: 가족별 오류율을 기반으로 특징을 선택합니다.
  • GenericUnivariateSelect: 구성 가능한 전략으로 선택을 허용합니다.

다음은 Iris 데이터 세트에서 상위 2 개의 특징을 선택하기 위한 SelectKBest 사용 예입니다.

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif

## Iris 데이터 세트를 로드합니다.
X, y = load_iris(return_X_y=True)

## f_classif 점수 함수와 k=2 로 SelectKBest 를 초기화합니다.
selector = SelectKBest(f_classif, k=2)

## 최상의 특징을 선택합니다.
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

이 예제에서는 f_classif 점수 함수를 사용하여 Iris 데이터 세트에서 상위 2 개의 특징을 선택합니다. 출력은 데이터 세트의 원래 모양과 최상의 특징을 선택한 후의 모양을 보여줄 것입니다.

재귀적 특징 제거 (RFE)

재귀적 특징 제거 (RFE) 는 특징의 중요도를 순차적으로 평가하여 가장 중요한 특징을 선택하는 특징 선택 방법입니다. 특징에 가중치를 할당하여 외부 추정기를 학습시키고, 가장 중요하지 않은 특징을 제거하는 방식으로 작동합니다.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE

## Iris 데이터셋을 로드합니다.
X, y = load_iris(return_X_y=True)

## SVC 를 외부 추정기로 초기화합니다.
estimator = SVC(kernel="linear")

## 외부 추정기와 2 개의 특징을 선택할 수 있도록 RFE 를 초기화합니다.
selector = RFE(estimator, n_features_to_select=2)

## 최상의 특징을 선택합니다.
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

이 예제에서는 지원 벡터 분류기 (SVC) 를 외부 추정기로 사용하여 Iris 데이터 세트에서 상위 2 개의 특징을 선택합니다. 출력은 데이터 세트의 원래 모양과 최상의 특징을 선택한 후의 모양을 보여줄 것입니다.

SelectFromModel 을 이용한 특징 선택

SelectFromModel 클래스는 각 특징에 중요도를 할당하는 모든 추정기와 함께 사용할 수 있는 메타 변환기입니다. 특징의 중요도를 기반으로 특징을 선택하고, 지정된 임계값보다 낮은 특징을 제거합니다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

## Iris 데이터셋을 로드합니다.
X, y = load_iris(return_X_y=True)

## 추정기로 RandomForestClassifier 를 초기화합니다.
estimator = RandomForestClassifier()

## 추정기와 "평균" 임계값을 사용하여 SelectFromModel 을 초기화합니다.
selector = SelectFromModel(estimator, threshold="mean")

## 최상의 특징을 선택합니다.
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

이 예제에서는 Random Forest 분류기를 추정기로 사용하고, 평균 중요도보다 높은 중요도를 가진 특징을 선택합니다. 출력은 데이터 세트의 원래 모양과 최상의 특징을 선택한 후의 모양을 보여줄 것입니다.

요약

특징 선택은 머신 러닝에서 모델의 정확성과 성능을 향상시키는 필수적인 단계입니다. 이 실습에서는 낮은 분산을 가진 특징 제거, 단변량 특징 선택, 재귀적 특징 제거, 그리고 SelectFromModel 을 이용한 특징 선택과 같은 다양한 기법들을 다루었습니다. 이러한 기법들은 가장 관련성이 높은 특징을 선택하고 데이터셋의 차원을 줄여 모델 성능을 향상시키는 데 도움이 됩니다.