Generalized Additive Models(GAM)

2021. 8. 15. 23:56머신러닝

반응형

앞서 우리는 하나의 Feature를 다항식, Basis function으로 나타냄으로써 비선형적으로 다루는 방법에 대해 다루었습니다.(https://direction-f.tistory.com/85, https://direction-f.tistory.com/86, https://direction-f.tistory.com/87)

GAM은 이를 좀 더 확장하여 변수가 여러개 일 때 변수들간의 가법성(Additive)를 유지하면서 비선형을 부여할 때 활용할 수 있는 방법입니다. 따라서 GAM은 아래와 같이 표현될 수 있습니다.

이 때 $f_j$는 Feature $X_j$에 대해서 비선형성을 가진 함수를 나타냅니다.

GAM은 logit이나 probit과 같은 GLM에 대해서도 적용될 수 있으며, link function $g$를 이용하면 아래와 같이 일반화 된 형태로 표현 할 수 있습니다.

 

최종적으로 아래와 같이 일반적으로 오차가 최소화 되도록 Fitting을 수행하게 되는데, Link형태에 따라서 Backfitting이나 Newton-Raphson과 같은 최적화 알고리즘을 적용하게 됩니다. 두번째 Term은 구불거리는 정도에 대한 Regularization term입니다.

GAM의 장점으로는 다른 머신러닝 모형에 비해서 상대적으로 해석이 쉽고, 다양한 Pattern을 고려해볼 수 있습니다. 또한 Regularization을 쉽게 부여할 수 있습니다. 하지만 기본적으로 비선형성을 부여하는 함수 형태에 대해 정확한 사전지식을 가지기 어렵다는 단점이 있습니다.

Python에서는 Pygam Package를 활용하여 GAM을 Fitting 할 수 있습니다.(https://pygam.readthedocs.io/en/latest/notebooks/tour_of_pygam.html)

from pygam import LinearGAM, s,f
from pygam.datasets import wage
import matplotlib.pyplot as plt
import numpy as np

##Sample Data
X,y = wage(return_X_y = True)

## Fitting 

gam = LinearGAM(s(0) + s(1, n_splines = 5) + f(2))
gam.gridsearch(X, y)
gam.summary()
gam.lam

## Prediction
gam.predict(X)
gam.prediction_intervals(X, width=.95)

##Parameter Grid Search

lam = np.logspace(-3, 5, 5)
lams = [lam] * 3

gam.gridsearch(X,y, lam=lams) ## 구불거리는 정도
gam.lam


## Partial Dependence Plot

fig, axs = plt.subplots(1,3);

titles = ['year', 'age', 'education']
for i, ax in enumerate(axs):    
    XX = gam.generate_X_grid(term=i)
    ax.plot(XX[:, i], gam.partial_dependence(term=i, X=XX))
    ax.plot(XX[:, i], gam.partial_dependence(term=i, X=XX, width=.95)[1], c='r', ls='--')
    if i == 0:
        ax.set_ylim(-30,30)
    ax.set_title(titles[i]);

age의 # of Spline = 5 일때
age의 # of Spline = 20 일때

그림을 보면 Spline 수에 따라서 적합한 모습이 달라짐을 확인할 수 있습니다. Regularization term을 조정해도 그래프의 형태가 달라짐을 알 수 있습니다. 위의 Partial Dependence Plot의 Y-axis는 각 변수가 종속변수에 미치는 영향정도를 나타냅니다.( 확인하고자 하는 종속변수에 대해서 다른변수들을 marginalizing을 하는 것)  이를 바탕으로 각 변수와 종속변수간의 관계성을 분석해볼 수 있습니다.

반응형

'머신러닝' 카테고리의 다른 글

Decision Tree Model  (0) 2021.10.15
Tree-Based Model  (0) 2021.10.06
모델 평가 및 선정 > Bootstrap Method  (0) 2021.06.28
모델 평가 및 선정 > Cross-Validation  (0) 2021.06.10
모델 평가 및 선정 > In-Sample Prediction(2/2)  (0) 2021.05.30