아이리스 데이터셋 SVC 모델을 위한 특징 선택

Beginner

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

소개

이 실험은 서포트 벡터 분류기 (SVC) 를 실행하기 전에 단변량 특징 선택을 수행하여 분류 점수를 개선하는 방법을 보여줍니다. 우리는 아이리스 데이터셋 (4 개의 특징) 을 사용하고 36 개의 비정보 특징을 추가할 것입니다. 우리는 모델이 특징의 약 10% 를 선택했을 때 최상의 성능을 달성한다는 것을 알게 될 것입니다.

VM 팁

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

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

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

데이터 로드

아이리스 데이터셋을 로드하고 36 개의 비정보 특징을 추가하여 시작합니다.

import numpy as np
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

## 비정보 특징 추가
rng = np.random.RandomState(0)
X = np.hstack((X, 2 * rng.random((X.shape[0], 36))))

파이프라인 생성

다음으로, 특징 선택 변환기, 스케일러 및 SVM 인스턴스로 구성된 파이프라인을 만듭니다. 이를 결합하여 완전한 추정기를 얻습니다.

from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectPercentile, f_classif
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

clf = Pipeline(
    [
        ("anova", SelectPercentile(f_classif)),
        ("scaler", StandardScaler()),
        ("svc", SVC(gamma="auto")),
    ]
)

교차 검증 점수 플롯

특징의 백분위 수에 따른 교차 검증 점수를 플롯합니다.

import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score

score_means = list()
score_stds = list()
percentiles = (1, 3, 6, 10, 15, 20, 30, 40, 60, 80, 100)

for percentile in percentiles:
    clf.set_params(anova__percentile=percentile)
    this_scores = cross_val_score(clf, X, y)
    score_means.append(this_scores.mean())
    score_stds.append(this_scores.std())

plt.errorbar(percentiles, score_means, np.array(score_stds))
plt.title("선택된 특징의 백분위 수를 변화시킨 SVM-Anova 의 성능")
plt.xticks(np.linspace(0, 100, 11, endpoint=True))
plt.xlabel("백분위 수")
plt.ylabel("정확도 점수")
plt.axis("tight")
plt.show()

요약

이 실험에서 우리는 서포트 벡터 분류기 (SVC) 를 실행하기 전에 단변량 특징 선택을 수행하여 분류 점수를 개선하는 방법을 배웠습니다. 우리는 아이리스 데이터셋 (4 개의 특징) 을 사용했고, 36 개의 비정보적인 특징을 추가했습니다. 우리는 모델이 특징의 약 10% 를 선택했을 때 최상의 성능을 달성했다는 것을 발견했습니다.