랜덤 포레스트 같은 분류 모델에서는 타깃 데이터를 예측할 때
다수결로 가장 많은 샘플들이 예측한 결과를 선택한다.
최빈값인 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
'머신러닝, 딥러닝' 카테고리의 다른 글
threshold, precision, recall의 의미 (0) | 2021.02.08 |
---|---|
트리 모델에서 Ordinal 대신 Nominal 인코딩을 해야 하나? (0) | 2021.02.07 |
Decision Tree 모델에서의 feature_importances_의 의미 (0) | 2021.02.07 |
랜덤포레스트 모델의 결측값 대체 방법 (0) | 2021.02.05 |
Ridge Regression (0) | 2021.02.03 |