교차 검증을 활용한 재귀적 특징 제거

Beginner

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

소개

이 실습에서는 scikit-learn 을 사용하여 교차 검증을 통한 재귀적 특징 제거 (RFECV) 를 단계별로 구현하는 과정을 살펴볼 것입니다. RFECV 는 모델 구축에 사용할 관련 특징의 하위 집합을 선택하는 특징 선택 (feature selection) 에 사용됩니다. 15 개의 특징 중 3 개는 정보적이고, 2 개는 중복되며, 10 개는 정보가 없는 특징을 사용하여 분류 작업을 수행할 것입니다.

VM 팁

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

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

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

데이터 생성

scikit-learn 의 make_classification 함수를 사용하여 분류 작업을 생성할 것입니다. 15 개의 특징 중 3 개는 정보적이고, 2 개는 중복되며, 10 개는 정보가 없는 500 개의 샘플을 생성할 것입니다.

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=500,
    n_features=15,
    n_informative=3,
    n_redundant=2,
    n_repeated=0,
    n_classes=8,
    n_clusters_per_class=1,
    class_sep=0.8,
    random_state=0,
)

모델 학습 및 선택

RFECV 객체를 생성하고 교차 검증 점수를 계산할 것입니다. "정확도" 점수 전략은 올바르게 분류된 샘플의 비율을 최적화합니다. 로지스틱 회귀를 추정기로 사용하고 5 개의 폴드를 가진 계층적 k-겹 교차 검증을 사용할 것입니다.

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## 고려할 최소 특징 수
clf = LogisticRegression()
cv = StratifiedKFold(5)

rfecv = RFECV(
    estimator=clf,
    step=1,
    cv=cv,
    scoring="accuracy",
    min_features_to_select=min_features_to_select,
    n_jobs=2,
)
rfecv.fit(X, y)

print(f"최적 특징 수: {rfecv.n_features_}")

특징 수 대 교차 검증 점수 플롯

선택된 특징 수와 교차 검증 점수를 플롯할 것입니다. 플롯 생성을 위해 matplotlib 를 사용할 것입니다.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("선택된 특징 수")
plt.ylabel("평균 테스트 정확도")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("상관 특징을 가진 재귀적 특징 제거")
plt.show()

요약

이 실험에서는 scikit-learn 을 사용하여 교차 검증을 포함한 재귀적 특징 제거 (RFECV) 를 구현하는 과정을 살펴보았습니다. 15 개의 특징을 가진 분류 작업을 생성했으며, 그중 3 개는 정보적, 2 개는 중복적, 10 개는 비정보적이었습니다. 로지스틱 회귀를 추정기로 사용하고 5 개의 폴드를 가진 계층적 k-겹 교차 검증을 사용했습니다. 선택된 특징 수와 교차 검증 점수를 플롯했습니다. 최적의 특징 수는 3 개였으며, 이는 실제 생성 모델과 일치했습니다. 또한 상관 특징의 도입으로 인해 선택된 특징이 3 개에서 5 개까지 동일한 점수의 플랫폼을 관찰했습니다.