특성 중요도에 관한 이 절을 마무리하기 위해 사이킷런의 SelectFromModel을 살펴보겠습니다. 이 클래스는 모델 훈련이 끝난 후 사용자가 지정한 임계 값을 기반으로 특성을 선택합니다.20 Pipeline의 중간 단계에서 RandomForestClassifier를 특성 선택기로 사용할 때 유용합니다. 6장에서 살펴볼 Pipeline 클래스는 여러 전처리 단계를 하나의 추정기 인터페이스로 연결해 줍니다. 예를 들어 다음 코드에서는 임계 값을 0.1로 하여 가장 중요한 다섯 개의 특성으로 데이터셋을 줄였습니다.21
>>> from sklearn.feature_selection import SelectFromModel
>>> sfm = SelectFromModel(forest, threshold=0.1, prefit=True)
>>> X_selected = sfm.transform(X_train)
>>> print('이 임계 ... 만족하는 샘플 의 수:', X_selected.shape[1])
이 임계 조건을 만족하는 샘플의 수: 5
>>> for f in range(X_selected.shape[1]):
... print("%2d) %-*s %f" % (f + 1, 30,
... feat_labels[indices[f]],
... importances[indices[f]]))
1) Proline 0.185453
2) Flavanoids 0.174751
3) Color intensity 0.143920
4) OD280/OD315 of diluted wines 0.136162
5) Alcohol 0.118529
20 역주 기본적으로 기반 모델의 coef_나 feature_importances_ 속성과 임계 값을 비교하여 특성을 선택합니다. 사이킷런 0.24 버전에서 비교할 속성을 지정할 수 있는 importance_getter 매개변수가 추가되었습니다. 또한, 임계 값을 지정하는 threshold 매개변수를 'median' 또는 'mean'으로 지정하여 중간 값이나 평균값을 지정할 수 있습니다. 이 매개변수의 기본값은 'mean'입니다.
21 역주 SelectFromModel 클래스의 fit() 메서드는 전달된 기반 모델의 fit() 메서드를 호출하여 훈련시킵니다. 앞에서 랜덤 포레스트 모델을 이미 훈련시켰기 때문에 여기서는 바로 transform() 메서드를 사용할 수 있습니다.