Note ≡
역주 최근 사이킷런 0.24 버전에서 순차 특성 선택 알고리즘을 구현한 SequentialFeatureSelector 클래스가 추가되었습니다. 이 클래스를 Wine 데이터셋에 적용해 보겠습니다.
다음 코드를 실행하려면 사이킷런 0.24 버전 이상이 필요합니다. 이 코드는 https://github.com/rickiepark/python-machine-learning-book-3rd-edition/blob/master/ch04/SequentialFeatureSelector.ipynb에 있습니다.
먼저 SequentialFeatureSelector를 임포트합니다.
>>> from sklearn.feature_selection import SequentialFeatureSelector
사용할 모델 객체를 첫 번째 매개변수로 전달합니다. 선택할 특성의 개수는 n_features_to_select에서 지정합니다. 기본값은 입력 특성의 절반입니다. 0~1 사이 실수를 지정하면 선택할 특성의 비율로 인식합니다.
direction 매개변수로 특성 선택 방향(전진 또는 후진)을 선택합니다. 기본값은 전진을 의미하는 'forward'이고 후진을 선택하려면 'backward'로 지정합니다.
SequentialFeatureSelector는 특성을 선택하기 위해 교차 검증을 사용합니다. cv 매개변수에서 교차 검증 횟수를 지정할 수 있습니다. 기본값은 5입니다. 회귀 모델일 경우 KFold, 분류 모델일 경우 StratifiedKFold를 사용하여 폴드를 나눕니다. 두 클래스에 대한 자세한 내용은 6장을 참고하세요.
하나의 특성을 선택할 때마다 현재 남은 특성 개수(m)에 대해 교차 검증을 수행하므로 m×cv개의 모델을 만듭니다. 이렇게 단계마다 많은 모델을 만들기 때문에 일반적으로 RFE나 SelectFromModel보다 느립니다. n_jobs 매개변수를 1 이상으로 지정하여 여러 코어를 사용하는 것이 좋습니다.
다음 코드에서 전진 선택 방법으로 n_features_to_select에 한 개의 특성에서 12개의 특성까지 지정해 보겠습니다. 모델을 훈련한 후 선택된 특성은 support_ 속성에 True로 표시됩니다. 이 속성을 사용하여 X_train_std에서 선택된 특성만 사용하겠습니다. 그다음 훈련 데이터셋에 대한 점수를 계산하여 scores 리스트에 추가합니다.
>>> scores = []
>>> for n_features in range(1, 13):
... sfs = SequentialFeatureSelector(knn, n_features_to_select=n_features, n_jobs=-1)
... sfs.fit(X_train_std, y_train)
... f_mask = sfs.support_
... knn.fit(X_train_std[:, f_mask], y_train)
... scores.append(knn.score(X_train_std[:, f_mask], y_train))