파이썬 머신러닝 완벽 가이드 - 4장

Jajuna_99·2022년 12월 6일
0

4장 분류

분류 개요

지도학습의 대표적인 유형으로, 데이터의 피처값과 레이블을 학습해 새로운 데이터의 레이블을 학습하고 예측, 판별하는 것이 분류(classification)이다.

분류 알고리즘 유형

  • 베이즈(Bayes) 통계와 생성 모델에 기반한 나이브 베이즈(Naive Bayes)
  • 독립변수와 종속변수의 선형 관계썽에 기반한 로지스틱 회귀(Logistic Regression)
  • 데이터 균일도에 따른 규칙 기반의 결정 트리(Decision Tree)
  • 개별 클래스 간의 최대 분류 마진을 효과적으로 찾아주는 서포트 벡터 머신(Support Vector Machine)
  • 근겁 거리를 기준으로 하는 최소 근접(Nearest Neighbor)
  • 심층 연결 기반의 신경망(Neural Network)
  • 서로 다른(또는 같은) 머신러닝 알고리즘을 결합한 앙상블(Ensemble)

이 장에서는 앙상블을 집중적으로 다룰 것이다.

앙상블은 서로 다른 또는 같은 알고리즘을 단순히 결합한 형태도 있으나, 일반적으로 배깅(bagging)과 부스팅(boosting) 방식으로 나뉜다.

특히 배깅의 대표 방식인 랜덤 포레스트(Random Forest), 그래디언트 부스트의 최신 기법인 XgBoostLightGBM 그리고 앙상블의 앙상블이라 불리는 스태킹(Stacking)을 알본다.

결정 트리

결정 트리 : 데이터에 있는 규칙을 학습을 통해 자동으로 찾아내는 ML 알고리즘

트리의 분할은 적고 정확도는 높이기 위해 데이터의 균일도가 중요하다.

이 균일도를 측정하는 대표적인 방법으로 엔트로피를 이용한 정보 이득(information gain) 지수지니 계수가 있다.

사이킷런에서 구현돼 있는 DecisionTreeClassifier를 기본으로 지니 계수를 이용해 데이터 세트를 분할한다.

결정 트리 모델의 특징

  • 정보의 균일도만 신경 쓰면 되므로 특별한 경우를 제외하고는 각 피처의 스케일링과 정규화 같은 전처리 작업 필요 없다.
  • 균일도를 기반으로 함으로 직관적이고 명확하다. 어떤 노드들이 만들어졌는지 알 수 있고, 시각화 표현 또한 가능하다.
  • 과적합으로 정확도가 떨어진다는 점이다. (서브 트리를 계속 만들다 보면, 피처가 많고, 균일도가 다양하게 존재할수록 깊이가 깊어져 복잡해지기 때문) 이 때문에 트리의 크기를 제한하는 등 튜닝이 필요하다.

사이킷런에서는 DecisionTreeClassifier와 DecisionTreeRegressor (이름에서 알 수 있겠다만, 당연히 각각 분류와 회귀를 위한 클래스이다.) CART기반의 알고리즘을 사용한다. 파라미터 설명은 (p.186)에 있다.

시각화는 GraphViz라는 패키지로 시각화할 수 있다. (p.188)

사용자 행동 인식 데이터 실슴 (p.200)

앙상블 학습

앙상블 학습 : 여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법

대표적인 앙상블 학습 유형

  • 보팅(voting) : 여러개의 분류기를 결합해서 개별 예측을 해서 최종 예측 값을 내는 것이다.
  • 배깅(bagging) : 보팅과 비슷하지만 배깅은 개별 데이터셋을 각각 분류기마다 부여해서 예측을 실행한다. (분할된 데이터셋은 중복이 허용된다.)
  • 부스팅(boosting) : 분류기들이 순차적으로 학습을 수행하되, 분류기들의 학습이 끝나면 다음 학습으로 가중치를 넘겨주는 방식이다.

보팅 유형

  • 하드 보팅 : 분류기 예측 값들을 종합해서 다수결로 레이블 예측 값을 결정한다.
  • 소프트 보팅 : 분류기 예측 값들을 확률로 환산해서 평균을 구해 확률이 높은 예측 값으로 결정한다.

보팅 분류기 (Voting Classifier) 실습 (p.213)

랜덤 포레스트

랜덤 포레스트 : 여러개의 결정 트리 분류기가 전체 데이터에서 각자의 데이터를 샘플링해 개별저긍로 학습을 수행, 모든 분류기가 보팅을 통해 예측 하는 방식이다.

부트스트래핑(Bootstraping) : 여러 개의 데이터 세트를 중첩되게 분리하는 기법, bagging 은 bootstrap aggragation의 줄임말이다.

램덤 포레스트 실습 (p.219)

GBM (Gradient Boosting Machine)

부스팅의 대표적인 구현은 AdaBoost(Adaptive boosing)와 그래디언트 부스트가 있다.

에이다 부스트는 개별 약한 학습기를 사용해 가중치를 구한후 각각의 가중치를 결합해서 예측을 수행하는 방식이다.

GBM(Gradien Boost Machine)은 에이다 부스트와 비슷하나 경사 하강법을 쓴다는 점에서 구별된다. Loss는 h(x)=yF(x)h(x) = y - F(x)이다.

get_human_dataset() 함수로 데이터 세트로 실습 (p.223)

XGBoost (eXtra Gradient Boost)

XGBoost는 GBM의 단점인 느린 수행 시간 및 과적합 규제(Regularization) 부재 등의 문제를 해결한 모델이다. 또한 병렬 학습 똫나 가능하다.

XGBoost 설치 및 실습 (p.227)

LightGBM

LightGBM은 XGBoost 보다도 수행시간을 줄였다는 점, 메모리 사용도 적다는 점이 장점이다. XGBoost에서 GridSearchCV로 하이퍼 파라미터 튜닝을 수행하다 보면 느리다는 것을 알 것이다.

단점으로는 적은 데이터 세트를 적용한 경우 과적합 발생이 쉽다는 점이다.

다른 GBM 계열의 트리 분할 방식과는 다르게 리프 트리 분할(leaf wise)을 사용한다. 보통은 균형 트리 분할(level wise)

LightBGM 설치 및 실슴 (p.247)

베이지안 최적화 기반의 HyperOpt를 이용한 하이퍼 파라미터 튜닝

Grid Search의 특성상 늘어나는 파라미터의 최적화 시간이 기하급수적으로 늘어난다는 단점이 있다. 이를 보완하기 위한 베이지안 최적화 기법이 있다.

베이지안 최적화 : 목적 함수 식을 제대로 알 수 없는 블랙 박스 형태의 함수에서 최대 또는 최소 함수 반환 값을 만드는 최적 입력값을 가능한 적은 시도를 통해 빠르고 효과적으로 찾아주는 방식이다.

베이지안 최적화를 구성하는 두 가지 중요 요소는 대체 모델(surrogate model)과 획득 함수(Acquisition Function)이다.

  • 대체 모델 : 획득 함수로부터 최적 함수를 예측할 수 있는 입력값을 추천 받은 뒤 이를 기반으로 최적 함수 모델 이를 기반으로 최적 함수를 모델을 개선해 나간다. (입력삽은 하이퍼 파라미터이다.)
  • 획득 함수 : 개선된 대체 모델을 기반으로 최적 입력값을 계산한다.

대체 모델은 최적 함수를 추정할 때 다양한 알고리즘을 사용할 수 있는데 일반적으로 가우시안 프로세스를 적용한다. 하지만 HyperOpt는 트리 파르젠 Estimator(TPE, Tree-structure Parzen Estimator)를 사용한다.

HyperOpt 설치 및 실습 (p.257)

분류 실습

캐글 산탄데르 고객 만족 예측 (p.267)
캐글 신용카드 사기 검출 (p.279)

스태킹 앙상블

스태킹 : 개별적인 여러 알고리즘을 서로 결합하고 에측한 데이터를 기반으로 다시 예측을 수행한다는 것이다.

스태킹 모델을 두 종류의 모델이 필요하다. 첫 번째는 개별적인 기반 모델, 두 번째는 이 개별 기반 모델의 예측 데이터를 학습 데이터로 만들어서 학습하는 최종 메타 모델이다.

기본 스태킹 모델 실습(p.297)

CV 세트 기반의 스태킹 : 과적합을 개선하기 위해 최종 메타 모델을 위한 데이터 세트를 만들 때 교차 검증 기반으로 예측된 결과 데이터 세트를 이용한다.

CV 세트 기반 스태킹 실습 (p.303)

요약

사실상 ML의 절반인 분류를 끝냈다. 생각했던 것 보다도 쓰임이 많다.

profile
Learning bunch, mostly computer and language

0개의 댓글