이 구현에서 목표 특성 개수를 지정하기 위해 k_features 매개변수를 정의했습니다. 기본적으로 사이킷런의 accuracy_score 함수를 사용하여 특성의 부분 집합에 대한 모델(분류를 위한 추정기) 성능을 평가합니다.
fit 메서드의 while 루프 안에서 itertools.combinations 함수에 의해 생성된 특성 조합을 평가하고 원하는 차원이 남을 때까지 특성을 줄입니다. 각 반복에서 내부적으로 만든 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)