안녕하세요 배도리입니다. 저번 게시글에서 정보 이득 기준만을 사용한다면 속성의 가지 수가 많을 때 과적합이 발생하는 문제가 발생한다는 설명을 했습니다. 계속 데이터를 분할(의사결정나무의 깊이가 깊어짐) 하다보면 정보의 가치가 높아지나 그 가치는 훈련데이터에만 해당되고 새로운데이터에는 적용하기가 어려워지는 문제가 생깁니다. 이걸 방지하기위해 정보이득율로 정규화를 진행했는데 다른 방법 또한 확인하겠습니다.
먼저, 과적합.. 자주 설명했습니다만 한번더 하겠습니다. 과적합(overfitting)이란 모델이 학습 데이터에 너무 잘 맞아서 새로운 데이터에는 잘 일반화되지 않는 현상을 말합니다.
과적합 방지 전략
1. 나무 성장 멈추기(Stop condition)
의사결정나무를 생성하면서 특정 조건을 만족하면 성장을 멈추는 방법입니다. 예를 들어, 나무의 깊이(depth)를 제한하거나 리프 노드가 가질 수 있는 최소 샘플 수를 제한하거나 노드 내의 최소 관측치의 수를 지정하는 방법 등이 있습니다. 이 방법은 모델의 복잡도를 제한함으로써 과적합을 방지할 수 있습니다.
2.가지치기(Pruning) → 다해보고 결정하자 ㅎㅎ
의사결정나무 모델이 완성된 후에 불필요한 가지를 제거하는 과정입니다. 이는 데이터를 버리는 개념이 아니라 분류가 명확하지 않은 데이터를 합치는 개념으로 이해하면 됩니다. 가지치기는 보통 학습 데이터로 의사결정나무를 만든 후 검증 데이터로 가지치기를 수행합니다. 모델의 복잡도를 줄이고 일반화 성능을 향상시키기 위한 방법입니다.
가지치기의 단계는 다음과 같습니다.
Step 1: 데이터를 학습 데이터, 검증 데이터, 테스트 데이터로 분류합니다.
Step 2: 학습 데이터를 이용하여 의사결정나무를 생성합니다.
Step 3: 검증 데이터를 이용하여 가지치기를 수행합니다. 가지치기 비용 함수를 최소로 하는 분기를 찾습니다. 비용 함수는 오류와 터미널 노드 수를 고려하며, 이 둘 사이의 가중치는 사용자가 설정합니다.
비용함수 Cost(T)는 오분류율과 모델의 복잡도 사이의 균형을 나타내는 척도입니다. 이 값을 최소화하는 분기를 찾아내어 가지치기를 수행함으로써, 과적합을 방지하고 모델의 일반화 성능을 향상시킵니다.비용함수는 다음과 같이 정의됩니다
Cost(T) = Err(T) + α * L(T)
T는 현재 트리를 의미
Err(T)는 검증 데이터에 대한 오분류율, 이 값이 작을수록 모델의 성능이 좋다는 것을 의미
L(T)는 리프 노드(결정 노드)의 수, 이 값은 모델의 복잡도를 나타내며, 값이 클수록 모델이 복잡해진다는 것을 의미
α는 Err(T)와 L(T) 사이의 가중치, 이 값은 사용자가 설정(α 값은 일반적으로 0.01 ~ 0.1 사이의 값)
Step 4: 가지치기가 완료된 의사결정나무를 이용하여 테스트 데이터의 결과를 예측합니다.

회귀나무
회귀 나무(Regression Tree)는 목표 변수가 수치형 변수(예: 키, 무게, 부동산 가격 등)일 때 사용되는 의사결정나무 알고리즘입니다. 분류나무(Classification Tree)와 비교했을 때, 차이점은 목표 변수의 유형과 불순도 측정 방법입니다.
회귀 나무에서는 결과를 예측하기 위해 끝 노드(leaf node)에 속하는 데이터들의 평균 값을 사용합니다. 이는 각 끝 노드가 해당 영역의 목표 변수의 평균 값을 반환하는 것으로, 이 평균 값이 새로운 데이터 포인트의 예측 값이 됩니다.
회귀 나무에서는 불순도 측정 방법으로 SSE(Sum of Squared Errors)를 사용합니다. SSE는 각 데이터 포인트의 실제 값과 예측 값의 차이를 제곱하여 모두 더한 값입니다.

y_i는 i번째 데이터 포인트의 실제 값, ŷ_i는 i번째 데이터 포인트의 예측 값
회귀 나무의 성능 평가 방법으로는 주로 RMSE(Root Mean Squared Error)가 사용됩니다. 이전에 선형회귀분석에도 설명드렸던 RMSE는 SSE를 데이터의 개수로 나눈 후 제곱근을 취한 값으로, 모델의 예측 오차를 평가하는 척도입니다.

이렇게 구축된 회귀 나무는 예측이 주 목적일 경우, 신경망이나 다른 회귀 분석 방법에 비해 성능이 떨어질 수 있습니다. 하지만, 데이터의 구조와 관계를 명확하게 이해하고 설명하는 데에는 매우 유용하게 사용될 수 있습니다.
이제 지금까지 설명드렸던 재귀적 분할 알고리즘들을 한번 비교해보겠습니다.

앙상블
앙상블(Ensemble)
다수의 표본, 다수의 모델에서 나온 결과를 다수결 (voting)로 결정하는 것을 말하며 즉, 여러 개의 모델을 결합해 최종 예측을 수행하는 기법입니다. 모델들이 각각 학습과 예측을 수행하고, 그 결과를 종합하는 방식이 앙상블 방식입니다. 앙상블 기법은 모델의 과적합을 막고, 일반화 성능을 향상시키는 데 도움이 됩니다.
랜덤 포레스트(Random Forest)
앙상블 기법 중 하나로, 여러 개의 결정 트리를 생성하고 그 결과를 평균내는 방식입니다. 여러 개의 'weak learner'를 결합하여 'single learner'보다 더 좋은 성능을 내는 학습 모델입니다. 이것은 '앙상블 학습'의 기본 아이디어로, 여러 개의 약한 학습기가 결합함으로써 강한 학습기를 만들 수 있다는 것을 기반으로 합니다.
'weak learner'는 결정 트리 학습 모델을 의미하는데, 일부 데이터만을 학습하여 생성된 결정 트리입니다. 즉, 전체 데이터 세트에서 임의로 선택된 부분 데이터 세트를 학습하며 이는 보통 부트스트래핑이라는 복원 추출 방식을 통해 이루어집니다.
'single learner'는 전체 데이터 세트를 학습하여 생성된 하나의 결정 트리를 의미합니다. 이는 전체 데이터를 통해 만들어진 모델로서 개별적으로는 한정적인 성능을 보일 수 있지만, 이들을 모아서 결과를 도출함으로써 오류를 상쇄하고 성능을 향상시킬 수 있습니다.
랜덤 포레스트는 이러한 여러 weak learner들의 결정을 종합함으로써 single learner의 단점을 극복하고, 더 높은 예측 성능을 달성하는 방식을 사용합니다. 이렇게 각기 다른 학습 데이터로 학습된 여러 개의 weak learner들이 결합하여 결과를 도출합니다.
다음은 랜덤포레스가 이뤄지는 과정에서 적용되는 기법입니다.
랜덤 포레스트의 부스트트랩(Bootstrap)
Bootstrap은 통계학에서 주로 사용하는 리샘플링 기법 중 하나입니다. 이 기법은 원본 데이터 세트에서 중복을 허용하여 무작위로 데이터를 선택하고, 이렇게 선택된 데이터를 새로운 데이터 세트로 구성하는 과정을 의미합니다. 이러한 방법은 원본 데이터의 특성을 잘 보존하면서 다양한 데이터 세트를 생성할 수 있다는 장점이 있습니다.
랜덤 포레스트에서는 Bootstrap 방식을 이용하여 각각의 결정 트리를 학습시키는데 사용할 데이터 세트를 생성합니다. 원본 데이터 세트와 동일한 크기의 부트스트랩 샘플을 사용하여 각 트리를 생성하며, 이렇게 생성된 각각의 트리는 약간씩 다른 데이터 세트에서 학습되었기 때문에, 각각 다양한 방식으로 데이터를 해석하게 됩니다. 이런 방식으로 생성된 다수의 결정 트리들이 결과를 종합함으로써 랜덤 포레스트는 고품질의 예측을 제공하게 됩니다.
랜덤 포레스트의 (Bagging, Bootstrap aggregating)
이 방법은 원래 데이터 세트로부터 무작위로 선택하여 중복을 허용한 부트스트랩 샘플을 만든 후, 이를 이용해 여러 개의 모델을 별도로 학습시키는 방법입니다. 각 모델은 독립적으로 학습되며, 그 결과는 결합되어 최종 예측을 생성합니다. 배깅의 핵심 목표는 모델의 분산을 줄이는 것입니다. 각 모델은 데이터의 다른 샘플로 학습되므로, 모델 간에 다양성이 증가하게 됩니다.
종합하면 랜덤 포레스트의 핵심 과정은 다음과 같습니다
1. 부트스트랩 방법으로 여러 개의 샘플을 생성합니다. 이렇게 생성된 각 샘플로 별개의 결정 트리를 학습시킵니다.
2. 각 트리는 독립적으로 학습되며, 자신만의 예측 결과를 도출합니다.
3. 학습된 여러 결정 트리들의 예측 결과를 결합합니다. 결합 방식은 문제의 유형에 따라 달라집니다.
- 분류 문제의 경우, 각 트리의 예측을 '투표'하여 가장 많이 나온 클래스를 최종 예측 결과로 선택합니다. 이를 '다수결 투표'라고도 합니다.
- 회귀(예측) 문제의 경우, 각 트리의 예측값을 평균내어 최종 예측값을 계산합니다.

이런 방식으로, 랜덤 포레스트는 여러 개의 결정 트리를 학습시키고 그 결과를 통합함으로써 단일 트리보다 높은 성능을 얻을 수 있습니다. 각각의 트리가 데이터의 다른 부분을 학습하므로, 트리 간의 다양성이 증가하고 이를 통해 과적합을 방지하고 모델의 안정성을 향상시킵니다. 또한 각 결정 트리가 다양성을 가지고 있기 때문에 전체 모델의 분산이 줄어든다는 점입니다. 즉, 각 트리가 서로 다른 부트스트랩 샘플을 가지고 학습을 수행하므로, 각각의 트리는 서로 다른 특성을 갖게 됩니다. 이로 인해 각 트리의 예측이 상관관계가 떨어지며, 이는 앙상블 모델의 분산을 줄이는 효과를 가져옵니다.
하지만 이런 방식은 각각의 결정 트리가 복잡해지면서 개별 트리를 해석하기 어렵게 만들 수 있습니다. 결정 트리의 장점 중 하나인 '모델의 해석 가능성'이 약해질 수 있습니다. 그럼에도 불구하고, 랜덤 포레스트는 예측 성능이 우수하며, 각 특성의 중요도를 측정할 수 있어, 중요한 특성을 판별하는 데 유용하게 사용될 수 있습니다.
'Machine Learning_모델설계_Python' 카테고리의 다른 글
| SVM_1 개념 (1) | 2023.07.06 |
|---|---|
| 의사결정나무_4 코드 실습 (0) | 2023.07.04 |
| 의사결정나무_2 분류나무 (0) | 2023.06.30 |
| 의사결정나무_1 개념 (0) | 2023.06.28 |
| 판별분석_5 LDA, QDA 실습 (0) | 2023.06.16 |