본문 바로가기
데이터 분석/혼자 공부하는 머신러닝 + 딥러닝

4주차_트리 알고리즘

by yEvery 2025. 7. 27.

기본 숙제(필수): 교차 검증을 그림으로 설명하기

이전에 모델 학습은 훈련 데이터와 테스트 데이터로 나눠서 진행하였다. 이렇게 테스트로 모델을 평가하면 결국에는 테스트 데이터들에 맞춰진 모델을 얻게 된다. 그래서 테스트 데이터는 마지막에 성능을 평가할 때만 사용하는 것이 좋다. 이번 챕터에서는 훈련 데이터로 모델을 학습시키고 검증 데이터로 모델을 검증하고, 테스트 데이터로 평가하였다.  검증 데이터는 기존 훈련 데이터의 일부분을 떼어내서 사용한다. 

교차 검증은 이런 검증 데이터 세트를 떼어내서 평가하는 것을 여러 번 반복하는 것이다. 그런 다음 검증 세트로 평가한 점수를 평균내서 최종 검증 점수를 얻는다. 위 그림과 같이 세 부분으로 나눠서 교차 검증을 하는 것을 3-폴드 교차 검증이라고 한다. 보통 5-폴드나 10-폴드를 많이 사용한다.


추가 숙제(선택): Ch.05(05-3) 앙상블 모델 손코딩(p.290 ~ 295) 코랩 화면 캡처하기

랜덤 포레스트 모델을 사용하는 코드이다. n_jobs를 -1로 설정해서 모든 cpu를 사용하도록 설정하였다.

feature_importances_를 통해 피처 중요도를 확인할 수 있다. 당도가 알코올과 ph에 비해 영향력이 더 큰 것을 알 수 있다.

oob는 out of bag으로 부스스트랩을 사용할 때 들어가지 않은 샘플들이다. 이것으로 훈련한 결정 트리도 평가할 수 있다. 

oob_score_로 점수를 알 수 있다. 이것은 검증 세트의 역할을 한다.

이번에는 엑스트라 트리 모델을 사용한 코드이다.

엑스트라 트리는 랜덤 포레스트와 비슷하게 동작한다. 하지만 부트스트랩을 사용하지 않는다.

랜덤하게 노드를 분할하기 때문에 랜덤 포레스트 보다 계산 속도가 빠른 것이 장점이다.

피처 중요도 역시 당도가 가장 높게 나온 것을 알 수 있다. 하지만 랜덤 포레스트 때보다는 중요도 정도가 작다.

위는 그라디언트 부스팅 모델을 사용한 코드이다. 깊이가 얕은 결정 트리를 사용해서 이전 트리의 오차를 보완해서 앙상블 하는 방법이다. 기본적으로 깊이가 3인 결정 트리를 100개 사용한다. 깊이가 얕기 때문에 과대적합에 강하고, 높은 일반화 성능을 기대해 볼 수 있다. 경사하강법을 사용해서 트리를 앙상블에 추가한다. 첫 번째 출력 결과에서 보면 과대 적합이 거의 되지 않은 것을 알 수 있다. 두 번째 코드에서는 n_estimators를 500으로 해서 결정 트리 개수를 5배 하였고, 학습률인 learning_rate를 0.2로 높였다.

여전히 과대적합이 잘 되지 않은 것을 알 수 있다. 마지막으로 피처 중요도를 확인해봤는데 랜덤 포레스트와 엑스트라 트리 때보다도 당도에 더 집중되어 있는 것을 알 수 있다.

히스토그램 기반 그라디언트 부스팅은 특성을 256개로 나눠서 노드를 분할할 때 빠르게 최적의 분할을 찾을 수 있다.

256개 구간 중 하나는 누락된 값을 위해 사용하기 때문에 입력에 누락된 특성이 있어도 따로 전처리를 할 필요가 없다.

여기서는 트리의 개수를 지정할 때 max_iter를 사용한다. 이 모델은 피처 중요도를 제공하지 않아서 permutation_importance() 함수를 통해 직접 계산하였다. 이 모델 역시 당도의 중요성이 가장 높은 것을 알 수 있다.

XGBoost 모델에서 tree_method를 hist로 설정하면 히스토그램 기반 그라디언트 부스팅을 사용할 수 있다.

LightGBM도 히스토그램 기반 그라디언트 부스팅 라이브러리 중 하나이다. 각각의 평가 점수를 확인할 수 있다.