딥러닝 수치 예측 모델
참 거짓을 판별하는 모델에서 한발
더 나아가서 수치를 예측하는 모델이
필요하다.
현실에서 수치를 예측하는 것이 더
필요한 경우가 많다. 구체적인 수치를
예측하기 위해서 우리한테 필요한
알고리즘은 선현회귀 분석이다.
선형회귀분석이란?
복잡하게 생각할 필요 없다. 독립변수
x와 기울기 a 그리고 절편 b를 더한
종속변수 y를 구하는 1차 방정식이
선형회귀분석이다.
우리가 딥러닝에서 조정해야 하는건,
이 기울이 a와 절편 b의 값이다. 학습
데이터를 가지고 두개의 변수를 계속
조정하면서 오차를 줄여나가는 과정,
이게 딥러닝의 핵심이다.
딥러닝 예제 중 가장 유명한 보스턴 집값
예측 모형을 가지고 실제 모델을
설계해보자.
데이터를 로드해서, 데이터셋을 구분하고,
학습데이터와 테스트데이터를 구분하는
작업은 아래 글에서 참고하길 바란다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
import numpy
import pandas as pd
import tensorflow as tf
# seed값 설정
seed=0
numpy.random.seed(seed)
tf.compat.v1.set_random_seed(seed)
# 파일 읽어들이기
df = pd.read_csv('./dataset/housing.csv', delim_whitespace=True, header=None)
dataset = df.values
X = dataset[:, 0:13]
Y = dataset[:, 13]
# 학습 + 테스트 분리
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=seed)
|
cs |
선형회귀 분석에서 모델링은 다음과 같이 한다.
먼저 모델층을 생성한다. Sequential()함수 사용
은닉층에 노드수와 입력값, 그리고 활성화 함수를
사용한다.
활성화 함수는 가장 유명한 ReLU 함수를 사용한다.
출력층에는 추가적으로 활성화 함수를 지정하지
않는다.
참 거짓을 판단하거나 다항분류를 하는 모델에서는
sigmoid()함수를 사용하거나, softmax() 함수를
사용하지만 선형회귀에서는 수치를 예측하는 모델
이기 때문에 이런 활성화 함수를 필요로 하지 않는다.
1
2
3
4
5
|
# 모델링 작업
model = Sequential()
model.add(Dense(30, input_dim=13, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(1))
|
cs |
모델 컴파일에는 평균 제곱 오차함수와
adam 을 최적화 함수로 사용한다.
adam 함수를 사용해서 기울기 a(딥러닝
에서는 가중치라 표현한다.)와 절편 b(
딥러닝에서는 bias[편차]라 표현한다.)
를 추정하면서 실제값에 가까운 예측 모델을
만든다.
1
|
model.compile(loss='mean_squared_error', optimizer='adam')
|
cs |
이제 모델학습을 진행한다.
아래 예제에서는 에포크를 1000번 반복하고,
10개의 샘플데이터를 넣으면서 학습을
진행한다.
1
2
|
# 모델 학습 진행
model.fit(X_train, Y_train, epochs=1000, batch_size=10)
|
cs |
모델로 예측값 구하기
keras에서는 predict() 함수를 지원한다.
독립변수를 가지고 실제값을 예측을 지원
하는 함수다.
flatten()함수는 N차원의 배열을 1차원
배열로 변형해주는 함수다. 아래 예제에서
Y_prediction 변수를 출력해보면 1차원
배열을 얻는다.
이제 for loop를 돌면서 실제값과 예측값을
출력한다.
1
2
3
4
5
6
7
8
|
# 예측값과 실제값 비교
# flatten()은 배열의 다중 디멘션을 1차원으로 변경해준다.
Y_prediction = model.predict(X_test).flatten()
for i in range(10):
label = Y_test[i]
prediction = Y_prediction[i]
print("실제가격 : {:.3f}, 예상가격 : {:.3f}".format(label, prediction))
|
cs |
더 읽을거리
'Programming > MachineLearning' 카테고리의 다른 글
딥러닝 순환 신경망 RNN 10분 만에 이해하기 (0) | 2021.12.17 |
---|---|
딥러닝 CNN 컨볼루션 신경망 10분만에 이해하기 (1) | 2021.12.16 |
딥러닝 손글씨 예측 모델 만들어보기 (feat 데이터정규화) (0) | 2021.12.16 |
딥러닝 최적의 모델결과 뽑아내기 (feat 와인 데이터) (0) | 2021.12.16 |
딥러닝 데이터가 부족할 때 해결하는 방법 K겹 교차 검증이란? (feat 광석 돌 구분 예제 사용) (0) | 2021.12.16 |
딥러닝 과적합 문제 해결하기(feat 광석 판별하기) (0) | 2021.12.16 |
댓글