[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] 특성 자동 선택

inu 2020. 9. 1. 13:01
반응형

특성 자동 선택

  • 특성이 너무 많아지면 모델이 복잡해지고 과대적합 가능성이 올라간다.
  • 따라서 유용한 특성만 선택하고 나머지는 무시해서 특성의 수는 줄이는 것이 좋다.
  • 특성 선택 방법 : 일변량 통계, 모델 기반 선택, 반복적 선택

일변량 통계

  • 특성과 타켓 사이에 중요한 통계적 관계가 있는지 계산하고 깊게 관련된 것만 선택한다.
from sklearn.feature_selection import SelectPercentile

# SelectPercentile을 사용하여 특성의 50%를 선택하는 모델 생성
select = SelectPercentile(percentile=50)

# 특성 선택
select.fit(X_train, y_train)
X_train_selected = select.transform(X_train)

모델 기반 선택

  • 지도 학습 머신러닝 모델을 사용하여 특성의 중요도를 평가, 가장 중요한 것만 선택
  • 지도학습 모델은 최종적으로 사용할 학습 모델과 독립적인 모델임 (같을 필요없음)
  • 해당 모델은 각 특성의 중요도를 측정하여 순서로 매길 수 있어야 함
  • 결정트리 기반의 모델들은 각 특성의 중요도를 featureimportances에 저장하므로 이를 활용할 수 있음
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

# (지도 학습 모델로 계산된) 중요도가 지정한 임계치보다 큰 모든 특성 선택하는 모델제작
# 절반 가량의 특성이 선택될수 있도록 중간값을 임계치로 사용
select1 = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=0),
                         threshold='median')

# 특성 선택
select1.fit(X_train, y_train)
X_train_selected1 = select1.transform(X_train)

반복적 특성 선택

  • 1) 특성을 하나도 선택하지 않은 상태로 시작해 어떤 종료 조건을 도달할 때까지 하나씩 추가하는 방법
  • 2) 모든 특성을 가지고 시작해 어떤 종료 조건이 될 때까지 하나씩 제거하는 방법
  • 두 가지 방법 중 하나를 활용해 특성을 결정한다.
from sklearn.feature_selection import RFE

# 특성 선택
select2 = RFE(RandomForestClassifier(n_estimators=100, random_state=0),
             n_features_to_select=40)

# 특성 선택
select2.fit(X_train, y_train)
X_train_selected2 = select2.transform(X_train)

cf. 선택된 특성 도식화

# 선택된 특성을 표시
mask = select2.get_support()
plt.matshow(mask.reshape(1, -1), cmap='gray_r')
plt.xlabel("feature number")
plt.yticks([0])
plt.title("RFE")
plt.show()

반응형