244pg. LightGBM
XGBoost보다 수행속도가 빠르고 메모리 사용량도 적다. 리프중심트리분할(Leaf Wise) 방식 사용. 최대손실값(max delta loss)를 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대청직적인 규칙트리가 생성됨. 이는 예측오류 손실을 최소화 할 수 있음. (10,000건 이하 데이터 세트일 경우 과적합 발생이 쉽다는 단점이 있음)
참고) 일반적인 알고리즘은 균형트리분할 Level Wise 방식 사용. 이는 트리의 깊이를 효과적으로 줄이며 오버피팅에 더 강한구조를 가짐. (트리의 균형을 맞추기 위한 시간이 필요하므로 수행속도가 상대적으로 느림)
주요 LightGBM파라미터
- bagging_fraction: 데이터를 샘플링하는 비율 (일부 데티어 중복 샘플링됨)
- feature_fraction: 개별트리를 학습할때마다 무작위로 선택하는 피처비율 (일부 feature 샘플링)
252pg. 캐글 산탄데르 고객만족예측 실습
https://www.kaggle.com/c/santander-customer-satisfaction/data
- 30줄: cust_df['TARGET']값이 1인 값 (Boolean값이 True)의 cust_df 데이터 row 중에서 'TARGET' column 값의 개수
- 31줄: cust_df의 'TARGET' column의 총 개수
-39줄: cust_df.describe( ) 를 test에 담아보면 cust_df의 데이터 구조를 볼 수 있다. (cust_df DF자체로 볼 수 없음)
var3의 min값이 -999999인데 이는 누락된 값일 확률이 높다. (데이터 전처리 필요>> 2로 치환)
-51줄: 데이터 전처리 (-99999를 2로 바꿈, ID는 삭제, inplace=True는 원본데이터 자체를 변경)
-56줄: X_features는 전체 row, 처음-맨끝 전까지 column을 위치기반 인덱싱함
-57줄: X_labels는 전체 row, 맨끝 column을 위치기반 인덱싱함
학습세트와 테스트세트가 각각 0.96/0.4, 0.95/0.5 정도의 비율로 나뉘어져 있음을 볼 수 있다.
만약 stratify=y_labels를 넣는다면 테스트 세트 레이블 값 분포가 아래와 같이 0과 1의 비율이 0.4정도의 비율이 된다.
estimator를 실행시켜 보자.
- 88줄: eval_metric="auc"은 검증의 평가지표를 말하며 이 평가지표에 따라서 early stopping이 결정될 수 있다. eval_set는 검증 데이터로 두 데이터 세트를 넣었음을 볼 수 있다. [(X_train, y_train), (X_test, y_test)]
- 113줄: roc_auc_score에서 average='macro'
질문) predict_proba는 어떤 레이블 값의 어떤 확률을 말한다. 레이블 값이 3개이면 20, 30, 50% 식으로 확률값이 도출된다. 이처럼 predict_proba를 하기 위한 레이블 ㅡ값이 2진분류가 아니라 multi분류를 해야 할 상황이면 Negative/Positive로 나뉘는 confusion matrix (오차행렬)을 어떻게 그릴까? 이는 다음과 같다. 분류 할 레이블의 개수에 따라 confusion matrix 개수가 달라진다. 각각의 오차행렬 값을 카운팅하여 최종 매트릭스 값을 도출한다.
average 파라미터는 micro, macro, weight 가 있다. (Micro: 최종 매트릭스 값을 각각을 합친 후 재현율, 정밀도, F1스코어, 정밀도 계산/ Macro: 각각의 매트릭스에서 각각 재현율, 정밀도, F1스코어, 정밀도를 계산 후 평균화함)
출처) https://rython.tistory.com/14
113번째 수행에서 멈추었다.
[GBM 복습] **사진은 설명과 관련이 없음 (설명과 비슷한 함수를 찾아서 넣은 것임)
Estimator 1: 잔차의 제곱의 합을 줄이는 모델 함수 F1(x)를 만든다.
Estimator 2: Estimator1에서 나온 잔차의 잔차의 차이를 최소화하는 회귀선 F2(x)를 만든다. (잔차를 정확하게 예측)
y1-f1(x1) = f2(x1)
y2-f1(x2) = f2(x2)
y3-f1(x3) = f2(x3)
Estimator 3: 잔차의 잔차의 잔차의 차이를 최소화하는 회귀선 F3(x)를 만든다.
y1-f1(x1)-f2(x1)= f3(x1)
y2-f1(x2)-f2(x2)= f3(x2)
y3-f1(x3)-f2(x3)= f3(x3)
이런식으로 Estimator들을 늘려가면 결국 예측값과 실제값의 잔차가 점점 줄어드는 ML모델을 만들 수 있다.
'살콤아내 자기계발 > 파이썬' 카테고리의 다른 글
파이썬 머신러닝 완벽가이드 6주차 정리 (경사하강법, 퍼셉트론/아달린) (0) | 2021.05.24 |
---|---|
파이썬 머신러닝 완벽가이드 5주차 정리 (분류 262pg, 캐글 신용카드 사기 검출, 스태킹앙상블) (0) | 2021.05.20 |
파이썬 머신러닝 완벽가이드 5주차 정리 (분류 214pg~, 보팅분류기, 랜덤포레스트, XGBoost) (0) | 2021.05.17 |
파이썬 머신러닝 완벽가이드 4주차 정리 (분류 211pg~, 앙상블학습) (2) | 2021.05.12 |
파이썬 머신러닝 완벽가이드 4주차 정리 (분류 202pg~) (0) | 2021.05.11 |