본문 바로가기
AI월드/⚙️AI BOOTCAMP_Section 2

결정트리,랜덤포레스트,혼동행렬,교차검증 키워드 개념정리

by khalidpark 2021. 2. 8.

결정트리 , 랜덤포레스트 , 혼동행렬 , 교차검증

지금 배우고 있는 Section2 의 개념이 모두 새롭기 때문에 개념들이 뒤섞이기 시작했다

조금이나마 편안하게 , 마음의 안정을 위해 지금껏 공부한 키워드를 적고, 이해가 안가는 부분을 표시해보자

 

(붉은색으로 된 글씨는 한번에 이해가 가지 않아 다시 봐야겠다고 표시해둔 것. 중요하다는 뜻이아님)

 


01 - 결정트리 (Decision tree)

사이킷럿 파이프라인

from category_encoders import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

- 결정트리 개념 : khalidpark2029.tistory.com/92

노드 , 뿌리노드 , 중간노드 , 말단노드

Node , Root Node , Internal Node , External(leaf , terminal) Node

엣지

Edge

 

- 결정트리 학습 알고리즘

지니불순도 (Gini Impurity or Gini Index)

엔트로피

information gain

 

- 결정트리의 과적합 해결

훈련검증도 : 0.999 ,검증정확도 : 0.756 으로 나왔다고 가정하면 과적합의 가능성

min_samples_split 

min_samples_leaf : 말단 노드의 최소 존재 샘플 수 

max_depth

 

- 특성중요도

(선형모델에서 특성과 타겟의 관계를 확인하기 위해 _회귀계수(coefficients)_확인함)

결정트리에서는 특성중요도(feature importance)로 확인

 

- 특성상호작용 (feature interaction)특성들끼리 서로 상호작용회귀분석에서는 서로 상호작용이 높은 특성들이 있다면 개별 계수를 해석하는데 어려움이 있으나,결정트리모델에서는 특성상호작용에 영향을 받지 않음


02 - 랜덤포레스트 (Random Forest)

 

- 랜덤포레스트 개념 : khalidpark2029.tistory.com/94

앙상블 방법

수많은 결정트리를 만들어 실행해본 뒤 최적의 모델을 만드는 방법

결정트리의 단점을 극복하는 방법

Bootstrap

Bootstrap aggregating : 부트스트랩세트로 만들어진 기본모델들을 합치는 과정

bagging

Out-Of-Bag(OOB) sample

부트스트랩 샘플링 : 특성 n개 중 일부분 k 개의 특성을 선택

 

- 순서형 인코딩 (Ordinal)

트리모델에서는 원핫인코딩으로 진행시 카테고리 범주가 많은 특성은 상위노드에 선택될 기회가 적어짐

 

- 랜덤포레스트 특성 중요도 비교

랜덤포레스트에서는 학습 후에 특성들의 중요도 정보(Gini importance)를 기본으로 제공

중요도는 노드들의 지니불순도(Gini impurity)를 가지고 계산

노드가 중요할 수록 불순도가 크게 감소한다는 사실을 이용합니다.

노드는 한 특성의 값을 기준으로 분리가 되기 때문에

불순도를 크게 감소하는데 많이 사용된 특성의 중요도가 올라갈 것

 

- 랜덤포레스트에서 트리를 랜덤하게 만드는 방법

두 가지

1. 랜덤포레스트에서 학습되는 트리들은 배깅을 통해 만들어집니다.

(bootstrap = true) 이때 각 기본트리에 사용되는 데이터가 랜덤으로 선택됩니다

2. 각각 트리는 무작위로 선택된 특성들을 가지고 분기를 수행합니다.(max_features = auto.)


03 - 혼동행렬 (Confusion Matrix)

 

- 혼동행렬의 개념 : khalidpark2029.tistory.com/101

분류문제에서만 사용가능 (회귀문제에서 사용불가)

정확도(accuracy) : 전체 범주를 모두 바르게 맞춘 경우를 전체 수로 나눈 값

정밀도(precision) : Positive로 예측한 경우 중 올바르게 Positive를 맞춘 비율

재현율(recall , sensitivity) : 실제 Positive인 것 중 올바르게 Positive를 맞춘 것의 비율

(특히 정밀도와 재현율의 차이 이해하기)

 

F1점수 

 

임계값 (threshold)

predict_proba

 

예를 들면) TP

1. 앞글자
앞의 T는 실제와 예측이 같다면 (실제 TRUE, 예측 TRUE 또는 실제 FALSE, 예측 FALSE),
다르다면 F 입니다.

2. 뒷글자
뒤의 P는 예측의 결과입니다.
TRUE라고 예측했으면 P,
FALSE 라고 예측했으면 N 입니다.

!!! 뒤에서 부터 해석하면 쉽다 !!!
'임계값을 낮추면 정밀도는 올라가지만 재현율은 떨어진다' 의 의미
정밀도 : tp / tp+fp, 재현율 : tp / tp+fn
fp : 백신을 맞았다고 예측했지만 , 결과는 false 한 경우 = 백신접종을 잘못예측한 경우
= 백신접종을 맞았지만 맞지 않았다고 예측한 경우
fn : 백신을 맞지 않았다고 예측했지만 , 결과는 false 한 경우
= 백신접종을 맞지 않았는데 예측이 틀린경우 = 즉 백신을 맞았다

임계값을 낮춘다
-> 0.5보다 더 낮은 확률값도 맞았을 거라고 예측한다(더 막 맞았다고 해버린다) ->
-> 1) 맞았지만 맞지 않았다고 예측하는 경우 하락, 즉 fp 하락 -> 정밀도의 분모 하락 -> 정밀도 상승
-> 2) 맞지 않았는데 맞았다고 예측하는 경우가 상승, 즉 fn 상승 -> 재현율의 분모 상승 -> 재현율 하락

 

ROC

AUC : ROC curve의 아래 면적

 

재현율은 최대화 하고 위양성률은 최소화 하는 임계값이 최적의 임계값

Recall(재현율) = Sensitivity = 

Fall-out(위양성률) = 


04 - 모델선택 (Model Selection)

교차검증 (Cross Validation)

Hold out 교차검증 ( Train , val , test)

모델선택 (Model Selection)

k-fold cross-validation(CV)

k = 3
scores = cross_val_score(pipe, X_train, y_train, cv=k, scoring='neg_mean_absolute_error')

 

하이퍼 파라미터 튜닝

최적화 : 훈련 데이터로 더 좋은 성능을 얻기 위해 모델을 조정하는 과정

일반화 : 학습된 모델이 처음 본 데이터에서 얼마나 좋은 성능을 내는지

 

검증곡선 (Validation Curve)

- y축: 스코어

- x축: 하이퍼파라미터

(훈련곡선과의 혼동 유의)

 

최적의 하이퍼파라미터 조합을 찾아주는 도구

RandomizedSearchCV : 검증하고 싶은 하이퍼파라미터들의 값 범위를 지정해주면 무작위로 그 조합을 모두 검증

GridSearchCV : 검증하고 싶은 하이퍼파라미터들의 수치를 정해주고 그 조합을 모두 검증

 

Refit

만약 hold-out 교차검증(훈련/검증/테스트 세트로 한 번만 나누어 실험)을 수행한 경우에는,

(훈련 + 검증) 데이터셋에서 최적화된 하이퍼파라미터로 최종 모델을 재학습(refit) 해야 함

728x90

댓글