앙상블 학습 : 일련의 예측기(= 분류나 회귀 모델)로부터 예측을 수집하면 가장 좋은 모델 하나보다 더 좋은 예측을 얻을 수 있을 것.
일련의 예측기 = 앙상블
앙상블 학습 알고리즘 = 앙상블 기법
앙상블 방법의 예 : 훈련 세트로부터 랜덤으로 각기 다른 서브셋을 만들어 일련의 결정 트리 분류기를 훈련시키기
개별 트리의 예측을 모아 가장 많은 선택을 받은 클래스를 앙상블의 예측으로 삼는다.
랜덤 포레스트 : 결정트리의 앙상블, 오늘날 가장 강력한 머신러닝 알고리즘
7.1 투표 기반 분류기
더 좋은 분류기를 만드는 매우 간단한 방법은 각 분류기의 예측을 집계하는 것.
가장 많은 표를 얻은 클래스가 앙상블의 예측이 됨!
직접 투표 분류기 : 다수결 투표로 정해지는 분류기

이 다수결 투표 분류기가 앙상블에 포함된 개별 분류기 중 가장 뛰어난 것보다도 정확도가 높은 경우가 많다.
앙상블에 있는 약한 학습기가 충분하게 많고 다양하다면 앙상블은 강한 학습기가 될 수 있다.
💡이게 가능한 이유는 큰 수의 법칙 때문.
약한 학습기 : 랜덤 추측보다 조금 더 높은 성능을 내는 분류기
강한 학습기 : 높은 정확도를 내는 분류기
❗분류기들이 같은 종류의 오차를 만들기 쉽기 때문에 잘못된 클래스가 다수인 경우가 많고, 앙상블의 정확도가 낮아짐.
💡앙상블 방법은 예측기가 가능한 한 서로 독립적일 때 최고의 성능을 발휘
💡다양한 분류기를 얻는 한 가지 방법 = 각기 다른 알고리즘으로 학습시키는 것. 앙상블 모델의 정확도가 향상됨.
7.2 배깅과 페이스팅
다양한 분류기를 만드는 방법은 같은 알고리즘을 사용하고 훈련 세트의 서브셋을 랜덤으로 구성하여 분류기를 각기 다르게 학습시키는 것이다.
배깅 : 훈련 세트에서 중복을 허용하여 샘플링하는 방식
페이스팅 : 중복을 허용하지 않고 샘플링하는 방식
❗배깅과 페이스팅 - 같은 훈련 샘플을 여러 개의 예측기에 걸쳐 사용가능하지만 배깅만 한 예측기를 위해 같은 훈련 샘플을 여러 번 샘플링 할 수 있다.

- 모든 예측기가 훈련을 마치면 앙상블은 모든 예측기의 예측을 모아 새로운 샘플에 대한 예측을 만든다.
- 집계 함수는 일반적으로 분류일 때는 통계적 최빈값, 회귀에 대해서는 평균을 계산한다.
- 개별 예측기는 원본 훈련세트로 훈련시킨것보다 훨씬 크게 편향되어 있지만 집계 함수를 통과하면 편향과 분산이 모두 감소한다.
- 일반적으로 앙상블의 결과는 원본 데이터 셋으로 하나의 예측기를 훈련시킬 때와 비교해 편향은 비슷하지만 분산은 줄어든다.
- 예측기는 동시에 다른 CPU 코어나 서버에서 병렬로 학습시킬 수 있다.
- 이와 유사하게 예측도 병렬로 수행 할 수 있다.
7.2.1 사이킷런의 배깅과 페이스팅

- 앙상블의 예측이 결정 트리 하나의 예측보다 일반화가 훨씬 잘된다.
- 앙상블은 비슷한 편향에서 더 작은 분산을 만든다.(훈련 세트의 오차 수가 거의 동일하지만 결정 경계는 덜 불규칙)
- 배깅은 각 예측기가 학습하는 서브셋에 다양성을 추가하므로 배깅이 페이스팅보다 편향이 조금 더 높다.
- 다양성을 추가한다는 것은 예측기들의 상관관계를 줄이므로 앙상블의 분산이 줄어든다는 것 의미.
- 전반적으로 배깅이 더 나은 모델을 만들기 때문에 일반적으로 더 선호됨.
- 하지만 시간과 CPU 파워에 여유가 있다면 교차 검증으로 배깅과 페이스팅을 모두 평가해 더 나은 쪽 선택하는 것이 좋음.
7.2.2 OOB 평가
- 랜덤으로 샘플링할 때 선택되지 않은 나머지 샘플을 OOB 샘플이라고 함.
- 예측기가 훈련되는 동안에는 OOB 샘플을 사용하지 않으므로 별도의 검증 세트를 사용하지 않고 OOB 샘플을 사용해 평가할 수 있다.
- 앙상블의 평가는 각 예측기의 OOB 평가를 평균하여 얻는다.
7.3 랜덤 패치와 랜덤 서브스페이스
특성 샘플링 : 각 에측기가 랜덤으로 선택한 입력 특성의 일부분으로 훈련, 훈련 속도를 크게 높일 수 있기에 매우 고차원의 데이터셋을 다룰 때 유용함. 더 다양한 예측기를 만들며 편향을 늘리는 대신 분산을 낮춤.
랜덤 패치 방식 : 훈련 특성과 샘플을 모두 샘플링하는 것
랜덤 서브스페이스 방식 : 훈련 샘플을 모두 사용하고 특성을 샘플링하는 것
7.4 랜덤 포레스트
랜덤 포레스트 : 일반적으로 배깅 방법(또는 페이스팅)을 적용한 결정 트리의 앙상블
- 랜덤 포레스트 알고리즘은 트리의 노드를 분할할 때 전체 특성 중에서 최선의 특성을 찾는 대신 랜덤으로 선택한 특성 후보 중에서 최적의 특성을 찾는 식으로 무작위성을 더 주입함.
- 기본적으로 √n 개의 특성을 선택한다. (n = 전체 특성 개수)
- 이는 결국 트리를 더욱 다양하게 만들고 편향을 손해보는 대신 분산을 낮추어 전체적으로 더 훌륭한 모델을 만들어냄.
7.4.1 엑스트라 트리
- 랜덤 포레스트에서 트리를 만들 때 각 노드는 랜덤으로 특성의 서브셋을 만들어 분할에 사용함.
- 트리를 더욱 랜덤하게 만들기 위해 최적의 임곗값을 찾는 대신 후보 특성을 사용해 랜덤으로 분할하나 다음 그중에서 최상의 분할을 선택함.
익스트림 랜덤 트리 : 극단적으로 랜덤한 트리의 랜덤 포레스트, 편향이 늘어나는 대신 분산이 낮아짐.
일반적인 랜덤 포레스트보다 엑스트라 트리의 훈련 속도가 훨씬 빠르다.
7.4.2 특성 중요도
랜덤 포레스트의 또 다른 장점 : 특성의 상대적 중요도를 측정하기 쉽다.
사이킷런은 평균적으로 불순도를 얼마나 감소시키는지 확인하여 특성의 중요도를 측정함. 정확히는 가중치 평균이며, 각 노드의 가중치는 연관된 훈련 샘플 수와 같음.
사이킷런은 훈련이 끝난 뒤 특성마다 자동으로 이 점수를 계산하고 중요도의 전체 하이 2이 되도록 결괏값을 정규화함.
7.5 부스팅
부스팅 : 약한 학습기를 여러 개 연결하여 강한 학습기를 만드는 앙상블 기법
부스팅 방법의 아이디어 : 앞의 모델을 보완해 나가면서 일련의 예측기를 학습시키는 것
부스팅 방버버 : 여러 가지가 있지만 그 중 AdaBoost와 그레디언트 부스팅이 가장 인기 많음.
7.5.1 AdaBoost
이전 예측기를 보완하는 새로운 예측기를 만드는 방법 = 이전 모델이 과소적합했던 훈련 샘플의 가중치를 더 높이는 것
이렇게 하면 새로운 예측기는 학습하기 어려운 샘플에 점점 더 맞춰지게 된다. 이것이 AdaBoost에서 사용하는 방식이다.

AdaBoost 방식
- 먼저 알고리즘이 기반이 되는 첫 번째 분류기를 훈련 센트에서 훈련시키고 예측을 만든다.
- 알고리즘이 잘못 분류된 훈련 샘플의 가중치를 상대적으로 높인다.
- 두 번째 분류기는 업데이트된 가중치를 사용해 훈련 세트에서 훈련하고 다시 예측을 만든다.
- 다시 가중치를 업데이트 하는 방식으로 계속된다.

- 첫 번째 분류기가 많은 샘플을 잘못 분류해서 이 샘플들의 가중치가 높아졌다.. 따라서 두 번째 분류기는 이 샘플들을 더 정확히 예측하게 된다.
- 오른쪽 그래프는 학습률을 반으로 낮춘 것만 빼고 똑같은 일련의 예측기를 나타낸 것이다. 즉, 잘못 분류된 샘플의 가중치는 반복마다 절반 정도만 높아진다.
- 경사 하강법은 비용 함수를 최소화하기 위해 한 예측기의 모델 파라미터를 조정해가는 반면 AdaBoost는 점차 더 좋아지도록 앙상블에 에측기를 추가한다.
모든 예측기가 훈련을 마치면 이 앙상블은 배깅이나 페이스팅과 비슷한 방식으로 예측을 만든다. 하지만 가중치가 적용된 훈련 세트의 전반적인 정확도에 따라 예측기마다 다른 가중치가 적용된다.
❗연속된 학습 기법에는 중요한 단점이 있다. 각 예측기는 이전 예측기가 훈련되고 평과된 후에 학습될 수 있기 때문에 훈련을 병렬화할 수 없다. 결국 배깅이나 페이스팅만큼 확장성이 높지 않다.
7.5.2 그레이디언트 부스팅
그레이디언트 부스팅 : 앙상블에 이전까지의 오차를 보정하도록 예측기를 순차적으로 추가한다.
📌반복마다 샘플의 가중치를 수정하는 대신 이전 예측기가 만든 잔여 오차에 새로운 예측기를 학습시킨다.
그레이디언트 트리 부스팅 or 그레이디언트 부스티드 회귀 트리 : 결정트리를 기반 예측기로 사용하는 것.

- 왼쪽 열은 이 세트리의 예측이고 오른쪽 열은 앙상블의 예측이다.
- 첫 번째 행에서는 앙상블에 트리가 하나만 있어서 첫 번째 트리의 예측과 완전히 같다.
- 두 번째 행에서는 새로운 트리가 첫 번째 트리의 잔여 오차에 대해 학습되었다.
- 세 번째 행에서는 또 다른 트리가 두 번째 트리의 잔여 오차에 훈련되었다.
- 트리가 앙상블에 추가될수록 앙상블의 예측이 점차 좋아지는 것을 알 수 있다.
learning_rate 매개변수가 각 트리의 기여도를 조절한다.
축소(규제 기법) : learning_rate를 0.05처럼 낮게 설정하면 앙상블을 훈련 세트에 학습시키기 위해 많은 트리가 필요하지만 일반적으로 예측의 성능은 좋아진다.

왼쪽은 훈련 세트를 학습하기에는 트리가 충분하지 않은 반면 오른쪽은 적정한 개수의 트리를 사ㅏ용한다.
트리를 더 많이 추가하면 GBRT가 훈련 세트에 과대적합되기 시작할 것이다.
💡최적의 트리 개수를 찾으려면?
n_iter_no_change 하이퍼 파라미터를 정숫값으로 설정하면 훈련 중에 마지막 10개의 트리가 도움이 되지 않는 경우 트리 추가를 자동으로 중지한다. 조기종료기법..
❗ n_iter_no_change를 너무 낮게 설정하면 훈련이 너무 일찍 중단되어 과소적합, 너무 크게 설정하면 과대적합 위험이 있다.
확률적 그레이디언트 부스팅 : 각 트리가 훈련할 때 사용할 훈련 샘플의 비율을 지정하는 기법, 편향이 높아지는 대신 분산이 낮아지게 된다. 또한 훈련 속도도 상당히 빨라진다.
7.5.3 히스토그램 기반 그레이디언트 부스팅
히스토그램 기반 그레이디언트 부스팅 : 입력 특성을 구간으로 나누어 정수로 대체하는 방식으로 작동한다.
- 구간의 개수는 max_bins 하이퍼파라미터에 의해 제어, 기본값은 255이고 이보다 높게 설정할 수 있다.
- 구간 분할을 사용하면 학습 알고리즘이 평가해야 하는 가능한 임곗값의 수를 크게 줄일 수 있다.
- 정수로 작업하면 더 빠르고 메모리 효율적인 데이터 구조를 사용할 수 있다. 구간을 분할하는 방식 덕분에 각 트리를 학습할 때 특성을 정렬할 필요가 없다.
- HGB가 대규모 데이터셋에서 일반 GBRT보다 수백 배 빠르게 훈련 가능
- 구간 분할은 규제처럼 작동해 정밀도 손실을 유발하므로 데이터셋에 따라 과대적합을 줄이는데 도움이 될 수도 있고 과소적합을 유발할 수도 있다.
- HGB클래스는 범주형 특성과 누락된 값을 지원한다. 그렇기에 전처리가 상당히 간소화된다.
7.6 스태킹
스태킹은 앙상블에 속한 모든 예측기의 예측을 취합하는 간단한 함수를 사용하는 대신 취합하는 모델을 훈련시킬 수 없을까?~~ 하는 아이디어에서 출발했다.
- 블렌더를 훈련하기위해 먼저 블렌딩 훈련 세트를 만든다.
- 앙상블의 모든 예측기에서 원본 훈련 세트에 있는 각 샘플에 대한 표본 외 예측을 얻는다.
- 블렌더를 훈련하기 위한 입력 특성으로 사용하고 타깃은 원본 훈련 세트에서 간단히 복사한다.
- 블렌더가 학습되면 기본 예측기는 전체 원본 훈련 세트로 마지막에 한 번 더 재훈련.

여러 가지 블렌더를 이러한 방식으로 훈련해 전체 블렌더 계층을 얻은 다음 그 위에 다른 블렌더를 추가하여 최종 예측을 생성하는 것이 가능하다.
이렇게 하면 성능을 조금 더 끌어올릴 수 있지만 훈련 시간과 시스템 복잡성 측면에서 비용이 증가한다.

결론
- 앙상블 방법은 다재다능하고 강력하며 사용법이 매우 간단하다.
- 랜덤 포레스트, AdaBoost, GBRT는 대부분의 머신러닝 작업에서 가장 먼저 테스트해야 하는 모델
- 서로 다른 종류로 구성된 표 형식 데이터에서 빛을 발한다.
- 전처리가 거의 필요하지 않기 때문에 프로토타입을 빠르게 구축하는 데 적합하다.
'소프트웨어 > 머신러닝' 카테고리의 다른 글
머신러닝 7주차 (0) | 2025.03.12 |
---|---|
머신러닝 6주차 (1) | 2025.03.05 |
머신러닝 3주차 - 서포트 벡터 머신 , 결정트리 (0) | 2025.02.04 |
머신러닝 2주차 - 모델 훈련 (0) | 2025.01.25 |
머신러닝 1주차 - 분류 (0) | 2025.01.21 |