Study/AI

[AI][ML]랜덤 포레스트(Random Forest)

seomj 2022. 8. 12. 15:15

랜덤 포레스트

분류, 회귀 분석 등에 사용되는 앙상블 학습 방법의 일종

훈련 과정에서 구성한 다수의 결정 트리로부터 분류 또는 회귀 분석을 출력

 

포레스트 숲

결정트리 나무

나무가 모여 숲을 이룬다

 

즉, 결정 트리가 모여 랜덤 포레스트를 구성

 

훈련을 통해 구성해 놓은 다수의 나무들로부터 분류 결과를 취합해서 결론을 얻는 방식

몇몇의 나무들이 오버피팅을 보일 수는 있지만 다수의 나무를 기반으로 예측하기 때문에 그 영향력이 줄어들게 되어 좋은 일반화 성능을 보인다.

이처럼 좋은 성능을 얻기 위해 다수의 학습 알고리즘을 사용하는 걸 앙상블(ensemble) 학습법이라고 한다.

 

여러 결정 트리들이 내린 예측 값들 중 가장 많이 나온 최종 예측 값으로 결정

즉, 하나의 거대한 결정 트리를 만드는 것이 아닌 여러 개의 작은 결정 트리를 만드는 것

여러 개의 작은 결정 트리가 예측한 값들 중 가장 많은 값(분류) 혹은 평균 값(회귀)을 최종 예측 값으로 정하는 것

문제를 풀 때도 한 명의 똑똑한 사람보다 100명의 평범한 사람이 더 잘 푸는 원리와 동일

 

결정 트리의 경계는 다소 모호하고 오버피팅되어 있다. 5개의 결정 트리 경계를 평균 내어 만든 랜덤 포레스트의 경계는 보다 깔끔하다.

 

 

파라미터

n_estimators: 랜덤 포레스트 안의 결정 트리 개수

 

해당 파라미터 값이 클수록(=결정 트리가 많을수록) 더 깔끔한 Decision Boundary가 나온다.

그러나 메모리와 훈련 시간이 증가한다.

 

max_features: 무작위로 선택할 Feature의 개수

 

값이 크면 랜덤 포레스트의 트리들이 비슷해지고, 가장 두드러진 특성에 맞게 예측할 것이다.

값이 작으면 랜덤 포레스트의 트리들이 서로 매우 달라지며, 오버피팅이 줄어들 것이다.


실습

- 데이터 확인

 

- 모델 생성

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, random_state=0)
model = RandomForestClassifier()
model.fit(X_train, y_train)
pred = model.predict(X_test)

 

- 결과 확인

 

 

 

출처

https://hleecaster.com/ml-random-forest-concept/

https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-5-%EB%9E%9C%EB%8D%A4-%ED%8F%AC%EB%A0%88%EC%8A%A4%ED%8A%B8Random-Forest%EC%99%80-%EC%95%99%EC%83%81%EB%B8%94Ensemble

'Study > AI' 카테고리의 다른 글

[AI][ML]얼굴 검출  (0) 2022.08.15
[AI][ML]앙상블(Ensemble)  (0) 2022.08.12
[AI][ML]결정 트리(Decision Tree)  (0) 2022.08.11
[AI][ML]나이브 베이즈(Naive Bayes)  (0) 2022.08.10
[AI][ML]SVM(Support Vector Machine)  (0) 2022.08.10