저번 시간에 배깅과 페이스팅 방식이 무엇인지 알아보고 사이킷런으로 직접 사용까지 해보는 시간을 가졌었다.
이번 시간엔 배깅과 페이스팅을 활용한 랜덤포레스트 알고리즘에 대해 알아보는 시간을 가져보자.
배깅?페이스팅?
데이터셋에 변화를 주어 다양한 예측기를 만들어내는 앙상블 방법 중 하나이다.
랜덤포레스트?
결정트리 기반의 배깅과 페이스팅을 적용한 앙상블 알고리즘이다.
사이킷런에서는 BaggingClassifier()에 DecisionTreeClassifier()을 넣어 만든것과 비슷하나 RandomForestClassifier()을 사용하면 좀 더 편리하게사용이 가능하다.
랜덤포레스트 알고리즘은 트리를 분할할때 무작위성을 추가해 다양한 트리를 만듦으로써 좋은 성능의 모델을 만들어낸다.
RandomForestClassifier()사용법
사이킷런에서 랜덤포레스트 알고리즘을 사용하기 위한 RandomForestClassifier()을 제공한다.
RandomForestClassifier()의 파라미터는 BaggingClassifier()과 DecisionTreeClassifier()의 파라미터를 대부분 포함하고있다.
RandomForestClassifier()파라미터
max_depths | 트리의 최대 깊이. 기본은 None. None일 경우 leaf node에 min_samples_split 수보다 적은 샘플이 남을 때 까지 트리가 확장됨. |
min_samples_split | 노드가 분리되기에 필요한 최소의 샘플 수. 기본은 2 |
min_samples_leaf | leaf node에 남을 최소 샘플 수. 기본은 1 |
n_estimators | 사용할 트리의 수. 기본은 100 |
bootstrap | 데이터에서 중복을 허용할지 여부. 기본은 True |
max_samples | 뽑아낼 샘플의 개수. 정수 혹은 실수가 올 수 있다. 정수인 경우 샘플 갯수, 실수인 경우 전체 데이터수*실수가 된다. 기본은 None. None일 경우 데이터 전체만큼을 뽑아낸다. |
사이킷런의 랜덤 포레스트는 특성 중요도를 확인하기가 쉽다는 장점이있다. 이는 feature_importances_ 변수를 통해 확인이 가능하다.
아래 코드는 MNIST를 랜덤 포레스트와 단일 결정 트리로 만든 모델을 각각 학습시킨 코드다.
from tensorflow.keras.datasets import mnist
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
#mnist data 불러오기 및 가공
(train_X, train_y), (test_X, test_y) = mnist.load_data()
train_X = train_X.reshape([60000,28*28])
test_X = test_X.reshape([10000,28*28])
#단일 결정 트리 모델 만들기 및 훈련
model_tree = DecisionTreeClassifier()
model_tree.fit(train_X,train_y)
#RandomForestClassifier() 모델 만들기 및 훈련
model_trees = RandomForestClassifier()
model_trees.fit(train_X,train_y)
#정확도 테스트
y_pred1 = model_tree.predict(test_X)
y_pred2 = model_trees.predict(test_X)
print("단일 결정트리:",accuracy_score(test_y,y_pred1))
print("랜덤 포레스트:",accuracy_score(test_y,y_pred2))
이번 시간에는 배깅과 페이스팅을 이용한 알고리즘인 랜덤 포레스트에 대해 알아보았다.
혹시 모르거나 잘못된 부분이 있다면 자유롭게 댓글을 통해 알려주세요!
참조
Geron Aurelien, 박해선 역, 핸즈온 머신러닝, 한빛미디어, 2020
'수업내용정리 > 인공지능' 카테고리의 다른 글
[SckitLearn]앙상블 학습의 개념과 사용법(3)_부스팅 (0) | 2023.02.23 |
---|---|
[SckitLearn]앙상블 학습의 개념과 사용법(2)_배깅, 페이스팅 방식 (0) | 2023.02.18 |
[SckitLearn]앙상블 학습의 개념과 사용법(1)_투표방식 (0) | 2023.02.17 |
[SckitLearn]지도학습 알고리즘(4)_SVM 회귀의 특징과 사용법 (0) | 2023.02.15 |
[SckitLearn]지도학습 알고리즘(3)_비선형 SVM 분류기의 특징과 사용법 (0) | 2023.02.14 |