본문 바로가기

Deep Learning & AI/AI

(딥러닝_온라인)쉽게 배우는 역전파 학습법 _ 역전파 학습법 코드

참고) 해당 포스팅은 패스트 캠퍼스 100% 환급 챌린지 미션 기록용 포스팅이며, 강좌 내용에 맞추어 포스팅함을 언급

 

클립명 : PART4)딥러닝의 3 STEP의 기초

           쉽게 배우는 역전파 학습법 (STEP 2) - 역전파 학습법을 이용한 심층 신경망 학급 - 1

          쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 1

          쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 2

본 포스팅은 역전파 학습법 코드를 마저 살펴보기 전에, Ridge와 LASSO의 차이점에 대해서 포스팅을 한다. 알아두면 좋을 것 같도, Cost Function에 대새허 공부하다 살펴본 내용이기에 포스팅으로 다룬다

 

이번 포스팅에서는 Ridge Regression이 아닌 LASSO(Least absolute shrinkage and selection operator) Regression을 살표보고 파라미터 선택방법에 대해서 어떻게 하는지 파이썬을 활용하여 살펴보겠다

 

LASSO Regression의 경우 Cost Function이 L1 Regularization으로 Penerlty가 절대값으로 되어있는 것을 알 수 있다. 절대값함수는 제곱의 함수와는 다르게 0을 선택값으로 가질 수 있기 때문에(4 - Penalty 포스팅 참조) Cost의 최소화를 위해서라면 Wj(독립변수의 계수)가 0이 될 수 있다는것을 참고하기 바란다.

 

단순히 Ridge Regression의 경우 Cost Function의 최소화를 위해서라면 매우 작은 값을 Wj에 설정했지만, LASSO의 경우 0으로 만들 수 있기에 독립변수를 선택하는 과정에서 많이 사용되는 방법이라고 할 수 있다.

 

왼쪽 그림은 LASSO의 Cost Function이고 오른쪽 그림은 Ridge의 Cost Function을 나타냄

위 그림을 살펴보면 빨강색 선이 패널티가 제외된 Cost가 일정한 부분을 나타내며 초록색 부분은 '람다'를 반영한 패널티가 포홤되 RSS를 나타낸다. 위의 그림을 보면 알 수 있듯이 LASSO의 경우 최적값이 모서리에 나타날 확률이 Ridge에 비해 높기 때문에 몇몇 유의미하지 않는 변수들에 대해 계수를 0에 가깞게 추정해주어 종속변수를 설명하는데 있어 독립변수를 효과적으로 선택하는 기능을 제공한다.

 

이제 파이썬을 통해 LASSO REgression 구현 및 람다를 설정하는 방법을 살펴보자. 참고러 람다를 구하는 방법은 Cross Validation이며 Ridge Regression 포스팅에서 보여줬던 방식과 유사하다. 그리고 Cross Validation은 다음번 포스팅에서 제대로 살펴보겠다

 


import numpy as np
from sklearn.datasets import make_regression

reg_data, reg_target = make_regression(n_samples=200, n_features=500, n_informative=5, noise=5) #임의의 데이터를 만든다

from sklearn.linear_model import Lasso

lasso=Lasso() # LASSO 모형 설정
lasso.fit(reg_data, reg_target)
#%%
np.sum(lasso.coef_ !=0)

'''
np.sum의 결과값은 '11'이다. 즉, 실제 500개의 독립변수 중에서 계수가 0인 갯수가 아닌것이 11개임을
의미한다
'''

#%%

lasso_0 = Lasso(0) #여기서 LASSO 함수에 input값을 0으로 하면, 람다가 0이 된다
lasso_0.fit(reg_data, reg_target)
np.sum(lasso_0.coef_ !=0 )
'''
LASSO 함수에 람다를 0으로 설정했으니 당연히 np.sum의 결과값은 위에와는 다르게 500으로 나타난다
'''

#%%

from sklearn.linear_model import LassoCV
lassocv = LassoCV() #Cross Validation을 통해서 lambda값을 설정한다
lassocv.fit(reg_data, reg_target)
#%%

lassocv.alpha_ #Cross Validation을 통해 추출한 lambda값
#%%
lassocv.coef_[:5]
np.sum(lassocv.coef_ !=0)
'''
실제 위에서 추출된 람다값은 0.64정도이며 이에 따라 독립변수의 계수가 0이 될 확률은
더욱 높아졌다. 위의 np.sum의 값은 34개이며, 이는 독립변수의 계수가 0인 아닌것은 것은 총 34개라는
의미
'''

#%%

mask = lassocv.coef_ != 0
new_reg_data = reg_data[:, mask]
new_reg_data.shape

(글자수 : 2000자 이상)

강의 소개 링크 : bit.ly/3cx6kMd

 

딥러닝/인공지능 올인원 패키지 Online. | 패스트캠퍼스

Tensorflow2.0부터 Pytorch까지 딥러닝 대표 프레임워크를 정복하기. 생활 깊숙이 침투한 인공지능, 그 중심엔 딥러닝이 있습니다. 가장 강력한 머신러닝의 툴로서 주목받는 딥러닝은 생각보다 어려

fastcampus.co.kr