TIL/머신러닝

11.16 머신러닝 벤츠 그래디언트 부스팅 (선형회귀, 결정 트리 모델 ,엑스트라 트리 모델 (ExtraTree) , Boosting , GBM,LightGBM,XGBoost)

monawa 2022. 11. 17.
728x90

선형회귀 (Linear Regression)

정의

통계학에서, 종속 변수 y와 한 개 이상의 독립 변수 X와의 선형 상관 관계를 모델링하는 회귀분석 기법

선형 회귀는 선형 예측 함수를 사용해 회귀식을 모델링하며, 알려지지 않은 파라미터는 데이터로부터 추정한다

 

주요 파라미터

  • fit_intercept
    이 모델에 대한 절편을 계산할지 여부입니다.
    False로 설정하면 계산에 절편이 사용되지 않습니다(즉, 데이터가 중앙에 위치할 것으로 예상됨).
  • n_jobs 
    계산에 사용할 스레드 수입니다.

 

선형회귀 특징

  1. 다른 모델들에 비해 간단한 작동 원리를 가지고 있다.
  2. 학습 속도가 매우 빠르다.
  3. 조정해줄 파라미터가 적다.
  4. 이상치에 민감하다.
  5. 데이터가 수치형 변수로만 이루어져 있을 경우, 데이터의 경향성이 뚜렷할 경우 사용하기 좋다.

 

선형 회귀 모델의 단점을 보완한 모델들

  • Ridge
  • Lasso
  • ElasticNet

 

선형회귀에서 random_state가 유의미한가요?

scikit learn에서 사용하는 randome_state는 성능을 위해서라기 보다는, 수행 시마다 동일한 결과를 얻기 위해 적용합니다. 예를 들어 random_state=1 이라고 하면 random 함수의 seed 값을 고정시키기 때문에 여러번 수행하더라도 같은 레코드를 추출합니다.

random 함수의 seed값을 random_state라고 생각하시면 됩니다.

 

train_test_split 시에 역시 random 함수가 적용되기 떄문에 random_state에 따라서 점수가 아주 조금씩 차이날 수는 있습니다

 

선형회귀보다 트리계열 모델을 사용하면 같은 데이터셋임에도 훨씬 나은 성능을 보여줍니다.

이상치도 포함되어 있습니다. 회귀모델은 이상치에 민감하기도 하고 다른 수치데이터에 대해 전처리가 많이 필요합니다.

장점 : 선형회귀는 간단하고 이해하기 쉽다

단점 : 설명력이 떨어진다 

 

성현회귀에 맞는 데이터셋을 사용하면 좋은 성능을 낼수있다 !


결정 트리 모델 

결정 트리 모델의 장점 

  • 결과를 해석하고 이해하기 쉽다.
    [간략한 설명만으로 결정 트리를 이해하는 것이 가능하다.]
  • 자료를 가공할 필요가 거의 없다.
    [다른 기법들의 경우 자료를 정규화하거나 임의의 변수를 생성하거나 값이 없는 변수를 제거해야 하는 경우가 있다.]
  • 수치 자료와 범주 자료 모두에 적용할 수 있다.
    [다른 기법들은 일반적으로 오직 한 종류의 변수를 갖는 데이터 셋을 분석하는 것에 특화되어 있다. (일례로 신경망학습은 숫자로 표현된 변수만을 다룰 수 있는 것에 반해 관계식(relation rules)은 오직 명목 변수만을 다룰 수 있다.]
  • 화이트박스 모델을 사용한다.
    [모델에서 주어진 상황이 관측 가능하다면 불논리
    를 이용하여 조건에 대해 쉽게 설명할 수 있다. (결과에 대한 설명을 이해하기 어렵기 때문에 인공신경망은 대표적인 블랙 박스 모델이다.)]
  • 안정적이다.
    [해당 모델 추리의 기반이 되는 명제가 다소 손상되었더라도 잘 동작한다.]
  • 대규모의 데이터 셋에서도 잘 동작한다.
    [방대한 분량의 데이터를 일반적인 컴퓨터 환경에서 합리적인 시간 안에 분석할 수 있다.]

주요 파라미터

  • criterion : 가지의 분할의 품질을 측정하는 기능입니다.
  • max_depth : 트리의 최대 깊이입니다.
  • min_samples_split :내부 노드를 분할하는 데 필요한 최소 샘플 수입니다.
  • min_samples_leaf : 리프 노드에 있어야 하는 최소 샘플 수입니다.
  • max_leaf_nodes : 리프 노드 숫자의 제한치입니다.
  • random_state : 추정기의 무작위성을 제어합니다. 실행했을 때 같은 결과가 나오도록 합니다.

특징

  1. 만들어진 모델에 대해서 시각화가 가능하다.
  2. 시각화가 가능하므로 비전문가도 이해하기 쉽다.
  3. 데이터의 스케일에 구애받지 않는다. (각 특성이 개별적으로 처리됨)
  4. 데이터의 내 변수의 종류가 달라도 잘 작동한다. (선형회귀에서는 수치형 변수만 사용 가능했음)
  5. 학습용 데이터에 과대적합되는 단점이 있다.

이러한 결정 트리 모델의 특성을 알고, 적절한 상황에 사용하는 것이 중요합니다.

 


엑스트라 트리 모델 (ExtraTree)

정의 

극도로 무작위화(Extremely Randomized Tree)된 모델

 

랜덤 포레스트에서와 같이 후보 기능의 무작위 하위 집합이 사용되지만 가장 차별적인 임계값을 찾는 대신 각 후보 기능에 대해 임계값이 무작위로 그려지고 무작위로 생성된 임계값 중 가장 좋은 것이 분할 규칙으로 선택됩니다

이것은 일반적으로 약간 더 큰 편향 증가를 희생시키면서 모델의 분산을 조금 더 줄일 수 있습니다.

 

주요 파라미터

n_estimators : 나무의 수

criterion : 분할의 품질을 측정하는 기능

max_depth : 트리의 최대 깊이

min_samples_split : 내부 노드를 분할하는 데 필요한 최소 샘플 수

max_features : 최상의 분할을 찾을 때 고려해야 할 기능의 수

 

특징

  1. 분기 지점을 랜덤으로  선택하기 때문에 랜덤포레스트보다 속도가 더 빠르다.
  2. 1과 동일한 이유로 랜덤포레스트보다 더 많은 특성을 고려할 수 있다.
  3. 랜덤포레스트와 동일한 원리를 이용하기 때문에 많은 특징을 공유한다.
  4. 랜덤포레스트와 비교해 성능이 미세하게 우위에 있다.

 


Boosting

부스팅 기법은 여러 얕은 트리를 연결하며 편향과 분산을 줄여 강력한 트리를 생성하는 기법입니다.

이전 트리에서 틀렸던 부분에 가중치를 주며 지속적으로 학습해나갑니다.

=> 오분류된 샘플에 더 많은 가중치를 주어 학습하는 방식

Bagging Boosting
데이터 셋 모델마다 독립적, 동시에 진행(병렬 학습) 앞 모델이 데이터 셋 정해줌, 순차적 진행(순차적[직렬] 학습)
속도가 빠르고 오버피팅 될 가능성이 낮다.(Boosting보다)  
앞 모델이 데이터 셋 정해줌 데이터 셋 모델마다 독립적
오버피팅이 문제라면 사용 개별 결정 트리의 낮은 성능이 문제라면 사용
훈련세트에서 중복을 허용해서 샘플링하여 여러개 모델을 훈련 하는 앙상블 방식 약한 모델을 여러개 연결해서 강한 모델을 만들어 내기 위한 앙상블 방식입니다.
같은 훈련 샘플을 여러 개의 모델에 걸쳐 사용해서 모든 모델이 훈련을 마치면 앙상블은 모든 예측기의 예측을 모아서 새로운 샘플에 대한 예측을 생성 부스팅의 아이디어는 앞의 모델들을 보완해 나가면서 일련의 모델들을 학습시켜 나가는 것

 

Boosting(부스팅)
Bagging(배깅)

 

부스팅을 사용하는 알고리즘

  • GBM
  • XGBoost
  • LightGBM
  • CatBoost

GBM, XGBoost, LightGBM모델들에 모두 들어가는  G(Gradient)그라디언트라는 용어는?

=> 경사. 기울기를 의미한다 

사용법 

오차의 기울기가 최소가 되는 지점을 찾아가는 것으로

가중치 업데이트할 때 경사하강법(gradient descent) 사용하기 떄문에!

(이 Gradient 의 개념은 딥러닝에서도 예측값과 정답값간의 차이가 손실함수인데 이 크기를 최소화시키는 파라미터를 찾기 위해 사용합니다.)

 

경사하강법

기울기가 낮은 지점을 찾아서 내려감

손실이 가장 작은 지점을 찾기 위해서 기울기가 0인 지점을 찾기 위해서 경사를 점점 내리는 것

기울기가 낮은 지점을 찾아서 내려감 예측값과 정답값 사이에 손실이 최소화될수록 좋은 모델입니다.

 

따라서 경사하강법의 목적은 손실함수가 가장 작고, 예측을 잘 하는 모델의 파라미터를 찾기 위함입니다.

 

learning_rate

학습률을 의미하며, 보폭이라고도 번역한다.

그러므로 러닝레이트를 너무 작게 설정하면 학습이 오래 걸립니다.

그렇다고 보폭이 너무 크면 속도는 빠르지만 손실 값은 클 수 있습니다(대충 찾기 때문에 최소점을 지나칠 수도 있다.)

그래서 발산을 하기도 한다(Big learning rate = very high learning rate)

 

epoch

  • n_estimators 와 같은 개념으로 부스팅 트리에서 n_estimators 는 몇 번째 트리인지를 의미한다.
  • epoch는 단순히 학습 횟수를 의마한다 

GBM(Gradient Boosting Machine)

- 회귀 또는 분류 분석을 수행할 수 있는 예측모형

- 예측모형의 앙상블 방법론 중 부스팅 계열에 속하는 알고리즘 

- 머신러닝 알고리즘 중에서도 가장 예측 성능이 높다고 알려진 알고리즘으로 GBM구현한 패키지들이 다수 

- GBM은 계산량이 상당히 많이 필요한 알고리즘이기 때문에, 이를 하드웨어 효율적으로 구현하는 것이 필요

- Residual fitting : epoch만큼 반복하며 점점 잔차(Residual)를 줄임

 

대표적인 라이브러리

Xgboost, Catboost, LightGBM

 

특징 

(장점)

  • 랜덤 포레스트와 다르게 무작위성이 없다
    (이전 오차를 보완해서 순차적으로 만들기 때문)
  • 데이터의 스케일에 구애받지 않는다

(단점)

  • 매개변수를 잘 조정해야 한다 & 훈련 시간이 길다
  • 고차원의 희소한 데이터에 잘 작동하지 않는다 (ex : 0이 많은 데이터)

 

성능에 고려 없이 GBM 에서 훈련시간을 줄이려면 어떻게 하면 좋을까요?

learning_rate, 학습률, 보폭 보통 같은 의미로 쓰입니다.

보폭을 크게하면 빨리 걸을수 있듯이

learning_rate 를 올리면 학습시간은 줄어들지만 제대로 된 loss(손실)가 0이 되는 지점을 제대로 찾지 못할 수도 있습니다

 

GBM 은 왜 랜덤 포레스트와 다르게 무작위성이 없을까요?

순차적으로 추출하기 때문입니다

이전 오차를 보완해서 순차적으로 만들기 때문에 무작위성이 없습니다.

 


그래디언트 부스팅 트리 (Gradient Boosting Tree)

경사하강법(gradient descent)
손실이 가장 작은 지점을 찾기 위해서 기울기가 0인 지점을 찾아 경사를 점점 내려가는 방법

경사하강법의 목적은 손실함수가 가장 작고, 예측을 잘 하는 모델의 파라미터를 찾기 위함입니다.

 

Gradient Boosting Machine 에서 Gradient 는 기울기를 의미합니다

loss를 측정하여 loss가 최소가되는 지점을 찾기 위해 사용합니다

 

특징

    1. 랜덤 포레스트와 다르게 무작위성이 없다.
    2. 매개변수를 잘 조정해야 하고 훈련 시간이 길다.
    3. 데이터의 스케일에 구애받지 않는다.
    4. 고차원의 희소한 데이터에 잘 작동하지 않는다.

주요 파라미터

  • loss: 최적화시킬 손실 함수입니다. {‘squared_error’, ‘absolute_error’, ‘huber’, ‘quantile’}, default=’squared_error’
  • learning_rate: 각 트리의 기여도를 제한하는 파라미터입니다.
  • n_estimators: 부스팅 단계를 지정하는 파라미터입니다.
  • subsample: 개별 기본 학습자를 맞추는 데 사용할 샘플의 비율입니다.

GBT도 트리 기반 모델이므로, 다른 트리 기반 모델과 트리와 관련된 많은 파라미터를 공유합니다.

 

Residual 은 무엇일까요?

잔차(오차, 잔차 비슷한 의미입니다. 오차와 잔차도 다른 의미로 보기도 합니다. 여기에서는 잔차에 더 가깝다.)

 

오차  = 모집단의 회귀식에서 예측되는 값 (실제 관측값)

잔차 = 표본집단의 회귀식에서 예측된 값 (실제관측값)

 

 

손실함수에서 absolute loss 는 지원은 하지만 squared loss 를 더 많이 사용할까?

.

squared losss는 기울기가 +, - 방향에 따라 같은 기울기가 나오기 때문에 방향은 알 수 있지만 기울기가 같아서 미분을 했을 때 방향에 따라 같은 미분값이 나와서 기울기가 큰지, 작은지 비교할 수 없습니다.

그래서 squared loss 를 더 많이 사용합니다.

 


XGBoost(Extreme Gradient Boosting)

  • GBT에서 병렬 학습을 지원하여 학습 속도가 빨라진 모델
  • 기본 GBT에 비해 더 효율적이고, 다양한 종류의 데이터에 대응할 수 있으며 이식성이 높다.
  • 머신 러닝 대회에서 우승한 많은 팀이 선택한 알고리즘으로 최근 많은 인기와 주목을 받는다
  • 모든 가능한 트리를 나열하여 최적 트리를 찾는 것은 거의 불가능하기 때문에, 2차 근사식을 바탕으로 한 손실함수를 토대로 매 iteration마다 하나의 leaf로부터 가지를 늘려나가는 것이 효율적이다
  • 손실 함수가 최대한 감소하도록 하는 split point(분할점)를 찾는 것이 XGBoost의 목표
  • Hyper Parameter의 종류가 많음

장점

  • GBM 대비 빠른 수행시간(병렬 처리)
  • 과적합 규제(Regularization)
    표준 GBM 경우 과적합 규제기능이 없으나, XGBoost는 자체에 과적합 규제 기능으로 강한 내구성을 지님
  • 분류와 회귀영역에서 뛰어난 예측 성능 발휘(광범위한 영역)
  • Early Stopping(조기 종료) 기능이 있음
  • 다양한 옵션(Hyper Parameter)을 제공하며 Customizing이 용이

단점

  • XGBoost는 GBM에 비해 좋은 성능을 보여주고 비교적 빠르지만 그래도 여전히 학습시간이 느림
  • Hyper Parameter 수가 많아 Hyper Parameter 튜닝을 하게되면 시간이 더욱 오래 걸림
  • 모델의 Overfitting

 

https://xgboost.readthedocs.io/en/stable/parameter.html


LightGBM

수렴은 당연히 lightGBM이 제일 빠르다. feature engineering검증시 제일 선호되는 이유기도 하다.

정의

  • Microsoft에서 개발한 머신러닝을 위한 무료 오픈소스 분산 그래디언트 부스팅 프레임워크
  • GOSS(Gradient based One Side Sampling)와 EFB(Exclusive Feature Bundling)를 적용한 LightGBM은 XGBoost와 비교해 정확도는 유지하며, 학습 시간을 상당히 단축시킨 모델
  • 결정 트리 알고리즘을 기반으로 하며 순위 지정 , 분류 및 기타 기계 학습 작업에 사용
  • 개발 초점은 성능과 확장성에 있다.

장점

  • 더 빠른 훈련 속도와 더 높은 효율성
  • 적은 메모리 사용량
  • 더 나은 정확도
  • 병렬, 분산 및 GPU 학습 지원
  • 대규모 데이터를 처리

단점

  • LightGBM은 overfitting (과적합)에 민감하고 작은 데이터에 대해서 과적합되기 쉬움

특징

  • 트리 기반 학습 알고리즘을 사용하는 그래디언트 부스팅 프레임워크
  • GBT, GBDT , GBRT , GBM , MART 및 RF를 포함한 다양한 알고리즘을 지원
  • GOSS (Gradient based One Side Sampling) 기울기 기반 단측 샘플링
  • EFB (Exclusive Feature Bundling) 배타적 특성 묶음

GOSS 

기울기 기반 단측 샘플링 (Gradient-based One-side Sampling)

  •  데이터에서 큰 Gradient를 가진 모든 인스턴스를 사용해서 무작위로 Sampling을 수행함
  • 많이  틀린 데이터 위주로 샘플링
  • 대규모 데이터 인스턴스를 다루기 위한 것
    => 행을 줄입니다.

EFB 

배타적 특성 묶음 (Exclusive Feature Bundling)

  • 대규모 Features 수를 다루기 위한 것
    => 열을 줄입니다.

GBDT(Gradient Boosting Decision Tree)는 Feature차원이 높고 데이터 크기가 클 경우, 가능한 모든 분할 지점의 Information Gain을 추정하기 위해 모든 데이터 인스턴스를 탐색해야 될 때 많은 시간을 소비해야 한다는 문제가 있음


기타 알게된점들 

미니프로젝트 팁

  • 공유된 노트북이 많은 데이터셋이나 대회를 고른다
  • 데이터 크기가 너무 크지 않은 것을 찾습니다 너무 크면 학습이나 검증에 오래 걸려 여러 방법을 시도해 보기 어렵다
  • 범주형 수치형 변수가 다양하게 들어있는 데이터셋이 여러 방법을 시도해 보기에 좋습니다.

 

왜 부스팅 계열 모델이 설치가 잘 되기도 하지만 설치에 실패하는 경우가 생길까요?

다른 언어로 작성되었는데 파이썬 wrapper API 를 제공하고 있습니다.

구동하려면 다른 언어 환경이 함께 필요한 경우가 많습니다.

기존에 다른 도구를 설치하다가 해당 언어 환경 도구를 설치해 놨던 분들은 비교적 잘 설치가 되지만, 처음 설치할 때는 실패하는 경우가 많습니다.

 

conda 는 비교적 패키징이 잘 되어 있어서 관련된 환경을 잘 구성해 줍니다.

그래서 되도록이면 conda 로 설치해야 스트레스가 줄어듭니다.

 

캐글 점수를 볼 때 public말고 private으로 보면 되나요??

점수에는 public score와 private score가 있습니다.

대회마다 public score와 private score를 매기는 방식이 다 다르지만, 일반적으로 public score는 전체 데이터 중 일부만을 샘플링하여 채점하고, private score는 전체 데이터 중 더 많은 데이터를 대상으로 채점합니다.

 

참가자들이 얻은 public score는 리더보드에 공개되며 이를 바탕으로 현재 위치를 가늠할 수 있습니다.

그러나 최종 결과는 private score로 결정됩니다.

 

OneHotEncoder와 pd.get_dummies의 차이

OneHotEncoder pd.get_dummies
전체 데이터 변환
(수치 데이터 포함) ⇒ 범주 데이터를 따로 넣어 인코딩
범주형 데이터만 변환

오답노트 

train, test 의 데이터셋에서 train, test 의 피처수가 같아야 한다.

 

트리계열 알고리즘 파라미터

criterion: 가지의 분할의 품질을 측정하는 기능입니다.

max_depth: 트리의 최대 깊이입니다.

min_samples_split:내부 노드를 분할하는 데 필요한 최소 샘플 수입니다.

min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수입니다.

max_leaf_nodes: 리프 노드 숫자의 제한치입니다.

random_state: 추정기의 무작위성을 제어합니다. 실행했을 때 같은 결과가 나오도록 합니다.

 

 

참고문헌

멋쟁이사자처럼 ais7 수업내용 

https://ko.wikipedia.org/wiki/%EA%B2%B0%EC%A0%95_%ED%8A%B8%EB%A6%AC_%ED%95%99%EC%8A%B5%EB%B2%95

https://ko.wikipedia.org/wiki/선형_회귀

https://xgboost.readthedocs.io/en/stable/parameter.html

https://for-my-wealthy-life.tistory.com/35?category=950145 

http://machinelearningkorea.com/2019/09/25/lightgbm%EC%9D%98-%ED%95%B5%EC%8B%AC%EC%9D%B4%ED%95%B4/

728x90

댓글