주제: 랜덤포레스트
작성: 2023-03-04
버젼: ① python : 3. 9.13 ② pandas : 1. 4. 4 ③ sklearn : 1. 1. 1
데이터: Pima Indians Diabetes Database
앙상블의 학습법은 Voting(보팅), Bagging(배깅), Boosting(부스팅), 스태킹(Stacking) 등의 방식이 있습니다. 이 중 보팅과 배깅은 여러 개의 분류리를 통해 투표를 하고 최종 예측 결과를 결정하는 방식입니다. 다만, 보팅은 각각의 분류기에서 서로 다른 알고리즘으로 결합하지만, 배깅은 데이터 샘플링만 다르게 가져가서 같은 알고리즘 분류기를 통해서 학습하는 방식입니다.
후자인 배깅방식으로 활용하는 대표적인 알고리즘은 랜덤포레스트입니다.
이번 포스팅에서는 랜덤포레스트 사용하는 방법에 대해 포스팅 하도록 하겠습니다.
1. 데이터 준비
데이터는 결정트리 알고리즘에 적용했던 같은 데이터를 사용하였습니다. 같은 데이터를 활용하여 결정트리 알고리즘 적용하는 방법이 필요하신분들은 이전 글을 확인부탁드리겠습니다.
Pima Indians Diabetes Database
https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database?resource=download
2. 모델 적용
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Read the dataset
df= pd.read_csv('./diabetes.csv')
# Apply randomforestclassifier model without setting the parameters
rf_clf = RandomForestClassifier(random_state = 70)
# Training the model with the dataset
X_train,X_test, y_train, y_test = train_test_split(df.iloc[:,:-1], df.iloc[:,-1],
test_size =0.3, random_state =77)
rf_clf.fit(X_train, y_train)
# Predect and calculate the accuracy
pred = rf_clf.predict(X_test)
accu = accuracy_score(y_test, pred)
print("랜덤포레스트 예측정화도:{0:.4f}".format(accu)) # 결과값 : 0.7532
결정트리의 예측정화도: 0.6797
랜덤포레스트 예측정화도:0.7532
3. 성능 향상시키기
3.1. 최적의 성능 파라미터 찾기
from sklearn.model_selection import GridSearchCV
parmas={'n_estimators' : [100, 200],
'max_depth' : [6, 8, 10, 12],
'min_samples_leaf': [8,12,18,20],
'min_samples_split' : [8, 16, 25]
}
grid_cv= GridSearchCV(rf_clf,
param_grid = parmas,
cv=2, n_jobs=-1
)
grid_cv.fit(X_train, y_train)
print("Gridsearchcv 최고 평균 정확도 수치 : {0:.4f}".format(grid_cv.best_score_))
print("Gridsearchcv 최적 하이퍼 파라미터:", grid_cv.best_params_)
n_job = -1 인 경우, 모든 CPU코어를 활용하여 학습할 수 있음
3.2 적용
rf_clf2 = RandomForestClassifier(n_estimators=200, max_depth = 8,
min_samples_leaf=12, min_samples_split=8)
rf_clf2.fit(X_train, y_train)
pred = rf_clf2.predict(X_test)
print('{0:.4f}'.format(accuracy_score(y_test, pred)))
Valid parameters are:
- 'bootstrap'
- 'ccp_alpha'
- 'class_weight'
- 'criterion'
- 'max_depth'
- 'max_features'
- 'max_leaf_nodes'
- 'max_samples'
- 'min_impurity_decrease'
- 'min_samples_leaf'
- 'min_samples_split'
- 'min_weight_fraction_leaf',
- 'n_estimators'
- 'n_jobs'
- 'oob_score'
- 'random_state'
- 'verbose'
- 'warm_start'
Reference
- sklearn.ensemble.RandomForestClassifier attributes: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
- [도서] 「파이썬 머신러닝 완벽가이드」 4장 분류
- graphviz 설치 오류: https://wscode.tistory.com/70
- 사잇킬런으로 시작하는 머신러닝: https://wscode.tistory.com/68
728x90
반응형
'Python > 2️⃣ 데이터 처리' 카테고리의 다른 글
파이썬으로 데이터 마스킹하기 - Numpy.ma (1) | 2024.01.10 |
---|---|
웹크롤링으로 SST(Surface Sea Temperature) 데이터 다운로드 자동화하기 (0) | 2023.07.31 |
[머신러닝] 결정트리 실습 - Pima Indians Diabetes Database (0) | 2023.03.03 |
간단한 통계 개념 정리 (0) | 2023.02.14 |
1변량 & 다변량 데이터 및 시각화 방안(with python) (0) | 2023.02.13 |