편향 분산 트레이드오프


편향 분산 트레이드오프는 머신러닝이 극복해야 할 중요한 이슈 중 하나이다. 다음은 편향 분산을 직관적으로 나타내고 있는 양궁 과녁 그래프이다.

 

왼쪽 상단의 저편향/저분산은 예측 결과가 실제 결과에 매우 잘 근접하면서도 예측 변동이 크지 않고 특정 부분에 집중되어 있는 아주 뛰어난 성능을 보여준다. 상단 오른쪽의 저편향/고분산은 예측 결과가 실제 결과에 비교적 근접하지만, 예측 결과가 실제 결과를 중심으로 꽤 넓은 부분에 분포되어 있다. 왼쪽 하단의 고편향/저분산은 정확한 결과에서 벗어나면서도 예측이 특정 부분에 집중돼 있다. 마지막으로 하단 오른쪽의 고편향/고분산은 정확한 예측 결과를 벗어나면서도 넓은 부분에 분포되어 있다.

 

일반적으로 편향과 분산은 한 쪽이 높으면 한 쪽이 낮아지는 경향이 있다. 즉, 편향이 높으면 분산은 낮아지고(과소적합) 반대로 분산이 높으면 편향이 낮아진다(과적합). 다음 그림은 편향과 분산의 관계에 따른 전체 오류값의 변화를 보여준다. 편향이 너무 높으면 전체 오류가 높다. 편향을 점점 낮추면 동시에 분산이 높아지고 전체 오류도 낮아지게 됩니다. 편향을 낮추고 분산을 높이면서 전체 오류가 가장 낮아지는 골디락스지점을 통과하면서 분산을 지속적으로 높이면 전체 오류값이 오히려 증가하면서 예측 성능이 다시 저하된다.

 

높은 편향/낮은 분산에서 과소적합되기 쉬우며 낮은 편향/높은 분산에서 과적합되기 쉽다. 편향과 분산이 서로 트레이드오프를 이루면서 오류 Cost 값이 최대로 낮아지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델을 만드는 것이다.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://www.opentutorials.org/module/3653/22071

경사 하강법이란?


경사 하강법은 데이터를 기반으로 알고리즘이 스스로 학습한다는 머신러닝의 개념을 가능하게 만들어준 핵심 기법 중 하나이다. 경사 하강법의 사전적 의미인 점진적인 하강이라는 뜻에서도 알수 있듯, 점진적으로 반복적인 계산을 통해 W 파라미터 값을 업데이트하면서 오류값이 최소가 되는 W 파라미터를 구하는 방식이다.

 

최초 오류값이 100이었다면 두 번째 오류값은 100보다 작은 90, 세 번째는 80과 같은 방식으로 지속해서 오류를 감소시키는 방향으로 W 값을 계속 업데이트한다. 그리고 오류값이 더 이상 작아지지 않으면 그 오류값을 최소 비용으로 판단하고 그때의 W 값을 최적 파라미터로 반환한다.

 

경사하강법의 핵심은 어떻게 하면 오류가 작아지는 방향으로 W 값을 보정할 수 있는가에 대한 물음이 핵심이다. 속도와 같은 포물선 형태의 2차 함수의 최저점은 해당 2차 함수의 미분값인 1차 함수의 기울기가 가장 최소일 때이다. 경사 하강법은 최초 w에서부터 미분을 적용한 뒤 이 미분 값이 계속 감소하는 방향으로 순차적으로 w를 업데이트한다. 더 이상 미분된 1차 함수의 기울기가 감소하지 않는 지점을 비용 함수가 최소인 지점으로 간주하고 그때의 w를 반환한다.

 

 

일반적으로 경사 하강법은 모든 학습 데이터에 대해 반복적으로 비용함수를 최소화를 위한 값을 업데이트하기 때문에 수행 시간이 매우 오래 걸린다는 단점이 있다. 때문에 실전에서는 대부분 확률적 경사 하강법(Stochastic Gradient Descent)를 이용한다. 확률적 경사 하강법은 전체 입력 데이터로 w가 업데이트되는 값을 계산하는 것이 아니라 일부 데이터에만 이용해 w가 업데이트되는 값을 계산하므로 경사 하강법에 비해서 빠른 속도를 보장한다. 따라서 대용량의 데이터의 경우 대부분 확률적 경사 하강법이나 미니 배추 확률적 경사 하강법을 이용해 최적 비용함수를 도출한다.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] http://blog.naver.com/samsjang/220959562205

 

회귀 소개


회귀는 현대 통계학을 떠받치고 있는 주요 기둥 중 하나이다. 회귀 기반의 분석은 엔지니어링, 의학, 사회과학, 경제학 등의 분야가 발전하는 데 크게 기여해왔다. 회귀 분석은 유전적 특성을 연구하던 영국의 통계학자 갈톤(Galton)이 수행한 연구에서 유래했다는 것이 일반론이다. 부모와 자식 간의 키의 상관관계를 분석했던 갈톤은 부모의 키가 모두 클 때 자식의 키가 크긴 하지만 그렇다고 부모를 능가할 정도로 크지 않았고, 부모의 키가 모두 아주 작을 때 그 자식의 키가 작기는 하지만 부모보다는 큰 경향을 발견했다. 부모의 키가 아주 크더라도 자식의 키가 부모보다 더 커서 세대를 이어가면서 무한정 커지는(발산) 것은 아니며, 부모의 키가 아주 작더라도 자식의 키가 부모보다 더 작아서 세대를 이어가며 무한정 작아지는(수렴) 것이 아니라는 것이다. 즉, 사람의 키는 평균 키로 회귀하려는 경향을 가진다는 자연의 법칙이 있다는 것이다.

 

회귀는 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭한다. 예를 들어 아파트의 방 개수, 방 크기, 주변 학군 등 여러 개의 독립변수에 따라 아파트 가격이라는 종속변수가 어떤 관계를 나타내는지를 모델링하고 예측하는 것이다. $Y = W_1 * X_1 + W_2 * X_2 + W_3 * X_3 + \dots + W_n * X_n$이라는 선형 회귀식을 예로 들면 $Y$는 종속변수, 즉 아파트 가격을 뜻한다. 그리고 $X_1, X_2, X_3, \dots, X_n$은 방 개수, 방 크기, 주변 학군 등의 독립변수를 의미한다. 그리고 $X_1, X_2, X_3, \dots, X_n$은 독립변수의 값에 영향을 미치는 회귀 계수(Regression coefficients)이다. 머신러닝 관점에서 보면 독립변수는 피처에 해당되며 종속변수는 결정 값이다. 머신러닝 회귀 예측의 핵심은 주어진 피처와 결정 값 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아내는 것이다.

 

회귀는 회귀 계수의 선형/비선형 여부, 독립변수의 개수, 종속변수의 개수에 따라 여러가지 유형으로 나눌 수 있다. 회귀에서 가장 중요한 것은 회귀 계수이며, 이 회귀 계수가 선형인지 아닌지에 따라 선형 회귀와 비선형 회귀로 나눌 수 있다. 그리고 독립변수의 개수가 한 개인지 여러 개인지에 따라 단일 회귀, 다중 회귀로 나뉜다.

 

지도학습은 크게 분류와 회귀로 나뉜다. 이 두 기법의 가장 큰 차이는 분류는 예측값이 카테고리와 같은 이산형 클래스 값이고, 회귀는 연속형 숫자 값이라는 것이다. 

 

여러 가지 회귀 중에서 선형 회귀가 가장 많이 사용된다. 선형 회귀는 실제 값과 예측값의 차이(오류의 제곱 값)를 최소화하는 직선형 회귀선을 최적화하는 방식이다. 선형 회귀 모델은 규제(Regularization) 방법에 따라 다시 별도의 유형으로 나뉠 수 있다. 규제는 일반적인 선형 회귀의 과적합 문제를 해결하기 위해서 회귀 계수에 패널티 값을 적용하는 것을 말한다. 대표적인 선형 회귀 모델은 다음과 같다.

 

선형 회귀 모델


  • 일반 선형 회귀 : 예측값과 실제값의 RSS(Residual Sum of Squares)를 최소화할 수 있도록 회귀 계수를 최적화하며, 규제(Regularization)를 적용하지 않은 모델이다.

 

  • 릿지(Ridge) : 릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델이다. 릿지 회귀는 L2 규제를 적용하는데, L2 규제는 상대적으로 큰 회귀 계수 값의 예측 영향도를 감소시키기 위해서 회귀 계수값을 더 작게 만드는 규제 모델이다.

 

  • 라쏘(Lasso) : 라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식이다. L2 규제가 회귀 계수 값의 크기를 줄이는 데 반해,  L1 규제는 예측 영향력이 적은 피처의 회귀 계수를 0으로 만들어 회귀 예측 시 피처가 선택되지 않게 하는 것이다. 이러한 특성 때문에 L1 규제는 피처 선택 기능으로도 불린다.

 

  • 엘라스틱넷(LeasticNet) : L2, L1 규제를 함께 결합한 모델이다. 주로 피처가 많은 데이터 셋에서 적용되며, L1 규제로 피처의 개수를 줄임과 동시에 L2 규제로 계수 값의 크기를 조정한다.

 

  • 로지스틱 회귀(Logistic Regression) : 로지스틱 회귀는 회귀라는 이름이 붙어 있지만, 사실은 분류에 사용되는 선형 모델이다. 로지스틱 회귀는 매우 강력한 분류 알고리즘이다. 일반적으로 이진 분류뿐만 아니라 희소 영역의 분류, 예를 들어 텍스트 분류와 같은 영역에서 뛰어난 예측 성능을 보인다.

 

단순 선형 회귀를 통한 회귀 이해


단순 선형 회귀는 독립변수도 하나, 종속변수도 하나인 선형 회귀이다. 예를 들어, 주택 가격이 주택의 크기로만 결정된다고 하면 2차원 평면에 직선(선형)형태의 관계로 표현할 수 있다. $X$축이 주택의 크기이고, $Y$축이 가격이라할 경우 1차 함수식으로 모델링할 수 있다.

 

$\hat{Y} = \omega_0 + \omega_1 * X$

 

위 설명의 모델링과는 별개로 선형 회귀 모델을 보이기 위한 자료

 

독립 변수가 1개인 단순 선형 회귀에서는 기울기인 $\omega_1$과 절편인 $\omega_0$을 회귀 계수로 지칭한다. 위와 같은 1차 함수로 모델링했다면 실제 주택 가격은 이러한 1차 함수 값에서 실제 값만큼의 오류 값을 빼거나 더한 값이 된다.

 

이렇게 실제값과 회귀 모델의 차이에 따른 오류값을 남은 오류, 즉 잔차라 부른다. 최적의 회귀 모델을 만든다는 것은 전체 데이터의 잔차(오류값) 합이 최소가 되는 모델을 만든다는 의미이며, 동시에 오류값 합이 최소가 될 수 있는 최적의 회귀 계수를 찾는다는 의미이다.

 

오류값은 +나 -가 될 수 있기에 전체 데이터의 오류합을 구하기 위해 단순히 더할경우 뜻하지 않게 오류합이 줄어들 수 있다. 따라서 보통 오류합을 계산할 때는 절대값을 취해서 더하거나, 오류값의 제곱을 구해서 더하는 방식(RSS, Residual Sum of Square)를 취한다. 일반적으로 미분 등의 계산을 편리하게 하기 위해서 RSS(Residual Sum of Square) 방식으로 오류합을 구한다. 즉, $Error^2 = RSS$이다.

 

$RSS$는 이제 변수가 $\omega_0, \omega_1$인 식으로 표현할 수 있으며, 이 $RSS$를 최소로 하는 $\omega_0, \omega_1$, 즉 회귀 계수를 학습을 통해서 찾는 것이 머신러닝 기반 회귀의 핵심 사항이다. $RSS$는 회귀식의 독립변수 $X$, 종속변수 $Y$가 중심 변수가 아니라 $\omega$ 변수(회귀 계수)가 중심 변수임을 인지하는 것이 매우 중요하다(학습 데이터로 입력되는 독립변수와 종속변수는 $RSS$에서 모두 상수로 간주한다. 일반적으로 $RSS$는 학습 데이터의 건수로 나누어서 다음과 같이 정규화된 식으로 표현된다.

 

$RSS(\omega_0,\omega_1) =$ $1 \over N$ $\sum_{i=1}^N (y_i - (\omega_0 + \omega_1 * x_i))^2$

 

회귀에서 $RSS$는 비용(Cost)이며 $\omega$ 변수(회귀 계수)로 구성되는 $RSS$를 비용 함수라고 한다. 머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값(즉, 오류값)을 지속해서 감소시키고 최종적으로는 더 이상 감소하지 않는 최소의 오류값을 구하는 것이다. 비용 함수를 손실 함수(loss function)라고도 한다.

 

회귀 평가 지표


회귀의 평가를 위한 지표는 실제값과 회귀 예측값의 차이값을 기반으로 한 지표가 중심이다. 실제값과 예측값의 차이를 단순히 더하면 +와 -가 섞여서 오류가 상쇄된다. 예를 들어 데이터 두 개의 예측 차이가 하나는 -3, 다른 하나는 +3일 경우 단순히 더하면 오류가 0으로 나타나기 때문에 정확한 지표가 될 수 없다. 따라서 오류의 절대값 평균이나 제곱, 또는 제곱한 뒤 다시 루트를 씌운 평균값을 구한다. 일반적으로 회귀의 성능을 평가하는 지표는 다음과 같다.

 

평가 지표 설명 수식
MAE Mean Absolute Error이며 실제값과 예측값의 차이를 절대값으로 변환해 평균한 것 $MAE = $ $1 \over n$ $\sum_{i=1}^n |Yi - \hat{Y}i|$
MSE Mean Squared Error이며 실제값과 예측값의 차이를 제곱해 평균한 것 $MSE = $ $1 \over n$ $\sum_{i=1}^n (Yi - \hat{Y}i)^2$
RMSE MSE 값은 오류의 제곱을 구하므로 실제 오류 평균보다 더 커지는 특성이 있으므로 MSE에 루트를 씌운 것이 RMSE. $RMSE = $ $\sqrt {{1 \over n} \sum_{i=1}^n (Yi - \hat{Y}i)^2}$
$R^2$ 분산 기반으로 예측 성능을 평가한다. 실제값의 분산 대비 예측값의 분산 비율을 지표로 하며, 1에 가까울수록 예측 정확도가 높음 $R^2 = {예측값 Variacne \over 실제값 Variance}$

 

이외에도 MSE나 RMSE에 로그를 적용한 MSLE(Mean Squared Log Error)와 RMSLE(Root Mean Squared Log Error)도 사용한다. 사이킷런은 RMSE를 제공하지 않는다. 따라서 RMSE를 구하기 위해서는 MSE에 제곱근을 씌워서 계산하는 함수를 직접 만들어야 한다. 다음은 각 평가 방법에 대한 사이킷런의 API 및 cross_val_score나 GridSearchCV에서 평가 시 사용되는 scoring 파라미터의 적용값이다.

 

평가 방법 사이킷런 평가 지표 API Scoring 함수 적용 값
MAE metrics.meam_absoulte_error 'neg_mean_absolute_error'
MSE metrics.mean_squared_error 'neg_mean_squared_error'
$R^2$ metrics.r2_score 'r2'

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://ko.wikipedia.org/wiki/회귀_분석

이상치 데이터는 아웃라이어라고도 불리며 전체 데이터의 패턴에서 벗어난 이상 값을 가진 데이터이다.

이로인해 머신러닝 모델의 성능에 영향을 받는 경우가 발생하기 쉽다. 이상치를 찾는 방법은 여러 가지가 있지만 대표적으로 IQR(Inter Quantile Range) 방식을 적용할 수 있다

 

Inter Quantile Range


IQR는 사분위(Quantile) 값의 편차를 이용하는 기법으로 흔히 박스 플롯(Box Plot) 방식으로 시각화할 수 있다.

사분위는 전체 데이트를 값을 오름차순하고 1/4(25%)씩 구간을 분할하는 것을 지칭한다.

 

가령 100명의 시험 성적이 0점부터 100점까지 있다면, 이를 100등부터 1등까지 성적순으로 정렬한 뒤에 1/4 구간으로 Q1, Q2, Q3, Q4와 같이 나누는 것이다.

 

IQR을 이용해 이상치 데이터를 검출하는 방식은 아래와 같이 보통 IQR에 1.5를 곱해서 생성된 범위를 이용해 최댓값과 최솟값을 결정한 뒤 최댓값을 초과하거나 최솟값에 미달하는 데이터를 이상치로 간주하는 것이다.

 

이상치 데이터를 검출하기 위해서는 가장 먼저 어떤 피처의 이상치를 뽑을 것인지에 대한 선택이 중요합니다. 매우 많은 피처가 있을 경우 이들 중 결정값과 가장 상관성이 높은 피처들을 위주로 이상치를 검출하는 것이 좋다. 모든 피처들의 이상치를 검출하는 것은 시간 자원이 많이 소모되며, 결정값과 상관성이 높지 않은 피처일 경우 이상치를 제거하더라도 성능 향상에 기여하지 않기 떄문이다. DataFrame의 corr()를 이용해 각 피처별로 상관도를 구한 뒤 시본의 heatmap을 사용해 시각화가 가능하다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

지도학습에서 극도로 불균형한 레이블 값 분포로 인한 문제점을 해결하기 위해선 적절한 학습 데이터를 확보하는 방안이 필요하다. 대표적으로 오버 샘플링과 언더 샘플링 방법이 있다. 오버 샘플링 방식이 예측 방식이 예측 성능상 더 유리한 경우가 많아 주로 사용된다. 다음은 샘플링 방법을 설명한다.

 

언더 샘플링은 많은 데이터 셋을 적은 데이터 셋 수준으로 감소시키는 방식이다. 가령 정상 레이블을 가진 데이터가 10,000건, 비정상 레이블을 가진 데이터가 100건이 있을 경우 정상 레이블 데이터를 100건으로 줄이는 방식이다.

 

오버 샘플링은 비정상 데이터와 같이 적은 데이터 셋을 증식하여 학습을 위한 충분한 데이터를 확보하는 방법이다. 동일한 데이터를 단순히 증식하는 방법은 과적합이 되기 때문에 의미가 없으므로 원본 데이터의 피처 값들을 아주 약간만 변경하여 증식하며 대표적으로 SMOTE(Synthetic Minority Over-Sampling Technique) 방법이 있다.

 

SMOTE


SMOTE는 적은 데이터 셋에 있는 개별 데이터들의 K 최근접 아웃(K Nearest Neighbor)을 찾아서 이 데이터와 K개 이웃들의 차이를 일정 값으로 만들어서 기존 데이터와 약간 차이가 나는 새로운 데이터들을 생성하는 방식이다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://joonable.tistory.com/27

LightGBM


LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각광을 받고 있다. XGBoost의 경우 매우 뛰어난 부스팅 알고리즘이지만 여전히 학습 시간이 오래 걸린다는 단점이 있다.

 

XGBoost에서 GridSearchCV로 하이퍼 파라미터 튜닝을 수행하다 보면 수행 시간이 너무 오래걸려서 많은 파라미터를 튜닝하기에 어려움을 겪을 수 밖에 없다. 물론 GBM보다는 빠르지만, 대용량 데이터의 경우 만족할 만한 학습 성능을 기대하려면 많은 CPU 코어를 가진 시스템에서 높은 병렬도로 학습을 진행해야 한다.

 

LightGBM의 가장 큰 장점은 XGBoost보다 학습에 걸리는 시간이 훨씬 적고 메모리 사용량도 상대적으로 적다. 'Light'라는 이미지가 가벼움을 뜻하게되어 상대적으로 떨어진다든가 기능상의 부족함이 있다고 인식될 수 있으나 실상은 그렇지 않다.

 

LighGBM과 XGBoost의 예측 성능은 별다른 차이가 존재하지 않는다. 또한 기능상의 다양성은 LightGBM이 약간 더 많다. XGBoost가 만들어진 2년 후에 LightGBM이 만들어졌기에 XGBoost의 장점은 계승하고 단점은 보완하는 방식으로 개발되었기 때문이다.

 

그럼에도 불구하고 LightGBM의 한 가지 단점으로는 적은 데이터 셋에 적용할 경우 과적합이 발생하기 쉽다는 것이다. 적은 데이터 셋의 기준은 일반적으로 10,000건 이하의 데이터 셋이라 LightGBM 공식 문서에서 기술하고 있다.

 

LightGBM은 일반 GBM 계열의 트리 분할 방법과 달리 리프 중심 트리 분할(Leaf Wise) 방식을 사용한다. 기존의 대부분 트리 기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할(Level Wise) 방식을 사용한다.

즉, 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화될 수 있다. 반대로 균형을 맞추기 위한 시간이 필요하다는 상대적 단점이 있다. 

 

LightGBM의 리프 중심 트리 분할 방식은 트리의 균형을 맞추지 않고, 최대 손실 값(max delta loss)을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성된다. 하지만 이렇게 최대 손실값을 가지는 리프 노드를 지속적으로 분할해 생성된 규칙 트리는 학습을 반복할수록 결국은 균형 트리 분할 방식보다 예측 오류 손실을 최소화 할 수 있다는 것이 LightGBM의 구현 사상이다.

 

 

LightGBM 하이퍼 파라미터


LightGBM의 하이퍼파라미터의 경우 XGBoost와 달리 리프 노드가 계속 분할되면서 트리의 깊이가 깊어지므로 이러한 트리 특성에 맞는 하이퍼 파라미터 설정이 필요하다. 예를들면 max_depth를 매우 크게 가지는 것이 있다.

 

- learning_rate를 작게하면서 n_estimators를 크게 하는 것은 부스팅 계열 튜닝에서 가장 기본적인 튜닝 방안

- n_estimators를 너무 크게 하는 것은 과적합으로 오히려 성능 저하가 될 수 있음

- 과적합을 제어하기 위해 reg_lambda, reg_alpha와 같은 regularization을 적용하거나 학습 데이터에 사용할 피처의 개수나 데이터 샘플링 레코드 개수를 줄이기 위해 colsample_bytree, subsample 파라미터를 적용할 수 있음

 

※ 주의 : LightGBM이 버전업 되면서 boost_from_average 파라미터의 디폴트 값이 False에서 True로 변경됨. 레이블 값이 극도로 불균형한 분포를 이루는 경우 boost_from_average=True 설정은 재현률 및 ROC-AUC 성능을 매우 크게 저하시킨다. LightGBM 2.1.0 이상의 버전이 설치되어 있거나 불균형한 데이터 셋에서 예측 성능이 매우 저조할 경우 LightGBMClassifer 객체 생성 시 boost_from_average=False로 파라미터 설정해야함.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

XGBoost란


XGBoost(eXtra Gradient Boost)는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나이다. 캐글 경연 대회에서 상위를 차지한 많은 데이터 사이언티스트가 XGBoost를 이용하면서 널리 알려졌다. 압도적 수치의 차이는 아니지만, 분류에 있어 일반적으로 다른 머신러닝보다 뛰어난 예측 성능을 나타낸다.

 

XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제(Regularization) 부재 등의 문제를 해결해서 매우 각광을 받고 있다. 특히 XGBoost는 병렬 CPU 환경에서 병렬 학습이 가능해 기존 GBM보다 빠르게 학습을 완료할 수 있다.

 

XGBoost 장점


  • 일반적으로 분류와 회귀 영역에서 뛰어난 예측 성능을 발휘

 

  • 일반적인 GBM은 순차적으로 Weak learner가 가중치를 증감하는 방법으로 학습키 때문에 전반적으로 속도가 느림. 하지만 XGBoost는 병렬 수행 및 다양한 기능으로 GBM에 비해 빠른 수행성능 보장

 

  • 표준 GBM의 경우 과적합 규제 기능이 없으나 XGBoost는 자체 과적합 규제 기능으로 과적합에 좀 더 강한 내구성을 가질 수 있음

 

  • 다른 GBM과 마찬가지로 max_depth 파라미터로 분할 깊이를 조정하기도 하지만, tree pruning으로 더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄이는 추가적인 장점이 있음

 

  • 반복 수행 시마다 내부적으로 학습 데이터 셋과 평가 데이터셋에 대한 교차 검증을 수행해 최적화된 반복 수행 횟수를 가질 수 있고, 최적화 되면 반복을 중간에 멈출 수 있는 조기 중단 기능이 있음.

 

XGboost는 자체적으로 교차 검증, 성능 평가, 피처 중요도 등의 시각화 기능을 가지고 있음

 

DMatrix


파이썬 래퍼 XGBoost는 사이킷런과 차이가 여러 가지 있지만, 먼저 눈에 띄는 차이는 학습용과 테스트용 데이터 셋을 위해 별도의 객체인 DMatrix를 생성한다는 점이다. DMatrix는 주로 넘파이 입력 파라미터를 받아서 만들어지는 XGBoost만의 전용 데이터셋이다. DMatrix의 주요 입력 파라미터는 data와 label이다. 

data는 피처 데이터 셋이며, label은 분류의 경우에는 레이블 데이터 셋, 회귀의 경우는 숫자형인 종속값 데이터 셋이다.

 

xgboost 모듈을 사용해 학습을 수행하기 전에 하이퍼 파라미터를 설정하며 하이퍼 파라미터의 경우 주로 딕셔너리 형태로 입력한다. 또한 xgboost 모듈의 경우 train() 함수에 파라미터로 전달하며 사이킷런에서는 Estimator의 생성자를 하이퍼 파라미터로 전달하는 데 반해 차이가 있다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

부스팅 알고리즘


부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식이다.

 

 

구현 알고리즘


부스팅의 대표적인 구현은 AdaBoost(Adaptive boosting)와  GBM(Gradient Boost Machine)이 있다.

 

  • AdaBoost
    • 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘

학습 진행 방법은 다음과 같다.

만약 +, -로 피처 데이터셋이 존재하고 Iteration 1과 같이 +를 탐지하려 하였으나 탐지를 하지 못하게되면 Iteration 2와 같이 +의 크기를 키워(가중치를 키워) 다음 약한 학습기가 더 잘 분류할 수 있도록 진행한다.

 

에이다 부스트는 위와 같이 약한 학습기가 순차적으로 오류 값에 대해 가중치를 부여한 예측 결정 기준을 모두 결합해 예측을 수행한다.

 

그 결과 위 그림의 Final Classifier/Strong classifier와 같이 이전의 학습기를 모두 결합한 예측을을 하여 정확도가 높아지는 것을 알 수 있다.

 

 

  • GBM (Gradient Boosting Machine)
    • 에이다부스트와 유사한, 가중치 업데이트를 경사 하강법을 이용하는 것이 큰 차이다.

오류 값은 "실제 값 - 예측 값"이다. 분류의 실제 결과값을 $y$, 피처를  $x_1, x_2,\dots, x_n$, 그리고 이 피처에 기반한 예측 함수를 $F(x)$ 함수라고 하면 오류식 $h(x) = y - F(x)$가 된다.

 

해당 오류식 $h(x) = y - F(x)$를 최소화 하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 것이 경사 하강법이다. 경사 하강법은 머신러닝에서 중요한 기법 중 하나이며, "반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법"으로 이해하면 좋다. 또한 경사 하강법의 경우 회귀를 다룰 때 구체적인 개념을 더 필요로 한다.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://www.youtube.com/watch?v=BoGNyWW9-mE

 

랜덤 포레스트


배깅(bagging)은 앞에서 보팅과는 다르게, 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘이다. 배깅의 대표적인 알고리즘이 랜덤 포레스트이며 이는 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지고 있고, 다양한 영역에서 높은 예측 성능을 보인다.

 

랜덤 포레스트의 기반 알고리즘은 결정 트리로서, 결정 트리의 쉽고 직관적인 장점을 그대로 가지고 있다.

또한 랜덤 포레스트뿐만 아니라 부스팅 기반의 다양한 앙상블 알고리즘 역시 대부분의 결정 트리 알고리즘을 기반 알고리즘으로 채택하고 있다.

 

랜덤 포레스트는 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측을 결정하게 된다.

 

 

랜덤 포레스트는 개별적인 분류기의 기반 알고리즘은 결정 트리지만 개별 트리가 학습하는 데이터 셋은 전체 데이터에서 일부가 중첩되게 샘플링된 데이터 셋이다.

 

여러 개의 데이터 셋을 중첩되게 분리하는 것을 부트스트래핑(bootstrapping) 분할 방식이라 한다. 그래서 배깅(Bagging)이 bootstrap aggregating의 줄임말이다. 원래 부트스트랩은 통계학에서 여러 개의 작은 데이터 셋을 임의로 만들어 개별 평균 분포도를 측정하는 등의 목적을 위한 샘플링 방식을 지칭한다.

 

랜덤 포레스트의 서브셋(Subset) 데이터는 이러한 부트스트래핑으로 데이터가 임의로 만들어진다. 서브셋 데이터 건수는 전체 데이터 건수와 동일하지만, 개별 데이터가 중첩되어 만들어진다. 원본 데이터의 건수가 10개인 학습 데이터 셋에 랜덤 포레스트를 3개의 결정 트리 기반으로 학습하려고 n_estimators = 3으로 하이퍼 파라미터를 부여하면 다음과 같이 데이터 서브 셋이 만들어진다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://yeo0.github.io/data/2018/11/06/6.-랜덤-포레스트/

 

앙상블 학습


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

 

어려운 문제의 결론을 내기 위해 여러 명의 전문가로 위원회를 구성해 다양한 의견을 수렴하고 결정하듯, 앙상블 학습의 목표는 다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것

 

즉, 집단지성을 이용.

 

 

앙상블 알고리즘


앙상블 알고리즘의 대표격인 랜덤포레스트와 그래디언트 부스팅 알고리즘의 경우 뛰어난 성능과 쉬운 사용, 다양한 활용도로 인해 많이 사용되어 옴

 

부스팅 계열의 앙상블 알고리즘의 인기와 강세가 계속 이어져 기존의 그래디언트 부스팅을 뛰어넘는 새로운 알고리즘이 개발 가속화가 됐으며, 이로 인해 캐글에서는 XGBoost 그리고 XGBoost와 유사한 예측 성능을 가지면서 훨씬 빠른 수행 속도를 가진 LightGBM, 여러가지 모델의 결과를 기반으로 메타 모델을 수립하는 스태킹(Stacking)을 포함해 다양한 유형의 앙상블 알고리즘이 머신러닝의 선도 알고리즘으로 인기를 모으고 있음

 

XGboost, LightGBM과 같은 최신 앙상블 모델 한두 개만 잘 알고 있어도 정형 데이터의 분류나 회귀 분야에서 예측 성느이 매우 뛰어난 모델을 쉽게 만들 수 있음.

 

 

앙상블 학습 유형


  • 보팅(Voting)

 

  • 배깅(Bagging)
    • Bootstrap Aggregating의 줄임말이다.
    • 원래 데이터에 대해서 여러개의 작은 데이터셋 N개를 샘플링해서 만든다음, 각각의 데이터를 작은 모델 N개로 학습을 시킨다.
    • 이후 다음 학습된 N개의 모델을 모두 하나로 합쳐서 최종적인 모델로 사용하는(bag에 담는 느낌) 방법론을 의미한다. (병렬적으로 데이터를 나누어 여러 개의 모델을 동시에 학습시킴)

 

  • 부스팅(Boosting)

 

보팅과 배깅의 경우 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식

 

보팅과 배깅의 차이점은 보팅의 경우 일반적으로 서로 다른 알고리즘을 가진 분류기를 결합하는 것이고, 배깅의 경우 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행하는 것. 대표적인 배깅방식이 바로 랜덤 포레스트 알고리즘임

 

아래는 보팅 분류기를 도식화한 것임

 

Voting 방식

 

아래 그림 수정 필요 잘못 삽입.

Bagging 방식

 

 

보팅 유형


  • 하드 보팅 (Hard Voting)
    •  다수결의 원칙과 비슷하며, 예측 결과값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정

 

  • 소프트 보팅 (Soft Voting)
    • 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정. 일반적으로 소프트 보팅 방법으로 적용됨

 

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://newsight.tistory.com/247

 

+ Recent posts