✔ Python/1. Data Science

[머신러닝] 랜덤포레스트 예시 - Pima Indians Diabetes Database

  • -
주제:  랜덤포레스트
작성: 2023-03-04
버젼: ① python : 3. 9.13   ② pandas : 1. 4. 4   ③ sklearn : 1. 1. 1
데이터: Pima Indians Diabetes Database

앙상블의 학습법은 Voting(보팅), Bagging(배깅), Boosting(부스팅), 스태킹(Stacking) 등의 방식이 있습니다. 이 중 보팅과 배깅은 여러 개의 분류리를 통해 투표를 하고 최종 예측 결과를 결정하는 방식입니다. 다만, 보팅은 각각의 분류기에서 서로 다른 알고리즘으로 결합하지만, 배깅은 데이터 샘플링만 다르게 가져가서 같은 알고리즘 분류기를 통해서 학습하는 방식입니다. 

Voting(보팅)과 Bagging(배깅)의 차이

후자인 배깅방식으로 활용하는 대표적인 알고리즘은 랜덤포레스트입니다.
이번 포스팅에서는 랜덤포레스트 사용하는 방법에 대해 포스팅 하도록 하겠습니다.


1. 데이터 준비

데이터는 결정트리 알고리즘에 적용했던 같은 데이터를 사용하였습니다.  같은 데이터를 활용하여 결정트리 알고리즘 적용하는 방법이 필요하신분들은 이전 글을 확인부탁드리겠습니다.

Pima Indians Diabetes Database
https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database?resource=download
 

Pima Indians Diabetes Database

Predict the onset of diabetes based on diagnostic measures

www.kaggle.com

 

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

  1. sklearn.ensemble.RandomForestClassifier attributes: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
  2. [도서] 「파이썬 머신러닝 완벽가이드」 4장 분류
  3. graphviz 설치 오류: https://wscode.tistory.com/70
  4. 사잇킬런으로 시작하는 머신러닝: https://wscode.tistory.com/68
 

[머신러닝] 사이킷런으로 시작하는 머신러닝

주제: 사이킷런으로 시작하는 머신러닝 작성: 2023-02-04 버젼: pandas 1.4.4 / sklearn 1.1.1 활용데이터: 붓꽃 데이터(from sklearn.datasets import load_iris) 안녕하세요, 루카스입니다. 오늘은 파이썬 머신러닝으

wscode.tistory.com

 

sklearn.ensemble.RandomForestClassifier

Examples using sklearn.ensemble.RandomForestClassifier: Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.24 Release Highlights for scikit-learn 0.22 Release Highlights...

scikit-learn.org


 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.