티스토리 뷰
Decision Tree
의사결정나무(Decision Tree)란?
:질문과 조건을 통해 데이터를 분류하고 예측하는 머신러닝 알고리즘, 마치 나무가 가지를 뻗어나가듯 결정을 이끌어냅니다.
위와 같은 도형들이 있다. 위의 도형을 분류한다고 해보자.
어떻게 해야할까?
우리는 처음에 물어볼 수 있다.
Q. 이 도형은 동그라미니?
그렇다면 동그라미인 것 4개와 동그라미가 아닌 4개로 분류된다.
Q. 이 도형은 삼각형이니?
그렇다면 삼각형인 것과 삼각형이 아닌 것(동그라미와 네모)로 분류된다.
이러한 방식으로 질문을 하면서 분류를 해나가는 것이 의사결정나무이다.
왜 나무냐면 이를 나무형식으로 표현할 수 있기 때문이다.
그렇다면 어떻게 분류하는 것이 잘 분류한 것일까?
-> 엔트로피를 사용할 수 있다.
엔트로피의 식을 보자.
$$ H(s) = - \displaystyle{\sum_{c \in C}} p(c) \log_2 p(c) $$
예를 들어 분류가 4:4로 되었다면 각 확률은 4/8, 4/8이니까 이를 곱하면 0.5 x log 0.5 가 된다.
이는 값이 1이 되며 무작위나 다름이 없다.
만약 6:2로 분류되었다면?
2.18872이 된다.
그렇다면 이 엔트로피를 통해 정보 이득(Information gain)이라는 것을 얻을 수 있다.
$$ H(S) - ( \frac{|S_1|}{|S_2|} H(S_1) + \frac{|S_2|}{|S|} H(S_2) )$$
이는 이전 노드의 엔트로피에서 다음 노드의 엔트로피를 빼는 것인데, 이 값이 높을수록 더 정보를 잘 분류했음을 의미한다.
왼쪽과 오른쪽을 본다면
왼쪽은 6:2로 분류가 되었고, 오른쪽은 4:4로 분류가 되었다.
왼쪽의 분류가 좋다는 것을 보여준다.
각 노드마다 모든 피쳐에 대해 각 분류를 해보며 가장 잘 분류가 되는 것을 Greedy하게 나누어 간다.
여기서 언제까지 트리가 분류를 해나갈지를 설정할 수 있는데, 4가지 조건을 든다.
- 최대깊이도달: Tree의 최대깊이에 도달했을 때
- 최소샘플수: 노드에 속한 샘플수가 미리설정한 것보다 적을 때
- 클래스 순도: 노드 내의 모든 데이터가 하나의 클래스에 속할 때
- Information Gain: 추가적인 분할로 얻게되는 Information gain이 미리 설정한 값보다 작을 때
이 중에 가장 선호되는 방법이 '최대깊이도달'이다.
그 이유는 과적합을 방지하는 것이다.
현재 데이터에만 완벽하게 분할하는 모델은 좋지 않다.
Decision Tree 기반 회귀모델
트리를 이용해 회귀도 할 수 있다고 한다.
근데 위에선 엔트로피를 사용했는데 아래에선 MSE를 사용한다고 한다.
$$ \text{MSE} = \frac{1}{n} \displaystyle{\sum_{i=1}^n} (y - \hat{y})^2 $$
이를 이전 노드와 이후 노드의 차이를 계산한다.
$$ \text{MSE}_S - (\frac{|S_1|}{|S|} \text{MSE}_{S_1} + \frac{|S_2|}{|S|} \text{MSE}_{S_2})$$
뭔소린지 잘 몰라서 챗지피티한테 물어보았다.
의사결정나무 회귀 (Regression)
회귀는 숫자를 예측하는 작업이에요. 예를 들어, 나무의 나이를 예측하는 거죠. 회귀에서 결과는 숫자예요.
예시
- 질문: 나무의 높이는 몇 미터인가요?
- 대답: 10미터 이상 (오른쪽), 10미터 미만 (왼쪽)
- 이렇게 계속 질문을 하면서 나무의 나이를 예측해요.
결과: 12살, 15살 같은 특정 숫자를 예측해요.
차이점 요약
- 결과 타입:
- 분류: 그룹(카테고리)을 예측해요. 예: 고양이, 개.
- 회귀: 숫자를 예측해요. 예: 나무의 나이(12살, 15살).
- 질문과 대답:
- 분류: 예/아니요 같은 간단한 질문으로 그룹을 나눠요.
- 회귀: 숫자 기준으로 데이터를 나눠요. 예: 높이가 10미터 이상인가요?
- 적용 분야:
- 분류: 어떤 카테고리에 속하는지 알고 싶을 때 사용해요. 예: 이메일이 스팸인지 아닌지.
- 회귀: 특정 값을 예측하고 싶을 때 사용해요. 예: 집 값, 온도.
둘은 원리는 비슷하지만, 하나는 대상을 내놓고 하나는 평균을 내놓는다.
Ensemble
하나의 데이터로 여러 모델을 만들고 이 중 가장 좋은 예측값을 사용하는 것이다.
이러한 모델을 만드는 방법을 배깅이라고 한다.
배깅(Bagging)
배깅은 부트스트래핑으로 여러 번 데이터를 샘플링해서 여러 모델을 학습시키는 방법이다.
부트스트래핑이란?
부트스트래핑에 대해 쉽게 설명해볼게요. 부트스트래핑은 데이터를 무작위로 여러 번 뽑아서 새로운 데이터를 만드는 방법이에요. 이를 통해 여러 모델을 학습시키거나 데이터의 특성을 더 잘 이해할 수 있어요.
부트스트래핑의 예시
부트스트래핑을 이해하기 위해, 간단한 예시를 들어볼게요. 친구들이랑 사탕을 나눠 먹는 상황을 생각해보세요.
예시: 사탕 봉지
- 원래 사탕 봉지: 사탕 봉지에는 5개의 사탕이 있어요.
- 빨간 사탕 (1번)
- 파란 사탕 (2번)
- 초록 사탕 (3번)
- 노란 사탕 (4번)
- 주황 사탕 (5번)
- 부트스트래핑:
- 사탕 봉지에서 무작위로 사탕을 하나씩 뽑아서 새로운 봉지를 만들어요. 뽑은 사탕은 다시 원래 봉지에 넣고 섞은 후 또 뽑아요. 이를 5번 반복해서 5개의 사탕이 들어있는 새로운 봉지를 만드는 거예요.
부트스트래핑 과정
- 첫 번째 뽑기: 빨간 사탕 (1번)
- 두 번째 뽑기: 초록 사탕 (3번)
- 세 번째 뽑기: 빨간 사탕 (1번)
- 네 번째 뽑기: 파란 사탕 (2번)
- 다섯 번째 뽑기: 노란 사탕 (4번)
이렇게 새로운 봉지에는 [빨간 사탕, 초록 사탕, 빨간 사탕, 파란 사탕, 노란 사탕]이 들어있어요.
이 과정을 여러 번 반복해서 각각 다른 새로운 봉지를 만들 수 있어요. 예를 들어:
- 새로운 봉지 1: [빨간 사탕, 초록 사탕, 빨간 사탕, 파란 사탕, 노란 사탕]
- 새로운 봉지 2: [노란 사탕, 초록 사탕, 주황 사탕, 빨간 사탕, 파란 사탕]
- 새로운 봉지 3: [파란 사탕, 파란 사탕, 초록 사탕, 빨간 사탕, 초록 사탕]
왜 부트스트래핑을 사용할까?
부트스트래핑을 사용하는 이유는 원래 데이터가 적을 때, 이를 여러 번 샘플링하여 더 많은 데이터를 얻어내는 것처럼 활용할 수 있기 때문이에요. 이를 통해 데이터의 특성을 더 잘 이해하거나, 여러 모델을 학습시켜 더 정확한 예측을 할 수 있어요.
요약
- 부트스트래핑: 데이터를 무작위로 여러 번 뽑아서 새로운 데이터를 만드는 방법이에요.
- 예시: 사탕 봉지에서 무작위로 사탕을 뽑아 새로운 봉지를 만드는 과정이에요.
- 이유: 원래 데이터가 적을 때, 이를 여러 번 샘플링해서 더 많은 데이터를 얻어내는 것처럼 활용할 수 있어요.
부트스트래핑은 이렇게 간단한 원리로, 데이터를 더 잘 이해하거나 예측 모델을 개선하는 데 사용돼요.
챗 지피티 그는 천재인가?
위를 통해 나온 결과를 다수결 또는 평균값을 종합하여 최종 예측을 한다고 한다!
랜덤포레스트
여러 개의 의사결정나무를 만들어 학습하는 것이다.
똑같이 부트스트래핑을 통해 여러번 샘플링해 학습하지만, 배깅은 모든 피처를 사용하지만, 랜덤 포레스트는 피처를 랜덤하게 뽑는다.
배깅
- 부트스트랩 샘플링: 원본 데이터셋에서 중복을 허용하여 여러 개의 샘플을 무작위로 뽑아요.
- 예: 원본 데이터셋 [A, B, C, D, E]에서 여러 샘플 생성
- 샘플 1: [B, D, A, E, B]
- 샘플 2: [C, C, A, B, D]
- 샘플 3: [E, A, E, D, C]
- 모델 학습: 각 샘플로 의사결정나무를 학습시켜요. 모든 특성을 사용하여 분할합니다.
- 나무 1: 샘플 1로 학습
- 나무 2: 샘플 2로 학습
- 나무 3: 샘플 3로 학습
- 예측 결합: 각 나무의 예측을 다수결 투표 또는 평균으로 결합하여 최종 예측을 만듭니다.
랜덤 포레스트
- 부트스트랩 샘플링: 배깅과 동일하게 원본 데이터셋에서 여러 개의 샘플을 무작위로 뽑아요.
- 샘플 1: [B, D, A, E, B]
- 샘플 2: [C, C, A, B, D]
- 샘플 3: [E, A, E, D, C]
- 모델 학습: 각 샘플로 의사결정나무를 학습시키되, 각 노드에서 사용할 특성을 무작위로 선택해요.
- 나무 1: 샘플 1로 학습 (각 노드에서 무작위로 선택된 특성 사용)
- 나무 2: 샘플 2로 학습 (각 노드에서 무작위로 선택된 특성 사용)
- 나무 3: 샘플 3로 학습 (각 노드에서 무작위로 선택된 특성 사용)
- 예측 결합: 각 나무의 예측을 다수결 투표 또는 평균으로 결합하여 최종 예측을 만듭니다.
[Chat GPT]
특징배깅 (Bagging)랜덤 포레스트 (Random Forest)
과적합 감소 | 여러 샘플을 사용하여 과적합을 줄임 | 여러 샘플과 무작위 특성 선택으로 과적합을 줄임 |
예측 성능 | 개별 모델의 예측을 결합하여 성능 향상 | 높은 모델 다양성으로 더 높은 예측 성능 제공 |
모델 다양성 | 데이터 샘플링으로 모델 다양성 제공 | 데이터 샘플링과 무작위 특성 선택으로 모델 다양성 증가 |
컴퓨팅 비용 | 여러 모델 학습으로 계산 비용 증가 | 배깅보다 더 높은 계산 비용 필요 |
설명력 | 개별 모델 결합으로 설명력 부족 | 개별 모델 결합으로 설명력 부족 |
유연성 | 분류와 회귀에 사용 가능 | 분류와 회귀에 사용 가능 |
특성 중요도 평가 | 특성 중요도 평가 불가능 | 각 특성의 중요도 평가 가능 |
안정성 | 데이터 노이즈에 덜 민감 | 데이터 노이즈에 더 안정적 |
매개변수 설정의 복잡성 | 비교적 간단한 매개변수 설정 | 나무의 수, 선택할 특성 수 등 매개변수 설정 필요 |
적용 용이성 | 구현과 적용이 비교적 간단 | 배깅에 비해 약간 복잡하지만 여전히 구현 가능 |
부스팅(Boosting)
배깅에서는 여러 모델 중 다수결로 인해 한 모델을 뽑아서 썼다.
부스팅은 반면에 첫번째 모델이 두번째 모델에 영향을 미치고 두번째 모델이 세번째 모델에 영향을 미친다.
요약:
- 첫 번째 모델은 원본 데이터를 보고 예측을 해요.
- 두 번째 모델은 첫 번째 모델이 틀린 부분을 고치기 위해 학습돼요.
- 세 번째 모델은 앞의 두 모델이 틀린 부분을 고치기 위해 학습돼요.
- 이렇게 각각의 모델이 순차적으로 학습되기 때문에 예측 결과가 달라져요.
부스팅에서는 이런 방식으로 여러 모델을 결합하여 최종 예측을 만들어내요. 각각의 모델이 서로 다른 실수를 고치며 예측을 하기 때문에, 최종적으로 더 정확한 예측을 할 수 있게 돼요.
Boosting의 두 가지 유형
1) Adaptive Boosting
- 이전 모델의 오차가 큰 학습 데이터일수록 더 큰 가중치를 부여하여 다음 모델을 학습
2) Gradient Boosting
- 다음 모델은 이전 모델의 손실함수를 줄이는 방식으로 학습
Ada 부스팅의 학습과정을 챗지피티에게 물어보았다.
ADA Boosting 모델 학습과 예측 과정
- 첫 번째 시도: 첫 번째 모델을 만들어요.
- 첫 번째 모델은 간단한 규칙을 학습해요. 예를 들어, "크기가 6보다 크면 사과, 그렇지 않으면 배"와 같은 규칙을 학습할 수 있어요.
- 하지만 이 첫 번째 모델은 몇몇 데이터를 틀리게 예측할 수 있어요.
- 두 번째 시도: 두 번째 모델을 만들어요.
- 두 번째 모델은 첫 번째 모델이 틀린 부분을 보완하려고 해요. 즉, 첫 번째 모델이 틀린 과일을 더 주의깊게 학습할 거예요.
- 이렇게 하면 첫 번째 모델이 틀린 부분을 더 잘 맞출 수 있어요.
- 세 번째 시도: 세 번째 모델을 만들어요.
- 세 번째 모델도 마찬가지로 이전 모델들이 틀린 부분을 고치려고 해요. 이런 식으로 계속해서 모델을 만들어나가요.
- 최종 예측: 마지막으로 모든 모델의 예측을 합쳐서 최종 예측을 만들어요.
- 각 모델이 예측한 결과를 보고, 예를 들어 "사과"라고 예측한 모델이 많으면 새로운 데이터가 "사과"일 확률이 높아요.
- 그래서 최종적으로 새로운 과일의 종류를 예측할 수 있어요.
이런 식으로 ADA Boosting은 여러 모델을 순서대로 학습시켜서 최종 예측을 만들어내는 거예요. 첫 번째 모델이 틀린 부분을 두 번째 모델이 보완하고, 세 번째 모델은 첫 번째와 두 번째 모델이 틀린 부분을 보완하며, 이런 식으로 모델을 계속해서 향상시키는 거죠.
Gradient Boosting
그레디언트 부스팅은 틀린 부분만 학습을 하는 것으로 볼 수 있다.
X | Y | 결과 |
1 | 2 | O |
2 | 8 | X |
3 | 6 | O |
2번 모델이 잘 못했으면 2번을 수정하여 다시 학습시킨다.
특징 | Ada Boosting | Gradient Boosting |
기본 알고리즘 | 약한 학습기(weak learner)를 사용하여 모델 학습 | 약한 학습기(weak learner)를 사용하여 모델 학습 |
오차 보정 방식 | 이전 모델이 만든 오차에 집중하여 보정 | 경사 하강법(Gradient Descent)을 사용하여 오차 보정 |
모델 간 의존성 | 이전 모델과의 의존성이 낮음 | 이전 모델과의 의존성이 높음 |
가중치 업데이트 | 이전 모델이 틀린 샘플에 높은 가중치를 부여 | 이전 모델이 틀린 샘플에 대한 예측 오차에 집중 |
모델 학습 순서 | 순차적(Sequential)으로 학습 | 병렬적(Parallel)으로 학습 |
과적합 방지 | 이전 모델에 비해 과적합 경향이 낮음 | 트리의 깊이를 조절하여 과적합을 방지 |
주로 사용되는 모델 | 의사결정나무(Decision Trees) | 의사결정나무(Decision Trees) |
대표적인 라이브러리 | scikit-learn | scikit-learn |
Stacking
여러 base model의 결과를 meta모델로 하요 최종예측을 한다.
'국비 > 이어드림스쿨' 카테고리의 다른 글
[패스트캠퍼스] 평생 무료로 써먹는 나만의 ChatGPT 영어 선생님 Review (0) | 2025.01.10 |
---|---|
[패캠]한 번에 끝내는 컴퓨터비전 초격자 패키지.review (0) | 2024.09.26 |
[패스트캠퍼스] 딥러닝 유치원 강의 Review (4) | 2024.09.01 |
[패스트캠퍼스 리뷰] OpenCV를 활용한 컴퓨터비전과 딥러닝 리뷰 (0) | 2024.08.06 |
[스크래치부터 시작하는 강화학습의 모든 것] Part. 1 (0) | 2024.05.06 |
- Total
- Today
- Yesterday
- 코딩테스트
- 사회심리학
- 파이썬
- 여인권
- stl
- 백준
- 보세사
- 인지부조화
- Python
- 티스토리챌린지
- C/C++
- 오블완
- 윤성우
- 일문따
- 열혈프로그래밍
- 일본어문법무작정따라하기
- 심리학
- C
- 통계학
- c++
- 일본어
- 강화학습
- 데이터분석
- 조건반응
- 통계
- K-MOOC
- 정보처리기사
- 뇌와행동의기초
- 류근관
- 회계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |