본문 바로가기

머신러닝, 딥러닝

랜덤포레스트 모델에서 Select K Best를 사용해야 할까?

랜덤 포레스트 같은 분류 모델에서는 타깃 데이터를 예측할 때

다수결로 가장 많은 샘플들이 예측한 결과를 선택한다.

최빈값인 median을 사용하는 셈이다.

 

랜덤 포레스트에서는 기본 모델의 트리를 만들 때 무작위로 선택한 특성 세트를 사용한다.

의사결정 나무(Decision tree)에서는 데이터가 가진 모든 특성을 고려하여 최적의 특성을 고르고 분할하지만,

랜덤 포레스트에서는 전체 특성이 n 개라면, 일반적으로 log 2 n 개의 특성을 선택하고, 그 log 2 n 개에서 최적의 특성을 찾아내어 분할한다.

따라서 Select K Best를 사용할 필요가 없다.

하지만 찾아보니, 트리 기반의 평가 모델에서는 SelectFromModel을 함께 사용하면 불순도를 낮추는 데 중요하게 기여하는 특성을 계산하고, SelectFromModel을  관계없는 특성을 버린다고 한다. 

from sklearn.ensemble import RandomForestClassfier
from sklearn.feature_selection import SelectFromModel

# will select those features which importance is greater than the mean importance of all the features by default
sel = SelectFromModel(RandomForestClassifier(n_estimators = 100))
sel.fit(X_train, y_train)

sel.get_support() #To see which features are important

# make a list and count the selected features
selected_feat= X_train.columns[(sel.get_support())]
len(selected_feat)

 

하지만 트리 모델은 일반적으로 cardinality가 높은 특징을 선호하는 bias를 가지고 있다고 한다.

또한 랜덤포레스트 모델에서는 무작위로 샘플을 만들기 때문에, 상관관계가 있는 feature의 중요성이 실제보다 더 낮게 보일 수 있다.

출처 https://towardsdatascience.com/feature-selection-using-random-forest-26d7b747597f