본문 바로가기

수업내용정리/인공지능

[SckitLearn]앙상블 학습의 개념과 사용법(3)_랜덤포레스트

저번 시간에 배깅과 페이스팅 방식이 무엇인지 알아보고 사이킷런으로 직접 사용까지 해보는 시간을 가졌었다.

이번 시간엔 배깅과 페이스팅을 활용한 랜덤포레스트 알고리즘에 대해 알아보는 시간을 가져보자.


배깅?페이스팅?

데이터셋에 변화를 주어 다양한 예측기를 만들어내는 앙상블 방법 중 하나이다.

랜덤포레스트?

결정트리 기반의 배깅과 페이스팅을 적용한 앙상블 알고리즘이다.

사이킷런에서는 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_ 변수를 통해 확인이 가능하다.

[그림 1] 랜덤 포레스트 MNIST 특성 중요도

 

아래 코드는 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