랜덤 포레스트는 다수의 결정 트리로 구성된 앙상블 학습 방법을 사용하는 지도 학습 알고리즘으로, 문제에 대한 최상의 답변으로 합의된 결과를 출력합니다. 랜덤 포레스트는 분류 또는 회귀에 사용할 수 있습니다.
랜덤 포레스트는 다수의 결정 트리로 구성된 앙상블 학습 방법을 사용하는 지도 학습 알고리즘으로, 문제에 대한 최상의 답변으로 합의된 결과를 출력합니다. 랜덤 포레스트는 분류 또는 회귀에 사용할 수 있습니다.
랜덤 포레스트는 분류와 회귀에 많이 사용되는 앙상블 학습 방법입니다.
앙상블 학습 방법은 여러 머신 러닝(ML) 알고리즘을 결합하여 더 나은 모델을 얻는 방식입니다. 이는 데이터 과학에 군중의 지혜를 적용한 개념으로, 문제 도메인에 대해 제한된 지식을 가진 사람들이 단독으로 더 많은 지식을 가진 한 사람보다 더 나은 해결책에 도달할 수 있다는 개념에 기반을 둡니다.
랜덤 포레스트는 결정 트리의 앙상블입니다. 결정 트리는 거의 모든 사람이 익숙한 문제 해결 비유입니다. 결정 트리는 데이터 세트의 여러 요소에 대해 일련의 참/거짓 질문을 하면서 답에 도달합니다. 예를 들어, 한 사람의 소득을 예측하기 위해 결정 트리는 그 사람이 직업이 있는지(예/아니오)와 집을 소유하고 있는지 등의 변수를 살펴봅니다. 알고리즘적 맥락에서 기계는 집합의 관찰(observations)을 그러한 방식으로 분할할 수 있는 특성을 지속적으로 검색하여 결과 그룹이 서로 최대한 다르고 각 독립된 하위 그룹의 구성원이 서로 최대한 유사하도록 합니다.
랜덤 포레스트는 "배깅(bagging)"이라는 기술을 사용하여 데이터 세트와 특징의 무작위 부트스트랩 샘플로부터 병렬로 완전한 결정 트리를 구축합니다. 결정 트리는 고정된 특징 세트를 기반으로 하며 종종 과적합이 발생하지만, 포레스트의 성공에는 무작위성이 매우 중요합니다.
무작위성이 개별 트리 간의 상관관계를 낮추기 때문에 편향의 위험이 줄어듭니다. 트리의 개수가 많아도 과적합 문제가 줄어듭니다. 과적합은 모델이 훈련 데이터에 너무 많은 '노이즈'를 포함하여 정확성이 떨어지는 결과를 낼 때 발생합니다.
랜덤 포레스트 모델에서는 상관되지 않은 트리의 수가 많아질수록 정확한 예측을 할 가능성이 높아집니다. 결과는 다수의 트리가 도달한 결정을 반영하기 때문에 더 높은 품질을 나타냅니다. 이러한 투표 과정은 개별 트리들이 서로의 오류를 제한하여 보호합니다. 일부 트리가 틀리더라도 다른 트리들이 맞을 것이므로, 전체 트리 그룹은 올바른 방향으로 나아갑니다. 랜덤 포레스트 모델은 많은 특징을 고려할 때 실행 속도가 느려질 수 있지만, 제한된 수의 특징을 사용하는 작은 모델도 매우 좋은 결과를 낼 수 있습니다.
랜덤 포레스트의 각 트리는 부트스트랩 집계(배깅)라는 프로세스에서 훈련 데이터의 하위 세트를 무작위 샘플링합니다. 모델은 이러한 하위 데이터 세트에 맞춰 피팅되고 예측 결과가 집계됩니다. 복원 샘플링을 통해 동일한 데이터의 여러 인스턴스를 반복적으로 사용할 수 있고, 그 결과 트리가 다른 여러 데이터 세트에서 훈련을 받을 뿐만 아니라 결정을 내리는 데 다양한 특징들로 학습됩니다.
이미지 출처: KDNuggets
사용 사례
분류의 예로는 다음과 같은 것이 있습니다:
회귀의 예로는 다음과 같은 것이 있습니다.
랜덤 포레스트 모델에는 다음과 같은 네 가지 주요 이점이 있습니다.
몇 가지 단점도 있습니다.
그래디언트 부스팅 결정 트리(GBDT)는 분류와 회귀를 위한 랜덤 포레스트와 비슷한 결정 트리 앙상블 학습 알고리즘입니다. 랜덤 포레스트와 GBDT 모두 여러 개의 결정 트리로 구성된 모델을 구축합니다. 차이점은 구축 및 결합 방식에 있습니다.
GBDT는 부스팅이라는 기술을 사용하여 짧은 결정 트리로 구성된 앙상블을 반복적으로 훈련시키는데, 이렇게 반복할 때마다 이전 모델의 잔차(error)를 사용하여 다음 모델을 맞춥니다. 최종 예측은 모든 트리 예측의 가중합입니다. 랜덤 포레스트 배깅은 분산과 과적합을 최소화하는 반면, GBDT 부스팅은 편향과 과소적합을 줄여줍니다.
XGBoost(eXtreme Gradient Boosting)는 GBDT의 주요 변형으로, 확장 가능하며 분산형입니다. XGBoost에서는 트리가 순차적이 아니라 병렬식으로 생성됩니다. XGBoost는 수준별 전략을 따릅니다. 즉, 그래디언트 값 전체를 검토하고 이러한 부분 합계를 사용하여 훈련 세트의 가능한 모든 분기에서 분기의 품질을 평가합니다.
XGBoost는 광범위한 사용 사례, 이식성, 다양한 언어 지원, 클라우드 통합으로 인해 폭넓은 인기를 얻고 있습니다.
랜덤 포레스트를 XGBoost에 비교할 때, 모델 정확성은 두 가지 분명한 오차 원인인 편향과 분산에 따라 떨어질 수 있습니다.
구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.
CUDA-X AI를 기반으로 구축된 오픈 소스 소프트웨어 라이브러리인 NVIDIA RAPIDS™ 제품군은 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있게 해줍니다. 이 제품군은 NVIDIA CUDA 프리미티브를 사용하여 저수준 컴퓨팅 최적화를 수행하지만, 사용자 친화적인 Python 인터페이스를 통해 GPU 병렬 처리와 고대역폭 메모리 속도를 제공합니다.
RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 데이터를 GPU에서 벗어나지 않고도 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. 이러한 수준의 상호 운용성은 Apache Arrow와 같은 라이브러리를 통해 구현되며, 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다.
RAPIDS의 머신 러닝 알고리즘과 수학적 프리미티브는 Scikit-learn과 같은 익숙한 API를 따릅니다. XGBoost, 랜덤 포레스트 등의 인기 있는 도구는 단일 GPU와 대규모 데이터센터 배포 모두에서 지원됩니다. 대규모 데이터 세트의 경우, GPU 기반 구현은 CPU 기반 구현보다 10~50배 더 빨리 완료될 수 있습니다.
cuML은 이제 멀티 노드의 멀티 GPU 랜덤 포레스트 구축을 지원합니다. 멀티 GPU가 지원되므로 NVIDIA DGX-1 한 대는 코어가 40개인 듀얼 CPU 노드보다 56배 더 빠르게 포레스트를 훈련시킬 수 있습니다.
NVIDIA RAPIDS 담당팀은 DMLC XGBoost 조직과 긴밀히 협력하고 있으며, GPU 가속 XGBoost에는 이제 드롭인 방식의 완벽한 GPU 가속화가 포함되어 있어 모델 훈련의 속도를 상당히 높이고 정확성도 향상해 줍니다. NVIDIA P100 가속기와 32개의 Intel Xeon E5-2698 CPU 코어가 있는 시스템에서 XGBoost 스크립트를 테스트한 결과 GPU가 없는 시스템에서 실행한 동일한 테스트에 비해 출력 품질은 같으면서 속도는 4배 이상 향상된 것으로 나타났습니다. 데이터 사이언티스트는 매개변수를 조정하고 최고의 정확성을 찾기 위해 XGBoost를 보통 여러 번 실행하기 때문에 이러한 결과는 특히 중요합니다.
GPU에서 데이터 사이언스를 실제로 확장하기 위해서는 애플리케이션에 엔드투엔드 가속화가 필요합니다. cuML은 이제 새로운 포레스트 추론 라이브러리(FIL)를 비롯하여 GPU에서 트리 기반 모델에 대해 한 단계 진화된 지원을 제공합니다. FIL은 그래디언트 부스팅 결정 트리와 랜덤 포레스트 등의 트리 기반 모델을 사용하여 추론을 실행하는 GPU 가속 경량 엔진입니다. 사용자는 V100 GPU 한 개와 Python 코드 두 줄로 저장된 XGBoost 또는 LightGBM 모델을 로드하여 코어 20개의 듀얼 CPU 노드보다 최대 36배 더 빠른 속도로 새로운 데이터에서 추론을 수행할 수 있습니다. 오픈 소스 Treelite 패키지를 기반으로, 다음 버전의 FIL에는 Scikit-learn 및 cuML 랜덤 포레스트 모델에 대한 지원도 추가될 예정입니다.
더 알아보기: