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

파이썬 머신러닝 완벽가이드 5주차 정리 (분류 214pg~, 보팅분류기, 랜덤포레스트, XGBoost)

살콤아내 2021. 5. 17. 13:24
728x90
반응형

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

 

214pg. 보팅분류기 (Votting Classifier)

- 45줄: LR, KNN라고 분류기 이름을 명명함. voting방법은 soft라고 하는 vo_clf Estimator를 생성함

 

보팅 분류기의 정확도가 좀 더 높게 나타났음을 알 수 있다.

 

 

 

217pg. 랜덤포레스트

Bagging방식은 같은 알고리즘의 여러개의 분류기(Estimator)전체 데이터를 샘플링(일부중첩)+학습 후 보팅하여 최종 결정하는 방식이다. 결정트리 기반의 랜덤포레스트는 빠르고, 다양한 영역에서 높은 예측 성능을 보인다.

참고) Bagging=boostrap aggregating (부스트트래핑 분할방식=일부중첩)

 

- n_estimators: 결정트리개수로 많을수록 시간이 오래걸림

- max_features: 기본값은 sqrt (전체가 16개라면 분할을 위해 4개 참조)

- max_depth, min_samples_leaf 등도 설정 가능하다

 

참고) 차원축소: 두 변수(feature)의 상관관계가 아주 높을 경우 차원축소를 통해 feature의 개수를 줄인다. 계산수행시간이 많이 걸려도 좋지 않은 알고리즘이다. (시간복잡도, 공간복잡도를 줄이는 것이 좋다)

 

 

 

222pg. GBM(Gradient Boosting Machine)

부스팅알고리즘은 여러개의 약한 학습기(weak learner)를 순차적으로 학습-예측하여 잘못 예측된 데이터에 대해 가중치 부여를 통해 오류를 개선해나가면서 학습하는 방식. (정답을 맞추지 못한 영역에 가중치를 둬서 오류가 나는 부분을 더 극대화해서 보고 오류를 해결해나갈 수 있다. 가중치 업데이트 방법)

- AdaBoost(Adaptive boosting): 오류 데이터에 가중치 부여함 

- Gradient Boosting: 가중치 업데이트를 (에러율에) 경사하강법을 이용 (딥러닝에 중요)

 

 

---------------------------------------------------------------------------------------------------------

 

[참고자료] 7. 다양한 모델을 결합한 앙상블 학습 (Boosting방식)

281pg. 에이다부스트 예시

 

벡터의 점곱(내적)

AB=ABcosθ: 두개의 벡터가 있을 때 한 벡터가 다른 벡터의 방향으로 얼마만큼 동일한 힘으로 나아가는가?라는 의미이다. 컴퓨터코딩에서는 다음과 같은 의미이다.

두개의 동일한 위치의 column값을 곱해서 더해라= 계산결과는 스칼라값이 나옴

Ex) A=(a1, a2), B=(b1, 2b)일 때 AB=a1⋅b1+a2⋅b2

벡터의 곱셈연산

AxB: 두개의 동일한 위치의 column값을 구해라= 계산결과는 벡터값이 나옴

 

에이다부스트(Adaptive boosting)

1. 가중치 w벡터의 총합은 1 (동일한 가중치로 설정)

2. m번 부스팅(분류기가 많음) 반복의 j번째에서 다음을 수행함

: 가중치가 부여된 약한 학습기 훈련>> 클래스레이블 예측>> 가중치가 적용된 에러율계산>>학습된 가중치 계산>>가중치 업데이트>>가중치 정규화(가중치 w벡터의 총합이 다시 1이 되도록)

3. 최종 예측을 계산

 

정리: 분류기의 에러율이 높을수록(약한 분류기일수록) 가중치가 작아지고, 업데이트된 가중치의 갭이 크지 않게 된다. (즉, 부스팅방식은 분류기를 여러번 돌렸을 때 예측치와 실체값의 일치여부, 즉, 에러율을 통해 가중치를 점진적으로 변화/적용시키면서 예측확률을 높이는 모델이다)

 

----------------------------------------------------------------------------------------------------------

 

 

 

 

225pg. GBM 하이퍼 파라미터 및 튜닝

Bagging(랜덤포레스트)의 경우 병렬방식으로 수행이되어 (데이터 동시학습가능) 수행시간이 빠르다.

Boosting(Gradient Boost Machine)의 경우 에러율, 가중치를 구하고 가중치 업데이트의 방식의 순차식 방식이라 병렬방식 수행이 되지 않는다. 그러므로 수행시간이 느리다. (Light GBM은 병렬가능함)

 

- loss: 경사하강법의 비용함수 지정 (deviance 기본값)

참고) 비용함수: 얼마만큼의 오차가 생겼는가? (미분에서 기울기가 0인 함수로 접근함)

https://assaeunji.github.io/ml/2020-09-05-gbm/

- learing_rate: GBM에 적용하는 학습률로 Weak learner가 순차적으로 오류값을 보정해나가는데 적용하는 계수 (0.1 기본값) 크면 속도가 빠르고, 작으면 속도가 느림. (하지만 정확성은 이와 반비례함. learning rate가 너무 크면 발산하게 됨)

https://www.jeremyjordan.me/nn-learning-rate/

- n_estimators: weak learner의 개수(100 기본값)

- subsample: weak learner가 학습에 사용하는 데이터 샘플링 비율 (1 기본값). 과적합의 경우 1 이하로 적용

 

226pg. GBM 실습

 

 

227pg. XGBoost

- C/C++로 작성됨. 사이킷런 기반이 아니라 Variable Explorer로 데이터를 볼 수 없거나 사이킷런 고유의 아키텍처를 적용하지 못하는 문제가 있음. 이후 사이킷런 기반의 새로운 패키지로 개발이 됨 (Wrapper class 제공)

- 병렬수행이 가능하여 GBM대비 수행시간이 빠름. 과적합규제, 나무가지치기, 자체 내장된 교차검증, 결손값 자체 처리 기능이 있음.

- Early stopping 기능: 100개의 estimator가 있다고 가정했을 때, n번째 estimator를 수행하며 가중치를 업데이트 하는데 측정지표(eval_metric)에 의한 퍼포먼스가 나빠지는 경우 (예측률이 떨어지는 경우) n+a번째에서 학습/예측을 조기중단한다. (a=early stopping 값)

211번 시행을 기준으로 다시 예측률이 떨어진다

- eval_metric 파라미터: 검증에 사용되는 함수 정의. 회귀는 rmse(실제 데이터와의 차이를 제곱한 지표), 분류는 error.

 

- Variable Explorer: XGboost에서 dtest, dtrain은 core DMatrix 데이터타입 형식을 가지고 있다. (열어서 볼 수 없음)

 

- 83줄: num_rounds = 400 (400개의 estimator를 94줄에서 실행하고 있다. num_boost_round=num_rounds)

- 92줄: dtrain, dtest는 사이킷런의 fit와 비슷하다.

- 94줄: 학습데이터에 dtrain를 사용하는데 검증데이터에 dtrain과 dtest라는 두 개의 값을 사용하고 있다. 즉, 학습된 dtrain 데이터를 검증 데이터에 중복 사용하고 있는 문제가 있다. (모의고사에 본고사를 보는 느낌>>아래 121줄 eval-logloss의 값 차이가 얼마 나지 않는 이유이다.)

 

- 121줄: get_clf_eval 함수의 결과 train-logloss가 eval-logloss에 비해 큰 차이를 보인다. (logloss는 실제값과 예측값의 차이, 즉 에러가 발생한 정도) 두 차이가 많이 나는 이유는 학습된 학습데이터를 검증데이터에 중복 사용했기 때문이다

.

 

- 207줄: Early Stopping을 10으로 주면 61번째에서 멈춘다.

728x90
반응형