정말 많이 배우고 구현해도 항상 새로운 딥러닝.... 갈길이 멀다 ,,,,
기본 모듈 임포트
import keras
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
%matplotlib inline
선형 데이터로 식은 y= mx+b+noise이고 임의의 값을 설정한다.
m=2
b=3
x=np.linspace(0,50,100)
np.linspace(구간시작점, 구간끝점, 구간내 숫자갯수)
x를 찍으면 요렇게 나온다.
array([ 0. , 0.50505051, 1.01010101, 1.51515152, 2.02020202,
2.52525253, 3.03030303, 3.53535354, 4.04040404, 4.54545455,
5.05050505, 5.55555556, 6.06060606, 6.56565657, 7.07070707,
7.57575758, 8.08080808, 8.58585859, 9.09090909, 9.5959596 ,
10.1010101 , 10.60606061, 11.11111111, 11.61616162, 12.12121212,
12.62626263, 13.13131313, 13.63636364, 14.14141414, 14.64646465,
15.15151515, 15.65656566, 16.16161616, 16.66666667, 17.17171717,
17.67676768, 18.18181818, 18.68686869, 19.19191919, 19.6969697 ,
20.2020202 , 20.70707071, 21.21212121, 21.71717172, 22.22222222,
22.72727273, 23.23232323, 23.73737374, 24.24242424, 24.74747475,
25.25252525, 25.75757576, 26.26262626, 26.76767677, 27.27272727,
27.77777778, 28.28282828, 28.78787879, 29.29292929, 29.7979798 ,
30.3030303 , 30.80808081, 31.31313131, 31.81818182, 32.32323232,
32.82828283, 33.33333333, 33.83838384, 34.34343434, 34.84848485,
35.35353535, 35.85858586, 36.36363636, 36.86868687, 37.37373737,
37.87878788, 38.38383838, 38.88888889, 39.39393939, 39.8989899 ,
40.4040404 , 40.90909091, 41.41414141, 41.91919192, 42.42424242,
42.92929293, 43.43434343, 43.93939394, 44.44444444, 44.94949495,
45.45454545, 45.95959596, 46.46464646, 46.96969697, 47.47474747,
47.97979798, 48.48484848, 48.98989899, 49.49494949, 50. ])
임의의 랜덤값 noise를 만들기 위해 랜덤 씨드를 준다. 0에서 시작하며, 평균은4이고, noise 난수의 길이 100을 받는다.
np.random.seed(101)
noise = np.random.normal(loc=0,scale=4,size=len(x))
앞서 세운 식을 주고,, 이그래프에 대한 최적의 선을 찾기 위한 시각화를 해준다.
y = 2*x+b + noise
plt.plot(x,y,'*')
keras의 sequential 모델은 시퀀스에 다수의 층을 추가할 수 있도록 해주면,
Dense는 이전층의 뉴런이 다음층의 뉴런과 연결해준다.
from keras.models import Sequential
from keras.layers import Dense
sequential 모델에 dense layer를 추가해서 매개변수를 가지게 한다.
4개의 뉴런, 1개의 인풋, 활성화 함수는 relu로 설정한다.
최종층은 1개의 뉴런, linear 활성화 함수로 최종출력을 선형값을 나오게 한다.
회귀모형이 mse로 스코어를 측정할 수 있도록 컴파일을 한다.
model = Sequential()
model.add(Dense(4,input_dim=1,activation='relu'))
model.add(Dense(4,activation='relu'))
model.add(Dense(1,activation='linear'))
model.compile(loss='mse',optimizer='adam')
만들어진 모델 summary에는 dense layer를 추가하면서 발생하는 파라미터의 수가 나온다.
model.summary()
이제 학습을 해준다. epoch은 모든 학습 데이터를 통과하는 단위 이고, 한번에 통과하는 대신 학습 데이터가 여러개의 batch로 나누어 과부하가 걸리지 않게 작은 batch로 전달한다.
batch에 모든 학습 데이터가 통과했으면 한 개의 epoch이 채워진다.
에폭수를 바꿔가며 학습을 시켜준다. 학습을 하면서 수렴하는 수가 생기면 여기서 학습을 멈춰준다.
model.fit(x,y,epochs=1000)
모델에 대한 loss값을 출력해준다.
model.history.history['loss']
loss = model.history.history['loss'] #딕셔너리
epochs = range(len(loss))
plt.plot(epochs,loss)
학습을 마쳤으면 예측을 해준다.
x_for_predictions = np.linspace(0,50,100)
y_pred = model.predict(x_for_predictions) #예측
학습과 예측 데이터를 시각화하여 모델이 잘 나왔는지 본다.
plt.plot(x,y,"*")
plt.plot(x_for_predictions,y_pred,'r') #예측 value
마지막으로 mse 스코어를 확인한다.
from sklearn.metrics import mean_squared_error
mean_squared_error(y,y_pred)
테스트셋 스코어가 더 안좋게 나올것이다. 안좋아도 괜찮지만 너무 안좋으면 과적합의 위험이 있으니 주의할것
강의 출처: Udemy x KMOOC Python, Pandas, Numpy, Statsmodels를 사용해 시계열 데이터를 예측하고 분석하는 방법에 대해 배워보세요!
'Deep Learning' 카테고리의 다른 글
Keras와 RNN로 하는 주류 판매량 시계열 예측 (0) | 2023.07.04 |
---|---|
퍼셉트론, 활성화 함수 (0) | 2023.07.01 |