Q1. 결정 트리의 장단점
결정 트리 개념
데이터를 조건에 따라 나누는 방식으로 예측하는 모델
회귀) 연속형 예측
분류) 범주형 예측
결정 트리 구조
분할 시작 -> Root Node
조건에 따라 데이터 나눔 -> Internal Node
최종 예측을 담은 노드 -> Leaf Node
연결 경로 -> Edge
학습 방식
데이터를 나누는 기준 -> 불순도를 얼마나 줄이는가?
- 지니 불순도 (Gini Impurity)
- 엔트로피 (Entropy, 정보 이득 기반)
가능한 조건들을 모두 시험해 보고 가장 불순도 많이 줄이는 조건 선택해 분기함.
시간 복잡도 많아지는 거 아닌가요? 비효율적이지 않음?
수식
지니 불순도 (GI)
Gini(D)=1−k=1∑Kpk2
pk = 데이터 집합 D에서 클래스 k의 비율
엔트로피 (Entropy)
-> 정보의 불확실성
Entropy(D)=−k=1∑Kpklog2(pk)
정보 이득 (Information Gain)
IG(D,A)=Entropy(D)−v∈Values(A)∑∣D∣∣Dv∣Entropy(Dv)
장 / 단점
장점
이해 쉬움, 해석 가능
범주형 / 연속형 변수 모두 처리 가능
전처리 필요 X
특성 선택 자동으로 수행 (중요한 특성 먼저 나올 수밖에 없음)
단점
과적합 (깊은 트리)
작은 데이터 변화에 민감 (데이터 바뀔 때마다 트리 구조 바뀜)
일반화 성능 낮음 -> (앙상블로 해결)
Use cases
앙상블의 base model로 사용 (단독으로 사용하는 경우 잘 없어서 예시 X)
Advanced
가지치기(Pruning)
과적합 방지 -> 영향 크지 않은 분기 제거
하이퍼파라미터
max_depth: 트리 최대 깊이 제한
min_samples_split: 분할하기 위한 최소 샘플 수
min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수
max_features: 각 분할 시 고려할 특성 수 제한
-> 만약 항상 모든 특성을 기준으로 분기하면
→ 모델이 특정 강력한 특성(매우 설명력 높은 피처)에 너무 의존
Q2. 부스팅 특징
부스팅 개념
여러 개 약한 모델을 순차적으로 학습시켜 이전 모델이 틀린 부분을 보완하면서 강한 예측기를 만드는 방법
-> 약한 모델의 기준은 뭔가요?
무작위 추측보다는 조금 더 나은 성능을 가진 모델
예: 이진 분류에서 정확도 > 50% 정도면 약한 모델로 봄
ex. 깊이가 얕은 트리 (depth=1, 스텀프)
-> Bagging과 어떻게 다른가요?

Bagging -> 많은 친구한테 의견 물어보고 평균내기 (오버피팅 방지)
Boosting -> 한 명이 틀린 거 알려주면 다음 사람이 고치고, 그 다음 사람이 고치고 ...(언더피팅 보완)
AdaBoost (Adaptive Boosting)
[ 개념 ]
이전 모델이 틀린 샘플에 가중치를 더 줘서 다음 모델이 더 집중하도록 함
[ 흐름 ]
초기화
각 샘플에 가중치 wi=n1
반복
- 약한 분류기 hm(x) 학습
- 오차율
ϵm=∑i=1nwi∑i=1nwi⋅1(hm(xi)=yi)
- 모델의 중요도 (alpha)
αm=21log(ϵm1−ϵm) -> 갭차이 너무 커지지 않도록 log 사용하는건가
-> (1-오차) / 오차 - 정답일 확률 : 틀릴 확률 (비율)
오차가 0.1이면 비율은 9 (중요도 1.1, 자연로그)
오차가 0.5면 비율은 1, log 1 == 0 (중요도 0)
왜 로그?
boosing 가중치 업데이트 수식과 연결
가중치 업데이트를 곱셈 형태로 자연스럽게 만들기 위해 (수학적으로 깔끔하게 설계)

오차가 0.5보다 크면 정답보다 틀린 게 더 많으니까 반대로 예측하는 게 나음
- 가중치 업데이트
wi←wi⋅exp(−αmyihm(xi))
e를 밑으로 사용하는 이유
미분 결과가 자기 자신 -> 미분해도 형태 안바뀜
미분, 최적화에 사용하기 좋음 (수학적으로 다루기 좋음)
최종 예측기
H(x)=sign(m=1∑Mαmhm(x))
-> 이진 분류 기준의 AdaBoost 설명
[ Multi-class boosting ] OvA, SAMME, SAMME.R
OvA(sigma 느낌)
각 클래스마다 이진 분류기 만들고, 입력 x에 대해 각 분류기의 출력 점수 비교해 최종 클래스 선택
y^(x)=argkmaxm=1∑Mαm(k)⋅hm(k)(x)
예시
Cat(0), Dog(1), Rabbit(2)



최종 예측
y^(x)=argmax{0.9, 1.0, −0.8}=1⇒Dog
-> OvA에서 O를 {+1}로 둬야한다는 점
SAMME [hard label]
Fk(x)=t∑αt⋅1(ht(x)=k)
Cat(0), Dog(1), Rabbit(2)

FCat(x)=0(아무도 Cat 안 골랐음)FDog(x)=0.7+0+0.8=1.5FRabbit(x)=0+0.6+0=0.6
-> 약간 L1 규제같은 느낌 해당 클래스만 남기고 나머지 0
최종 예측
y^(x)=argkmaxFk(x)=1⇒Dog
SAMME.R (softmax 느낌) [soft label]

SAMME.R 점수 누적 (K=3)
각 클래스 점수
Fk(x)=t∑log(1/3pt,k(x))=t∑log(3⋅pt,k(x))
Cat 입장
FCat(x)=log(3⋅0.1)+log(3⋅0.2)+log(3⋅0.3)=log(0.3)+log(0.6)+log(0.9)
Dog 입장
FDog(x)=log(3⋅0.7)+log(3⋅0.3)+log(3⋅0.6)=log(2.1)+log(0.9)+log(1.8)
Rabbit 입장
FRabbit(x)=log(3⋅0.2)+log(3⋅0.5)+log(3⋅0.1)=log(0.6)+log(1.5)+log(0.3)
최종 예측 -> y^(x)=argmaxkFk(x)=Dog
차별점
샘플에 가중치 부여하고 분류 오류를 기반으로 업데이트
사용할 수 있는 약한 분류기 예시
DecisionTreeClassifier (AdaBoost, SAMME, SAMME.R)
- 보통 max_depth=1 (stump)로 사용
->
RandomForestClassifier (weak learner로 사용은 잘 안함)
LogisticRegression
KNeighborsClassifier
- predict_proba() 지원
- 계산량이 많을 수 있어 약한 모델로 잘 안씀
Gradient Boosting (GBM)
개념
부스팅을 최적화 문제로 해석, 목적함수를 미분해서 잔차를 줄이도록 모델을 업데이트 함
흐름
예측 함수 초기화
F0(x)=argγmin∑L(yi,γ)
반복
- 잔차 계산 (loss에 대한 gradient)
rim=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
- 잔차에 대해 회귀트리 hm(x) 학습
- 학습률 η, 선형 조합
Fm(x)=Fm−1(x)+ηhm(x)
최종 예측기
y^=FM(x)
차별점
손실 함수의 gradient를 이용해 모델 업데이트 (잔차 기반) -> 재귀
XGBoost (eXtreme Gradient Boosting)
개념
정규화 + 병렬 처리 + 빠른 계산
Gradient Boosting의 확장 버전
흐름
y^i=∑k=1Kfk(xi),fk∈F
(F: 회귀트리 공간)
목적 함수
L=i=1∑nL(yi,y^i)+∑k=1KΩ(fk)
정규화 항
Ω(f)=γT+21λj=1∑Twj2
(여기서 T는 트리의 리프 수, wj는 리프 값)
2차 근사 (테일러 전개)
L(t)≈i=1∑n[gift(xi)+21hift(xi)2]+Ω(ft)
gi=∂y^i∂L(yi,y^i)
hi=∂y^i2∂2L(yi,y^i)
차별점
2차 테일러 근사를 통한 정밀한 업데이트
정규화로 과적합 방지
빠른 분할/트리 구조 최적화
Q3. 차원 축소 기법 (PCA, FA)
차원 축소를 왜 해야할까?
Dimensionality Reduction
- 고차원 저주 (Curse of Dimensionality)
-> 차원이 높아질수록 밀도 희석, 모델 성능 저하
- 시각화
- 과적합 방지
-> 노이즈 제거
- 학습 시간 단축
-> 연산량 감소
차원 축소 선형 기법
PCA (Principal Component Analysis)
최대 분산 방향으로 축 재구성
- 공분산 행렬 -> 고유값 분해 -> 주성분
- 분산 중심, 축 간 독립성
방법 (이에 대한 개념은 따로)
1. 공분산 행렬
2. 고유값 분해
3. 주성분
4. 차원 축소
특징
- 각 성분은 orthogonal
- 비지도 학습
- 설명된 분산 비율 (Explained Variance Ratio)
FA (Factor Analysis)
관측 변수들의 공통된 요인 탐색
- 공분산 행렬 = 공통 요인 + 고유 요인 분해
- 설명력 중심, 잠재 변수 독립
X=μ+ΛF+ϵ
Λ: 로딩 행렬 (요인-변수 간 상관성)
F: 공통 요인 (잠재 변수)
ϵ: 특이 요인 (해당 변수에만 영향)
-> 잠재 요인을 가정하는 생성 모델
-> Factor Rotation 기법 사용 (Varimax 등)
-> 노이즈 분리해 공통된 구조 추출