처음부터 그라디언트 부스팅

복잡한 알고리즘 단순화

자극

대부분의 Kaggle 대회 우승자는 다양한 모델의 스택 / 앙상블을 사용 하지만 대부분의 앙상블에 포함 된 특정 모델 중 하나는 GBM (Gradient Boosting) 알고리즘의 일부 변형입니다. 최신 Kaggle 대회 우승자 인 Michael Jahrer안전한 운전자 예측 에서 표현 학습을 사용한 솔루션 의 예를 들어보십시오 . 그의 솔루션은 6 가지 모델의 혼합이었습니다. 1 개의 LightGBM (GBM의 변형) 및 5 개의 신경망. 그의 성공은 그가 구조화 된 데이터에 사용한 준지도 학습에 기인하지만 그래디언트 부스팅 모델도 유용한 부분을 수행했습니다.

GBM이 널리 사용되고 있지만 많은 실무자들은 여전히이를 복잡한 블랙 박스 알고리즘으로 취급하고 미리 빌드 된 라이브러리를 사용하여 모델을 실행합니다. 이 게시물의 목적은 복잡한 알고리즘을 단순화하고 독자가 알고리즘을 직관적으로 이해할 수 있도록 돕는 것입니다. 그라디언트 부스팅 알고리즘의 순수한 바닐라 버전을 설명하고 마지막에 다양한 변형에 대한 링크를 공유 할 것입니다. fast.ai 라이브러리 (fastai / courses / ml1 / lesson3-rf_foundations.ipynb ) 에서 기본 DecisionTree 코드를 가져 왔으며 그 위에 기본 그라디언트 부스팅 모델의 간단한 버전을 구축했습니다.

앙상블, 배깅 및 부스팅에 대한 간략한 설명

기계 학습 기술을 사용하여 목표 변수를 예측하려고 할 때 실제 값과 예측 값의 차이의 주요 원인은 잡음, 분산 및 편향 입니다. Ensemble은 이러한 요소를 줄이는 데 도움이됩니다 (감소 할 수없는 오류 인 노이즈 제외).

앙상블은 최종 예측을 제공하기 위해 함께 모여 (예 : 모든 예측의 평균) 예측 변수의 모음 일뿐입니다. 앙상블을 사용하는 이유는 동일한 대상 변수를 예측하려는 여러 다른 예측자가 단일 예측 자 단독보다 더 나은 작업을 수행하기 때문입니다. Ensembling 기술은 Bagging과 Boosting으로 더 분류됩니다.

  • Bagging 은 많은 독립적 인 예측 자 / 모델 / 학습자를 구축하고 일부 모델 평균화 기술을 사용하여 결합 하는 간단한 앙상블 기술입니다 . (예 : 가중 평균, 과반수 투표 또는 정상 평균)
  • 부스팅 은 예측 변수가 독립적으로 만들어지지 않고 순차적으로 만들어지는 앙상블 기법입니다.
그림 1. 앙상블
그림 2. 배깅 (독립 모델) 및 부스팅 (순차 모델). 참조 : https://quantdare.com/what-is-the-difference-between-bagging-and-boosting/

Gradient Boosting 알고리즘

경사 부스팅은 회귀 및 분류 문제를위한 기계 학습 기술로, 일반적으로 의사 결정 트리와 같은 약한 예측 모델의 앙상블 형태로 예측 모델을 생성합니다. (Wikipedia 정의)

지도 학습 알고리즘의 목적은 손실 함수를 정의하고 최소화하는 것입니다. Gradient Boosting 알고리즘에서 수학이 어떻게 작동하는지 살펴 보겠습니다. 다음과 같이 정의 된 손실로 평균 제곱 오차 (MSE)가 있다고 가정합니다.

손실 함수 (MSE)가 최소가되도록 예측을 원합니다. 경사 하강 법 을 사용 하고 학습률을 기반으로 예측을 업데이트하여 MSE가 최소 인 값을 찾을 수 있습니다.

따라서 우리는 기본적으로 잔차의 합이 0 (또는 최소값)에 가까워지고 예측 값이 실제 값에 충분히 근접하도록 예측을 업데이트합니다.

Gradient Boosting 뒤에 숨은 직관

그래디언트 부스팅의 논리는 간단합니다 (수학적 표기법을 사용하지 않고 직관적으로 이해할 수 있음). 이 게시물을 읽는 사람이라면 누구나 simple linear regression모델링에 익숙 할 것입니다 .

선형 회귀의 기본 가정은 잔차의 합이 0이라는 것입니다. 즉, 잔차는 0 주위에 무작위로 분산되어야합니다.

그림 3. 평균이 0 인 랜덤 정규 분포 잔차 샘플

이제 이러한 잔차를 예측 자 모델에 의해 저지른 실수로 생각하십시오. 비록 트리 기반 모델 (여기에서 그라디언트 부스팅을위한 기본 모델로 의사 결정 트리를 고려함) 은 그러한 가정을 기반으로하지 않지만,이 가정에 대해 논리적으로 (통계적으로가 아니라) 생각한다면, 우리가 볼 수 있다면 0 부근의 잔차 패턴을 사용하면 해당 패턴을 모델에 맞출 수 있습니다.

따라서 gradient boosting알고리즘 이면의 직관 은 잔차의 패턴을 반복적으로 활용하고 약한 예측으로 모델을 강화하고 개선하는 것입니다. 잔차에 모델링 할 수있는 패턴이없는 단계에 도달하면 잔차 모델링을 중지 할 수 있습니다 (그렇지 않으면 과적 합으로 이어질 수 있음). 알고리즘 적으로 테스트 손실이 최소값에 도달하도록 손실 함수를 최소화하고 있습니다.

요약하면,
• 먼저 간단한 모델로 데이터를 모델링하고 오류에 대한 데이터를 분석합니다.
• 이러한 오류는 단순 모델로는 적합하지 않은 데이터 포인트를 나타냅니다.
• 이후 모델의 경우 데이터를 올바르게 맞추기 위해 특히 적합하지 않은 모델에 중점을 둡니다.
• 결국 각 예측 자에 가중치를 부여하여 모든 예측자를 결합합니다.

동일한 논리에 대한 더 기술적 인 인용문은 아마도 대략 옳음 : 복잡한 세계에서 배우고 번영하기위한 자연의 알고리즘 ,

“이 아이디어는 약한 학습 방법을 여러 번 사용하여 일련의 가설을 얻는 것이며, 각 가설은 이전 사례가 어렵고 잘못 분류 된 예에 다시 초점을 맞추 었습니다. … 그러나이 작업을 수행 할 수있는 방법은 전혀 명확하지 않습니다. "

Gradient Boosting 모델을 맞추는 단계

1 개의 입력 (x) 및 1 개의 출력 (y) 변수가있는 아래의 산점도에 표시된 것처럼 시뮬레이션 된 데이터를 고려해 보겠습니다.

그림 4. 시뮬레이션 데이터 (x : 입력, y : 출력)

위에 표시된 플롯의 데이터는 아래 Python 코드를 사용하여 생성됩니다.

1. 데이터에 간단한 선형 회귀 분석기 또는 의사 결정 트리를 맞추십시오 (코드에서 의사 결정 트리를 선택했습니다) [x를 입력으로, y를 출력으로 호출]

2. 오차 잔차를 계산합니다. 실제 목표 값에서 예측 된 목표 값을 뺀 값 [e1 = y-y_predicted1]

3. 동일한 입력 변수를 사용하여 목표 변수로 오차 잔차에 대한 새 모델을 피팅합니다 [e1_predicted라고 함].

4. 예측 잔차를 이전 예측에 추가합니다.
[y_predicted2 = y_predicted1 + e1_predicted]

5. 아직 남아있는 잔차에 다른 모델을 적합합니다. 즉 [e2 = y-y_predicted2] 과적 합을 시작하거나 잔차 합이 일정해질 때까지 2 ~ 5 단계를 반복합니다. 유효성 검사 데이터의 정확성을 지속적으로 확인하여 과적 합을 제어 할 수 있습니다.

기본 개념의 이해를 돕기 위해 다음은 간단한 그라디언트 부스팅 모델을 처음부터 완전히 구현하는 링크입니다. [링크 : 처음부터 그라디언트 부스팅]

공유 코드는 그래디언트 부스팅의 최적화되지 않은 바닐라 구현입니다. 라이브러리에서 사용할 수있는 대부분의 그래디언트 부스팅 모델은 잘 최적화되어 있으며 많은 하이퍼 파라미터가 있습니다.

작동하는 Gradient Boosting Tree 시각화

파란색 점 (왼쪽) 플롯은 입력 (x) 대 출력 (y) • 빨간색 선 (왼쪽)은 의사 결정 트리에 의해 예측 된 값을 표시합니다. • 녹색 점 (오른쪽)은 i 번째 반복에 대한 잔차 대 입력 (x)을 나타냅니다. • 반복은 순차적임을 나타냅니다. 그라디언트 부스팅 트리를 맞추는 순서

그림 5. 그래디언트 부스팅 예측 시각화 (처음 4 회 반복)
그림 6. 그래디언트 부스팅 예측 시각화 (18 ~ 20 번째 반복)

우리는 20 번째 반복 후에 잔차가 0 주위에 무작위로 분포되어 있고 (여기서는 임의의 법선이라고 말하지 않습니다) 예측이 실제 값에 매우 가깝다는 것을 관찰합니다. ( 반복이 라고 n_estimators sklearn의 구현을). 이것은 중지하기에 좋은 지점이 될 것입니다. 그렇지 않으면 모델이 과적 합되기 시작할 것입니다.

50 번째 반복에서 모델이 어떻게 보이는지 보겠습니다.

그림 7. 그래디언트 부스팅 예측 시각화 (50 번째 반복)

50 번째 반복 후에도 잔차 대 x 플롯은 20 번째 반복에서 보는 것과 비슷합니다. 그러나 모델이 더욱 복잡해지고 예측이 훈련 데이터에 과적 합되어 각 훈련 데이터를 학습하려고합니다. 따라서 20 번째 반복에서 중지하는 것이 더 낫습니다.

위의 모든 그림을 그리는 데 사용되는 Python 코드 조각.

이 블로그가 그라디언트 부스팅이 작동하는 방법에 대한 기본적인 직관을 얻는 데 도움이 되었기를 바랍니다. 회귀에 대한 그라디언트 부스팅을 자세히 이해하려면 샌프란시스코 대학 교수진, Terence Parr ( ANTLR 파서 생성기 생성자 ) 및 Jeremy Howard ( fast.ai 창립 연구원) 의이 놀라운 기사를 읽을 것을 강력히 권장합니다 . 그라디언트 부스팅을 설명하는 방법 .

더 유용한 리소스

  1. 처음부터 GBM에 대한 내 github repo 및 kaggle 커널 링크 :
    https://www.kaggle.com/grroverpr/gradient-boosting-simplified/
    https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/01_Gradient_Boosting_Scratch.ipynb
  2. 그라디언트 부스팅에 대한 상세하고 직관적 인 설명 : Terence Parr 및 Jeremy Howard의 그라디언트 부스팅 설명 방법
  3. 처음부터 DecisionTree에 대한 Fast.ai github repo 링크 (대용량 ML / DL 관련 리소스) :
    https://github.com/fastai/fastai
  4. Alexander Ihler의 비디오 . 이 비디오는 제가 이해하는 데 정말 도움이되었습니다.

5. 널리 사용되는 GBM 알고리즘 :
XGBoost || Lightgbm || 캣 부스트 || sklearn.ensemble.GradientBoostingClassifier

Suggested posts

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

가장 유명한 행동 강령 중 하나입니다. "마술사는 절대 비밀을 밝히지 않습니다." 그러나 청중이 너무나 놀라워 서 '방금 일어난 일'이라는 느낌에 놀라서 비밀을 밝히지 않는 것이 거의 잔인한 순간이 있습니다.

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Auto-TS 라이브러리를 사용하여 ARIMA, SARIMAX, FB Prophet, VAR 및 ML 모델 개발

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Automated Machine Learning (AutoML)은 기계 학습 파이프 라인의 일부 구성 요소를 자동화하는 것을 말합니다. AutoML은 일부 모델 개발 프로세스를 자동화하여 데이터 과학자의 워크 플로를 가속화합니다.