: 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정
부트스트랩
: 통계학에서 여러 개의 작은 데이터 세트를 임의로 만들어 개별 평균의 분포도를 측정하는 등의 목적을 위한 샘플링 방식
전체 데이터를 부트스트래핑 방식으로 만들어진 데이터 세트 = 서브세트
서브 세트의 데이터 건수는 전체 데이터 건수와 동일하지만 중첩
예) n_estimators = 3 으로 하이퍼 파라이터 부여 시 아래와 같은 방식으로 분할
사용자 행동 인식 데이터 예측
사이킷런의 RandomForestClassifier 클래스 랜덤 포레스트 기반의 분류 지원
# 데이터 세트 만든 후의 코드
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 결정 트리에서 사용한 get_human_dataset( )을 이용해 학습/테스트용 DataFrame 반환
X_train, X_test, y_train, y_test = get_human_dataset()
# 랜덤 포레스트 학습 및 별도의 테스트 셋으로 예측 성능 평가
rf_clf = RandomForestClassifier(random_state=0)
rf_clf.fit(X_train , y_train)
pred = rf_clf.predict(X_test)
accuracy = accuracy_score(y_test , pred)
print('랜덤 포레스트 정확도: {0:.4f}'.format(accuracy))
랜덤 포레스트 정확도: 0.9253
트리 기반 앙상블 알고리즘의 단점
: 하이퍼 파라미터가 많아 튜닝을 위한 시간이 많이 소모됨 + 튜닝 후 예측 성능이 크게 향상 되지 X
하이퍼 파라미터 종류
1. 트리 기반 자체의 하이퍼 파라미터
2. 배깅, 부스팅, 학습, 정규화 등을 위한 하이퍼 파라미터
하이퍼 파라미터 튜닝 : GridSearchCV 사용
from sklearn.model_selection import GridSearchCV
params = {
'n_estimators':[100],
'max_depth' : [6, 8, 10, 12],
'min_samples_leaf' : [8, 12, 18 ],
'min_samples_split' : [8, 16, 20]
}
# RandomForestClassifier 객체 생성 후 GridSearchCV 수행
rf_clf = RandomForestClassifier(random_state=0, n_jobs=-1)
grid_cv = GridSearchCV(rf_clf , param_grid=params , cv=2, n_jobs=-1 )
# cv는 2, n_jobs=-1 파라미터를 추가하면 모든 CPU코어를 이용해 학습할 수 있음
grid_cv.fit(X_train , y_train)
print('최적 하이퍼 파라미터:\n', grid_cv.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))
최적 하이퍼 파라미터: {'max_depth': 10, 'min_samples_leaf': 8, 'min_samples_split': 8, 'n_estimators': 100}
최고 예측 정확도: 0.9180
최적 하이퍼 파라미터 출력됨, 이를 이용해 테스트 데이터의 예측 성능 측정해보자
별도의 테스트 데이터 세트에서 예측 성능 측정
rf_clf1 = RandomForestClassifier(n_estimators=300, max_depth=10, min_samples_leaf=8, \
min_samples_split=8, random_state=0)
rf_clf1.fit(X_train , y_train)
pred = rf_clf1.predict(X_test)
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test , pred)))
예측 정확도: 0.9165
피쳐 중요도 시각화
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
ftr_importances_values = rf_clf1.feature_importances_
ftr_importances = pd.Series(ftr_importances_values,index=X_train.columns )
ftr_top20 = ftr_importances.sort_values(ascending=False)[:20]
plt.figure(figsize=(8,6))
plt.title('Feature importances Top 20')
sns.barplot(x=ftr_top20 , y = ftr_top20.index)
fig1 = plt.gcf()
plt.show()
plt.draw()
fig1.savefig('rf_feature_importances_top20.tif', format='tif', dpi=300, bbox_inches='tight')
tGravityAcc-min()-X가 가장 높은 피처 중요도를 가지고 있다.
[기후위기] 주요 용어 정리 (GHG, ... ) (0) | 2024.07.11 |
---|---|
[LCA] Ecochain의 LCA Beginner Course (1) What is LCA? (0) | 2024.07.05 |
[파이썬 머신러닝 완벽 가이드] 04 분류 (5) 앙상블 (0) | 2024.05.28 |
[영어] 영어 에세이 작성하는 방법 (0) | 2024.05.02 |
[SDGs] 네옴시티 (0) | 2024.04.24 |