Note ≡
역주 RFE는 재귀적 특성 제거 방법을 사용합니다. 처음에 모든 특성을 사용하여 모델을 만들고 특성 중요도가 가장 낮은 특성을 제거합니다. 그다음 제외된 특성을 빼고 나머지 특성으로 새로운 모델을 만듭니다. 이런 식으로 미리 정의한 특성 개수가 남을 때까지 계속합니다.
RFE 클래스의 n_features_to_select 매개변수에 선택할 특성의 개수를 지정합니다. 사이킷런 0.24 버전부터 [0, 1] 범위의 실수를 지정하여 선택할 특성의 비율을 지정할 수도 있습니다. 기본값은 입력 특성 개수의 절반입니다.
step 매개변수에서 각 반복에서 제거할 특성의 개수를 지정합니다. (0, 1) 사이의 값을 지정하면 삭제할 특성의 비율이 됩니다. 기본값은 1입니다.
기본적으로 기반 모델의 coef_나 feature_importances_ 속성을 기준으로 특성을 제거합니다. 사이킷런 0.24 버전에서 사용할 속성을 지정할 수 있는 importance_getter 매개변수가 추가되었습니다.
SelectFromModel과 비교하기 위해 다섯 개의 특성을 골라 보겠습니다.
>>> from sklearn.feature_selection import RFE
>>> rfe = RFE(forest, n_features_to_select=5)
>>> rfe.fit(X_train, y_train)
ranking_ 속성에는 선택한 특성의 우선순위가 들어 있습니다. 1은 기반 모델이 선택한 다섯 개의 특성입니다.
>>> rfe.ranking_
array([1, 5, 9, 6, 4, 3, 1, 8, 7, 1, 2, 1, 1])
선택된 특성은 support_ 속성에 True로 표시됩니다. 이 값을 f_mask로 저장하여 특성의 이름을 표시하는 데 사용하겠습니다.
>>> f_mask = rfe.support_
훈련된 기반 모델(랜덤 포레스트)은 estimator_ 속성에 저장되어 있습니다. 이 모델은 n_features_to_select개의 특성을 사용하여 훈련되어 있습니다. 이 모델의 특성 중요도를 저장하여 앞에서와 같이 중요도 순서대로 출력해 보겠습니다.
>>> importances = rfe.estimator_.feature_importances_
>>> indices = np.argsort(importances)[::-1]
>>> for i in indices:
... print("%2d) %-*s %f" % (f + 1, 30,
... feat_labels[f_mask][i],
... importances[i]))
5) Proline 0.261512
5) Color intensity 0.216477
5) Flavanoids 0.212259
5) OD280/OD315 of diluted wines 0.188924
5) Alcohol 0.120828
기반 모델을 동일한 랜덤 포레스트로 사용했기 때문에 SelectFromModel 클래스로 선택한 특성과 순서가 약간 바뀌었을 뿐 같은 것을 볼 수 있습니다.