살콤아내 자기계발/파이썬

파이썬 머신러닝 완벽가이드 5주차 정리 (244pg. LightGBM)

살콤아내 2021. 5. 18. 11:33
728x90
반응형

 

파이썬머신러닝완벽가이드 250pg.py
0.01MB

 

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

 

Santander Customer Satisfaction

Which customers are happy customers?

www.kaggle.com

 

- 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
https://rython.tistory.com/14
https://rython.tistory.com/14

출처) https://rython.tistory.com/14

 

머신러닝 모델의 평가 (2. 다중 분류)

 제목이 다중 분류이긴 한데 약간 모호할 수 있으므로 Multiclass Classification임을 밝힙니다.  이전 글 https://rython.tistory.com/7 머신러닝 모델의 평가 (1. 이진 분류)  어떠한 결과값을 예측하는 머신..

rython.tistory.com

 

 

113번째 수행에서 멈추었다.

 

 

[GBM 복습] **사진은 설명과 관련이 없음 (설명과 비슷한 함수를 찾아서 넣은 것임)

Estimator 1: 잔차의 제곱의 합을 줄이는 모델 함수 F1(x)를 만든다.

https://walkingwithus.tistory.com/606

Estimator 2: Estimator1에서 나온 잔차의 잔차의 차이를 최소화하는 회귀선 F2(x)를 만든다. (잔차를 정확하게 예측)

y1-f1(x1) = f2(x1)

y2-f1(x2) = f2(x2)

y3-f1(x3) = f2(x3)

https://ko.khanacademy.org/math/statistics-probability/describing-relationships-quantitative-data/assessing-the-fit-in-least-squares-regression/a/r-squared-intuition

 

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모델을 만들 수 있다.

 

 

 

728x90
반응형