더북(TheBook)

이 구현에서 목표 특성 개수를 지정하기 위해 k_features 매개변수를 정의했습니다. 기본적으로 사이킷런의 accuracy_score 함수를 사용하여 특성의 부분 집합에 대한 모델(분류를 위한 추정기) 성능을 평가합니다.

fit 메서드의 while 루프 안에서 itertools.combination 함수에 의해 생성된 특성 조합을 평가하고 원하는 차원이 남을 때까지 특성을 줄입니다. 각 반복에서 내부적으로 만든 X_test 테스트 데이터셋에 기초한 최적 조합의 정확도 점수를 self.scores_ 리스트에 모읍니다. 이 점수를 사용하여 나중에 결과를 평가하겠습니다. 최종 선택된 특성의 열 인덱스는 self.indices_에 할당됩니다. transform 메서드에서 선택된 특성 열로 구성된 새로운 데이터 배열을 반환할 때 사용합니다. fit 메서드 안에서 명시적으로 특성에 대한 기준 값을 계산하는 대신 최적의 특성 조합에 포함되지 않은 특성을 제외했습니다.

사이킷런의 KNN 분류기를 사용하여 이 SBS 구현이 잘 동작하는지 확인해 보죠.

>>> import matplotlib.pyplot as plt
>>> from sklearn.neighbors import KNeighborsClassifier

>>> knn = KNeighborsClassifier(n_neighbors=5)

>>> sbs = SBS(knn, k_features=1)
>>> sbs.fit(X_train_std, y_train)

SBS 구현이 fit 메서드 안에서 데이터셋을 훈련 데이터셋과 테스트 데이터셋으로 나누지만 여전히 이 알고리즘에 X_train 데이터만 주입합니다. SBS의 fit 메서드는 훈련과 테스트(검증)를 위한 새로운 서브셋(subset)을 만듭니다. 여기서 테스트 데이터셋을 검증 데이터셋(validation dataset)이라고도 부릅니다. 이 방식을 사용하려면 훈련 데이터에서 원래 테스트 데이터셋을 미리 떼어 놓아야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.