결정트리 , 랜덤포레스트 , 혼동행렬 , 교차검증
지금 배우고 있는 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
예를 들면) TP1. 앞글자
2. 뒷글자
앞의 T는 실제와 예측이 같다면 (실제 TRUE, 예측 TRUE 또는 실제 FALSE, 예측 FALSE),
다르다면 F 입니다.
뒤의 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) 해야 함
'AI월드 > ⚙️AI BOOTCAMP_Section 2' 카테고리의 다른 글
분류 정확도와 불균형, accuracy만 집중했을 때의 문제점_Day 31 (0) | 2021.02.15 |
---|---|
혼동행렬, 정확도, 정밀도, 재현율 한번더정리 (0) | 2021.02.09 |
Precision,Recall,F-Measure,정밀도,재현율,정확도란?_Day28(2) (0) | 2021.02.08 |
Confusion Matrix, 혼동행렬_Day28 (0) | 2021.02.08 |
Random Forest,랜덤포레스트_Day27 (0) | 2021.02.05 |
댓글