TensorFlow

TensorFlow 에서 회귀(regression)의 문제 모델링하기

Cong_S 2022. 6. 10. 18:06
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense

위 코드는 TensorFlow 에서 모델링할 때 필요한 라이브러리들이다.

 

데이터 전처리 (Data Preprocessing) 과정이 끝난 데이터는

이제 학습을 위해 모델링을 해주어야한다.

 

ANN(Artificial Neural Network, 인공신경망) 에서의 모델링이란?

input layer, hidden layer, output layer 등 각각의 노드들이 이루고 있는 계층들의 구조를 말한다.

이를 Sequential 이라 한다. 

 

당연하게도

분류(classifier)에서의 모델링과

회귀(regression)에서의 모델링과는 약간의 차이가 있으므로 그 차이점에 대해 알아보자.

 

이번 포스팅엔 회귀(regression)에서의 모델링을 알아보자.

 

 


def build_model():
  model = Sequential()
  model.add(Dense(units=5, activation='relu', input_shape= (5, )))
  model.add(Dense(units=25, activation='relu'))
  model.add(Dense(units=10, activation='relu'))
  # 결과로 숫자가 나오면 되니 regression에서는 'linear'로 한다.
  model.add(Dense(units=1, activation='linear'))
  model.compile(optimizer='adam', loss= 'mse')
  return model

모델링(신경망 구성) 하는 것을 하나의 함수로 만들어준 것이다.

 

순서는 다음과 같다.

 

1. 맨 처음 신경망의 큰 틀인 Sequential 을 만들어준다.

2. 첫 hidden layer를 만든다. 

units 는 노드(신경망의 뉴런)의 개수이며,

Activation 은 노드에서 값이 출력될 때 연산하는 activation Function을 뜻한다.

제일 먼저 만드는 layer 에는 input_shape라는 파라미터 값을 통해 입력받는 데이터의 개수를 설정해준다.

데이터의 개수는 X_train 등 학습용 데이터의 컬럼 개수를 보면 알 수 있다.

 

3. 중간 hidden layer들을 만든다. 

이는 유저의 개인 재량으로 결정하며 인공지능의 상황에 따라 변경하게 될수도 있다.

 

4. 회귀의 문제에서 아주 중요한 부분이다.

activation Function으로 linear 를 사용한다.

 

5. 다음으로 compile 과정을 거쳐야 한다. 

오차를 줄이는 방법은 'adam' 등 다른 것을 사용해도 되지만

0과 1로 결과가 나오는 문제에서

오차를 계산할 때에는 loss 파라미터에  'mse'  ( mean squared error) 를 입력해준다.

 

 

위 코드들을 실행했을 때 나오는 Sequential 의 구조이다.

 

이제 이 신경망을 가지고

model.fit(X_train, y_train, epochs = 20, batch_size= 10)

fit 함수로 학습을 진행하면 된다.

 

선형 회귀 문제 특성상 정확도를 직접 받아보기는 힘든데.

그 땐 차트를 그려보거나 MSE를 구해서 정확도를 파악할 수 있다.

history의 loss 컬럼을 통해 오차가 적어지는 것도 확인할 수 있다.