colab.research.google.com/drive/1925aJnKBtplTrvAv0TfYbdjumcEnAPON?usp=sharing
์ฝ๋ฉ์ผ๋ก ์์ฑํ ์๋ฌธ์ ๋๋ค.
# ๊ฐ๋ฐ ์์
์ด์ ๋ฉฐ์น ๊ฐ์ ํ์ง์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ค์ ๋ ์ ํ์ง์ ์๋ฅผ ์์ธกํ๋ ๋ฐฉ๋ฒ.
3์ผ ๋์์ ํ์ง์ ์ ๋ณด๊ณ , ๊ทธ ๋ค์๋ ํ์ง์ ์๊ฐ ์ด๋ป๊ฒ ๋ ์ง ํ์ตํจ.
ex) 1, 2, 3 ์ผ ์ฐจ ํ์ง์ -> 4์ผ์ฐจ ํ์ง์ ์์ธก.
์ฐ์๋ ๋ฐ์ดํฐ์ ํํ์์ ๊ทธ ํจํด์ ์ฐพ์๋. ์ํ ์ ๊ฒฝ๋ง ๋ฐฉ์ (RNN).
(RNN = Recurrent Neural Network, ์ํ์ ๊ตฌ์กฐ, ์ ์ถ๋ ฅ์ ์ํ์ค ๋จ์๋ก ์ฒ๋ฆฌ.)
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
import math
import numpy
import matplotlib.pyplot as plt
from pandas import read_csv
from keras.models import Sequential
์ผ๋ผ์ค ๋ชจ๋ธ ๋๊ตฌ ์ค์์ ์ํ์ ๋ชจ๋ธ์ ๊ฐ์ ธ์ด.
from keras.layers import SimpleRNN, Dense
๋ ์ด์ด ๋๊ตฌ ์ค์ ์ฌํRNN๊ณผ Dense ๋๊ตฌ๋ฅผ ๊ฐ์ ธ์ด.
- ์ํ ์ ๊ฒฝ๋ง ๊ธฐ๋ฒ์๋ LSTM, GRU ๊ฐ์ ๋ค์ํ ๊ธฐ๋ฒ์ด ์๋๋ฐ, SimpleRNN์ด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ํ ์ ๊ฒฝ๋ง์ ๋ชจ์ต์.
- Dense๋ ๊ฐ ๋ ์ด์ด์์์ ๋ด๋ฐ์ ์. ๊ฐ ๋ ์ด์ด์ ๋ค์ด๊ฐ๋ ๋ด๋ฐ์ ์๋ฅผ ์ ํ ๋ ์ฌ์ฉ.
from sklearn.preprocessing import MinMaxScaler
๋ฐ์ดํฐ ์ ๊ทํ๋ฅผ ์ํ MinMaxScaler ํจ์๋ฅผ ๋ถ๋ฌ์ด.
sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฒ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฑฐ์.
๋ฐ์ดํฐ๋ฅผ ์ธ๊ณต์ง๋ฅ์์ ์ฌ์ฉํ๊ธฐ ์ ์, ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ์ ํฉํ๊ฒ ๋ง๋๋ ํจ์์.
from sklearn.metrics import mean_squared_error
mean_squared_error๋ ๊ฒฐ๊ณผ์ ์ ํ๋๋ฅผ ๊ณ์ฐํ๋ ํจ์์.
์ด ์ธ๊ณต์ง๋ฅ์ ์ฐ์๋ ๊ฐ์ ์์ธกํ๋ ํ๊ท ๋ฌธ์ ์.
mean_squared_error๋ ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ์ ์ฐจ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๊ตฌํจ.
from sklearn.model_selection import train_test_split
๋ฐ์ดํฐ๋ฅผ ํ๋ จ๋ฐ์ดํฐ์ ๊ฒ์ฆ๋ฐ์ดํฐ๋ก ๋๋๋ ํจ์์.
์ ๋๋๋? ์ธ๊ณต์ง๋ฅ์ ์ฑ๋ฅ์ ์ธก์ ํ ๋ ค๊ณ .
from pandas import read_csv
ํ๋ค์ค๋ ํ์ด์ฌ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌํ ๋ ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, csvํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์๋ ๋ช ๋ น์ด์.
# ๋ฐ์ดํฐ๊ฐ์ ธ์ค๊ธฐ
์ฌ๊ธฐ์ csv ํ์ผ์ ๊ฐ์ ธ์ฌ๊ฑฐ์. (์ธ๋ถ ๋ฐ์ดํฐ ์ฌ์ฉ)
https://github.com/yhlee1627/deeplearning.git ์ฌ๊ธฐ๊ฐ ์ฃผ์์.
!git clone https://github.com/yhlee1627/deeplearning.git
dataframe = read_csv('/content/deeplearning/corona_daily.csv', usecols = [3], engine = 'python', skipfooter = 3)
print(dataframe)
dataset = dataframe.values
dataset = dataset.astype('float32')
!git clone ์ผ๋ก ๊นํ๋ธ ์ ์ฅ์๋ฅผ ๊ฐ์ ธ์ด.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ์ฌ์ฉํ csv ํ์ผ์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์์ ์ฝ์.
4๋ฒ์งธ ์ด์ Confirmed(ํ์ง์) ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฑฐ๋ผ usecols ๋ [3]์ ํ์๊ณ ,
ํ์ด์ฌ์ ์ด์ฉํ ๊ฑฐ๋ ์์ง์ ํ์ด์ฌ์ผ๋ก.
skipfooter์ ๋ค์์ 3๊ฐ์ ํ์ ์๋ตํ๋ ๊ฒ์ด๋ค.
์ฝ์ด์จ ๋ฐ์ดํฐ์๋ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ช ์ด๋ ์์๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด์๋ค.
๋ฐ๋ผ์ ํ์ํ ๊ฐ๋ง ๊ฐ์ ธ์ค๊ธฐ ์ํด values๋ก ํ์ํ ๊ฐ๋ง ๊ฐ์ ธ์ด.
์ ๊ทํํ ๊ฑฐ๋ float๋ก ๋ฐ๊ฟ์ค.
# ๋ฐ์ดํฐ ์ ๊ทํ ๋ฐ ๋ถ๋ฅ
scaler = MinMaxScaler(feature_range=(0,1))
Dataset = scaler.fit_transform(dataset)
train_data, test_data = train_test_split(Dataset, test_size = 0.2, shuffle = False)
print(len(train_data), len(test_data))
์ฌ์ดํท๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ MinMaxScaler ํจ์๋ฅผ ์ฌ์ฉํด ์ ๊ทํ ๋ฐฉ๋ฒ์ ์ค์ ํจ.
๋ฐ์ดํฐ์ ์ ๊ทํ ๋ฒ์๋ฅผ 0 ~ 1 ๋ก ์ค์ ํจ.
scaler๋ฅผ ์ฌ์ฉํ๊ณ fit_transform ํจ์๋ฅผ ์ฌ์ฉํด ์ ๊ทํ๋ฅผ ์คํํจ.
์ธ๊ณต์ง๋ฅ์ ๋ง๋ค ๋ ์ธ๊ณต์ง๋ฅ์ ์ฑ๋ฅ์ ์ ํํ๊ฒ ์ธก์ ํ๊ธฐ ์ํด ํ๋ จ ๋ฐ์ดํฐ์ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ.
trans_test_split ํจ์๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋ จ๋ฐ์ดํฐ์ ๊ฒ์ฆ๋ฐ์ดํฐ๋ก ๋ถ๋ฅํ๋ ํจ์์
์ฒซ๋ฒ์งธ ์ธ์๋ ๋ถ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ,
๋๋ฒ์งธ ์ธ์๋ ๊ฒ์ฆ ๋ฐ์ดํฐ ๋น์จ์ ์ค์ ํ๋ ๊ฒ์ด๊ณ , (ํ๋ จ๋ฐ์ดํฐ 8 : ๊ฒ์ฆ๋ฐ์ดํฐ 2)
์ธ๋ฒ์งธ ์ธ์๋ ์ถ์ถ๋ฐฉ๋ฒ์. ์ ํ์ด True๋ฉด ๋ฌด์์ ์ถ์ถ์ด๊ณ , ์ ํ์ด False๋ฉด ์์ฐจ ์ถ์ถ์.
์ง๊ธ ๋ง๋ค๋ ค๋ ์ธ๊ณต์ง๋ฅ์ ์์๊ฐ ์ค์ํ ๋ ์ง๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฐจ ์ถ์ถ์ ํด์ผํจ
ํ๋ จ๋ฐ์ดํฐ์ ๊ฒ์ฆ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ์ถ๋ ฅํด๋ณด๋ 8 : 2 ๊ฐ ์ผ์ถ ๋ง์.
#๋ฐ์ดํฐ ํํ ๋ณ๊ฒฝ
1์ผ์ฐจ, 2์ผ์ฐจ, 3์ผ์ฐจ ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ฃ์ผ๋ฉด 4์ผ์ฐจ๋ฅผ ์์ธกํ์ฌ ๋ฐํํ๋ ์์ด๋ ์ด์ ๋ง๊ฒ ๋ฐ์ดํฐ์ ํํ๋ฅผ ๋ณ๊ฒฝํด์ผํจ.
ํ์ฌ๋ 1์ผ์ฐจ, 2์ผ์ฐจ, 3์ผ์ฐจ, 4์ผ์ฐจ, ..., n์ผ์ฐจ ๋ก ํ ์ค๋ก ๋์ด๋์ด์์
์ํ์ ๊ฒฝ๋ง์์๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์์ง ์ ํ๋๊ฒ ๋งค์ฐ ์ค์ํจ.
x_data y_data
123 | 4
234 | 5
345 | 6
...
์ด๋ฐ์์ ๋ฐ์ดํฐ์ ๋ ฅ์ ํด์ผํจ.
def create_dataset(dataset, look_back) :
x_data = []
y_data = []
for i in range(len(dataset) - look_back) :
data = dataset[i:(i+look_back), 0]
x_data.append(data)
y_data.append(dataset[i + look_back, 0])
return numpy.array(x_data), numpy.array(y_data)
๋ฐ์ดํฐํํ๋ฅผ ๋ฐ๊พธ๋ ํจ์๋ฅผ ๋ง๋ฌ.
์ฒซ๋ฒ์งธ ์ธ์๋ ์๋์ ๋ฐ์ดํฐ( ๋ฐ๊ฟ ๋ฐ์ดํฐ ) , ๋๋ฒ์งธ ์ธ์๋ ๋ฐ์ดํฐ์ ๊ฐ์.
for ๋ฌธ์ ๋ณด๋ฉด, ๋ง์ฝ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ 10๊ฐ๋ฉด 3์ผ๊ฐ ํด์ ๋ค์๋ ์์ธก์ด๋ ์ด 7๋ฒ์ ๋ฐ๋ณตํด์ผํจ. range(7).
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ์๋งํผ ๋ฐ๋ณตํจ.
data๋ ์ธ๊ฐ์ฉ ๋ฌถ๊ณ ๋ค์ ํ๋๋ ์์ธกํ ๋ฐ์ดํฐ ์ด๋, ์ฒซ๋ฒ์งธ ์ด๋ถํฐ ์ธ๋ฒ์งธ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํจ. [ 0:3 , 0 ] ํ์ ์๋ฐ๋๋ 0์ผ๋ก ๊ณ ์ .
์ฌ๊ธฐ์ array [ x : y ] ๋ x์์ y ์ด์ ์ ๊ฐ๊น์ง ์ธ๋ฑ์ค ๊ฐ์ ์ถ๋ ฅ ํ๋ ๊ฒ์ด๋ค.
3๊ฐ๋ฅผ ๋ฝ์ data ๋ณ์์ ๊ฐ์ x_data ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ณ ,
y_data ๋ฐฐ์ด์๋ ๊ทธ ๋ค์ ๊ฐ์ ๋ฃ์ด์ค.
x_data ์๋ 1์ผ์ฐจ, 2์ผ์ฐจ, 3์ผ์ฐจ.
y_data ์๋ 4์ผ์ฐจ.
์ด์ ๋ณํ๋ x_data ์ y_data ๋ฐฐ์ด์ ๋ํ์ด ๋ฐฐ์ด๋ก ๋ณ๊ฒฝ์ํด.
# ์ ๋ ฅ๋ฐ์ดํฐ ์์ฑ
์์์ ๋ง๋ ํจ์๋ฅผ ์ฌ์ฉํด ์ค์ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ฌ.
AI ์ ์์ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ๋ฆฌํ๋ ๊ฒ ๋ถํฐ ์์๋.
๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ๋ง๊ฒ ๋ง๋๋ ์์ ์ ์ค์์ํ๊ณ ๋ง์ ์๊ฐ์ ํด์ผํจ.
look_back = 3
x_train, y_train = create_dataset(train_data, look_back)
x_test, y_test = create_dataset(test_data, look_back)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
์ ๋ ฅ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ๋ง๋ ํํ๋ก ๋ณํํด์ผํ๋ค.
ํ์ฌ ๋ฐ์ดํฐ๋ 86 * 3 ์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด๋ก ๋์ด์๋๋ฐ,
์ด๋ฅผ ๊ฐ๊ฐ์ ์ค๋ก ๋๋ ์ 1 * 3์ ํํ๋ก ์ ๋ ฅ์ ํ๊ธฐ์ํด 3์ฐจ์ ๋ฐฐ์ด๋ก 86 * 1 * 3 ์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค.
X_Train = numpy.reshape(x_train, (x_train.shape[0], 1, x_train.shape[1]))
X_Test = numpy.reshape(x_test, (x_test.shape[0], 1, x_test.shape[1]))
print(X_Train.shape)
print(X_Test.shape)
# ๋ชจ๋ธ ์ ์
์ผ๋ฐ ์ํ์ ๋ชจ๋ธ์ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์๋์ธต์ ๊ฑฐ์ณ์ ์ถ๋ ฅ์ธต๊น์ง ์ ๋ฌ๋์ด ํน์ ํ ๊ฐ์ ์์ธก.
์ํ ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ฃ๋ ๊ฒ์ด ์๋, ์์๋๋ก ํ๋์ฉ ๋ฃ์.
์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์๋์ธต์ ์๋ ํ๋ผ๋ฏธํฐ( ๊ฐ์ค์น์ ํธํฅ)์ ๊ฐ์ ํ์ต์ํด.
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ก ๋์จ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ๋ก ๋ค์ ๋จ๊ณ์์ ์ฌ์ฉํ๋๋ก ๋๊น.
๊ทธ๋ฌ๋ฉด ์๋์ธต์ ์ด์ ์ ํ์ตํ ๊ฒฐ๊ณผ์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ํ์ต์ํค๊ณ ์ด๋ฐ์์ผ๋ก ์ญ ์ด์ด๋๊ฐ.
model = Sequential()
model.add(SimpleRNN(3, input_shape=(1,look_back)))
model.add(Dense(1, activation="linear"))
model.compile(loss = 'mse', optimizer = 'adam')
model.summary()
๋ชจ๋ธ์ ์ํ์ ๋ชจ๋ธ์ ๋ง๋ฌ.
์ํ์ ๊ฒฝ๋ง(RNN) ๋ ๋ ์ด์ด๋ค์ด ์ ํ์ผ๋ก ์ฐ๊ฒฐ๋ ํํ๋ ์ํ์ ๋ชจ๋ธ๋ก ์ค์ ํจ.
๊ทธ๋ฆฌ๊ณ ์ด ์ํ์ ๋ชจ๋ธ์ simpleRNN ์ ์ฌ์ฉํ๊ณ , ๋ด๋ฐ์ ์๋ 3, ์ ๋ ฅ๋ฐ๋ ๋ฐ์ดํฐ์ ํํ๋ฅผ ์ค์ ํจ.
์ง๊ธ 3์ผ์น ๋ฐ์ดํฐ๋ก ๋ค์๋ ์์ธกํ๋ค๊ณ ํด์ 1*3 ํํ๋ก ์ ๋ ฅ๋ฐ๋๋ค๊ณ ํ๊ฑด๋ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ ํจ์๋ก ๋ง๋ค์ด์ ๋ฐ๊ฟ์ ์์. ๋ฐ๋ผ์ 1,look_back์ผ๋ก ์ค์ ํ๊ฑฐ์.
ํ์ง์์ ์๋ง ๋ฐ์ง ๊ฒ์ด๋ 1๊ฐ์ ๋ ธ๋๋ง์ผ๋ก ๊ตฌ์ฑํจ.
compile ์ฆ, ๊ณ์ฐ ๋ฐฉ๋ฒ์ mse(ํ๊ท ์ ๊ณฑ ์ค์ฐจ, mean_squared_error)๋ก ์ฌ์ฉํ๊ณ ,
adam ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํจ.
ํ๊ท ์ ๊ณฑ์ค์ฐจ๋ฅผ ์ด์ฉํ๋ ์ด์ ๋ ์ค์ ํ์ง์ ์์ ์์ธกํ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ์ฌ ์ค์ฐจ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ.
summary ๋ ์์ฝ์.
์ง๊ธ๊น์ง ์์ฑํ ๋ชจ๋ธ์ ํ์ํด์ฃผ๋ ํจ์์ด๋ค.
๊ฒฐ๊ณผ๋ณด๋ฉด
์ด ๋ ธ๋์ ์ 3๊ฐ.
Param์ ํ๋ผ๋ฏธํฐ(๊ฐ์ค์น์ ํธํฅ ๊ฐ)์ ์.
Dense๋ ์ถ๋ ฅ์ธต์์์ ํํ์ ํ๋ผ๋ฏธํฐ ์.
# ๋ชจ๋ธ ํ์ต
model.fit(X_Train, y_train, epochs=100, batch_size = 1, verbose=1)
์ด๋ฐ์์ผ๋ก 100๋ฒ์ด ๋๋ค.
์ ๋ ฅ๋ฐ์ดํฐ, ์ถ๋ ฅ๋ฐ์ดํฐ, ๋ฐ๋ณตํ์, ํ๋ฒ์ ํ์ต์ํฌ ๋ฐ์ดํฐ์ ์, ์งํ์ํ ์ ํฌํฌ๋ณ๋ก ์๋ ค์ฃผ๊ฒ ์ค์ ํด๋ ผ๋ค.
#๋ฐ์ดํฐ ์์ธก / ๋ชจ๋ธ ์ฑ๋ฅ ์ธก์
๋ชจ๋ธ์ ํ์ตํ๊ณ ํด์ผํ๋ ๊ฒ์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ธก์ ํด๋ด์ผํ๋ค.
์ฑ๋ฅ์ ์ธก์ ํ๋ ค๋ฉด ์ค์ ๋ฐ์ดํฐ์ ๊ฐ๊ณผ ์์ธกํ ๋ฐ์ดํฐ ๊ฐ๊ณผ์ ์ฐจ์ด๋ฅผ ๋น๊ตํด ๋ณด์์ผํ๋ค.
์์ธก๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ ๊ทํ ํ๊ธฐ ์ด์ ์ ๊ฐ์ผ๋ก ๋น๊ตํด์ผํ๋ค.
trainPredict = model.predict(X_Train)
testPredict = model.predict(X_Test)
TrainPredict = scaler.inverse_transform(trainPredict)
# print(trainPredict)
# print(" ------ ")
# print(TrainPredict)
Y_Train = scaler.inverse_transform([y_train])
TestPredict = scaler.inverse_transform(testPredict)
Y_Test = scaler.inverse_transform([y_test])
predict ํจ์๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ๊ฒฐ๊ณผ๊ฐ์ ์์ธกํ๋ ํจ์.
scaler๋ ์ด์ ์ ๋ง๋ ํจ์์. ๊ธฐ์กด์ ์กด์ฌํ๋ ํจ์๊ฐ์๋ ์ ๊ทํ๋ฅผ ํ๋ ค๊ณ sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ MinMaxScaler๋ก ๋ง๋ ๊ฑฐ์์.
๊ฑฐ๊ธฐ์๋ inverse_transform์ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ์ ๊ทํ๋ ๊ฐ์ ์๋์ ์์ฐ์ ํํ์ ๊ฐ์ผ๋ก ๋๋ ค์ฃผ๋ ํจ์์.
์ค์ ํ์ง์ ์, ๋ด๊ฐ ํ์ํ ๋ฐ์ดํฐ์ ๊ฐ์ y_train๊ณผ y_test ๋ณ์ ์์ ์์ผ๋ []์์ ๋ฃ์ด์ค.
#๋ชจ๋ธ ์ ํ๋ ํ์ธ
ํ์ํ ๊ฐ๋ค์ ์ ๊ทํ ์ด์ ์ ๊ฐ์ผ๋ก ๋๋ ธ์ผ๋ ์ด์ ๋ชจ๋ธ์ด ์์ธกํ ๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๊ฐ ์ด๋์ ๋ ๋๋์ง ํ์ธํด๋ณด์์ผํ๋ค.
ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ (Root Mean Squared Error).
trainScore = math.sqrt(mean_squared_error(Y_Train[0], TrainPredict[:,0]))
print(trainScore)
testScore = math.sqrt(mean_squared_error(Y_Test[0], TestPredict[:,0]))
print(testScore)
์ฒซ๋ฒ์งธ ์ธ์์๋ ์ค์ ์ ๋ต๊ฐ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๋๋ฒ์งธ ์ธ์์๋ ์์ธก๊ฐ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ด.
[:,0] ์ธ ์ด์ ๋ ๋ฐฐ์ด์ด 2์ฐจ์ ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ.
mean_squared_error๊ฐ ์๋์ผ๋ก ์ค์ฐจ์ ๊ฐ์ ์ ๊ณฑํด์ ๊ฐ๊ฐ์ ๊ฐ์ ๋ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํจ. ๋ฐ๋ผ์ ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ๋ฅผ ๊ตฌํ๊ธฐ ์ํด sqrt๋ก ์ ๊ณฑ๊ทผ๊ฐ์ ๊ตฌํจ.
#๊ฒฐ๊ณผ๊ทธ๋ํ
์ค์ ๋ฐ์ดํฐ์ ์์ธกํ ํ๋ จ๋ฐ์ดํฐ, ๊ฒ์ฆ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ํ์ํด๋ดค๋ค.
trainPredictPlot = numpy.empty_like(dataset)
trainPredictPlot[ : , : ] = numpy.nan
trainPredictPlot[look_back : len(TrainPredict)+look_back, :] = TrainPredict
testPredictPlot = numpy.empty_like(dataset)
testPredictPlot[ : , : ] = numpy.nan
testPredictPlot[len(TrainPredict) + ((look_back + 1) * 2) -2 : len(dataset), : ] = TestPredict
plt.plot(dataset)
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.title("Covid19")
plt.show
์ค์ ๋ฐ์ดํฐ์ ์์ธกํ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๊ธฐ์ํด ์ ์ฒด ๋ฐ์ดํฐ(dataset)์ ๊ฐ์ ํํ์ ๋ฐฐ์ด์ ์์ฑํจ.
์ฌ๊ธฐ์ numpy ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ empty_like ๋ ์ธ์๊ฐ๊ณผ ๊ฐ์ ํํ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๋ ํจ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ nanํจ์๋ฅผ ์ด์ฉํด ๋ฐฐ์ด์์ ์๋ ์ ์ฒด์ ๊ฐ์ nan์ผ๋ก ์ด๊ธฐํ ์์ผ์ค๋ค.
๊นจ๋ํ ๋ฐฐ์ด์ ์ฒ์ 3์ผ์น๋ฅผ ๋ฐํ์ผ๋ก 4์ผ์ฐจ ๋ถํฐ ์์ธก์ ํ๊ธฐ์ ๊ฑด๋๋๊ณ ์ฒ์๊ฐ์ lool_back๋ถํฐ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ์์ธกํ ๊ฒฐ๊ณผ๊ฐ ๊ตฌ๊ฐ์ ์ ํด์ค๋ค.
๊ทธ๋ค์์ ๊ฒ์ฆ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ทธ๋ ค์ค๋ค.
plt ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ plotํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ค์ ๊ทธ๋ํ๋ก ๊ทธ๋ฆฐ๋ค.
์ฒ์ 0,0๋ถํฐ ์์ํ๋ ์ ์ด ์ค์ ํ์ง์ ์์ด๊ณ ,
๋๋จธ์ง ์ ์ ์์ธกํ ํ์ง์ ์์ด๋ค.
๋น์ทํ๊ฒ ์์ธกํ๋ ๊ฒ ๊ฐ๋ค.
#ํ๊ธฐ
๋ชจ๋ธ์ ์ ์ํ๋ ๋น์ค์ด ์๊ฐ๋ณด๋ค ํฌ์ง ์์๋ค.
๋๋ถ๋ถ์ ์๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ฆฌ๋ ๊ฒ์ ํฌ์ํ ๊ฒ๊ฐ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ๋ฃ์ ์ ์๊ฒ ๋ณํ์ ํ๊ณ , ๋ณด๊ธฐ ์ฝ๊ฒ ๋ ๋ณํ์ ํ๊ณ , ๋ฐ์ดํฐ์ ํํ๋ฅผ ๊ณ์ํด์ ๋ฐ๊ฟ ์ ์๋ ๋ฅ๋ ฅ์ด ํ์ํ๋ค ๋๊ผ๋ค.
๋ํ, ๋ค๋ฅธ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ค๋ฅธ AI๋ชจ๋ธ์ ์ ์ํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ์๋ค.
ํ์ฌ ์ธ๊ณต์ง๋ฅ์ด ์ด๋ค์์ผ๋ก ์ ์์ด ๋๊ณ ์ด๋ค ์์๋ก ์จ์ผํ๋์ง ์ด๋์ ๋ ์ดํด๊ฐ ๋๋ ๊ฒ ๊ฐ์ง๋ง, ์์ง ๋ฉ์ ๊ฒ ๊ฐ๋ค.
์ผ๋ผ์ค์ ์ฌ์ดํท๋ฐ, ํ ์ํ๋ก์ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ํด์ ธ์ผ ๋ ๊ฒ ๊ฐ๋ค.
๋๋ฒ์งธ ์ธ๊ณต์ง๋ฅ ๋