반응형
특성 자동 선택
- 특성이 너무 많아지면 모델이 복잡해지고 과대적합 가능성이 올라간다.
- 따라서 유용한 특성만 선택하고 나머지는 무시해서 특성의 수는 줄이는 것이 좋다.
- 특성 선택 방법 : 일변량 통계, 모델 기반 선택, 반복적 선택
일변량 통계
- 특성과 타켓 사이에 중요한 통계적 관계가 있는지 계산하고 깊게 관련된 것만 선택한다.
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()
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
[scikit-learn 라이브러리] 특이값분해 (SVD) (2) | 2020.09.01 |
---|---|
[scikit-learn 라이브러리] 오차행렬 (0) | 2020.09.01 |
[scikit-learn 라이브러리] 그리드서치 (0) | 2020.09.01 |
Pandas 데이터프레임 출력양 조절 (0) | 2020.08.24 |
[scikit-learn 라이브러리] 교차 검증 (0) | 2020.08.23 |