필요한 라이브러리를 임포트한다.
Import
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
데이터 생성
임의의 데이터를 생성한다.
X = np.linspace(0, 10, 10)
Y = X + np.random.randn(*X.shape)
데이터 조회
어떤 데이터가 만들어졌는지 확인한다.
for x, y in zip(X, Y):
print((round(x, 1), round(y, 1)))
[출력]
(0.0, -0.3)
(1.1, 1.5)
(2.2, 2.9)
(3.3, 3.3)
(4.4, 3.8)
(5.6, 4.6)
(6.7, 6.1)
(7.8, 9.7)
(8.9, 9.3)
(10.0, 10.1)
모델 생성
현재 입력하는 값은 x값 밖에 없으므로 input_dim = 1, 출력하는 값도 y값 밖에 없으므로 units =1 로 지정한다. 또 y = wx + b 처럼 bias가 있으면 use_bias = True로 지정해주어야한다. 하지만 지금은 y = wx이므로 use_bias=False로 지정해주었다.
model = Sequential()
# input_dim : 입력값 수(x값)
# units : 출력값 수(y값)
# y = wx + b : use_bias = True, y = wx : use_bias = False
model.add(Dense(input_dim=1, units=1, activation='linear', use_bias=False))
sgd = optimizers.SGD(lr=0.01) #lr = learning rate
model.compile(optimizer=sgd, loss='mse') # optimizer - 경사하강법(gradient descent), loss - 평균제곱오차(mse)
#최초의 w값 조회
weights = model.layers[0].get_weights()
print(weights)
w = weights[0][0][0]
print('initial w is : ' + str(w))
[출력]
[array([[-1.0493674]], dtype=float32)]
initial w is : -1.0493674
모델 학습
model.fit(X, Y, batch_size=10, epochs=10, verbose=1) # 배치사이즈 10 - 10개의 데이터, epochs - 반복 학습 수, verbose - 1로 지정시 진행 과정이 표시됨
[출력]
Epoch 1/10
1/1 [==============================] - 13s 13s/step - loss: 151.8819
Epoch 2/10
1/1 [==============================] - 0s 4ms/step - loss: 13.8634
Epoch 3/10
1/1 [==============================] - 0s 5ms/step - loss: 1.7465
Epoch 4/10
1/1 [==============================] - 0s 5ms/step - loss: 0.6827
Epoch 5/10
1/1 [==============================] - 0s 6ms/step - loss: 0.5893
Epoch 6/10
1/1 [==============================] - 0s 5ms/step - loss: 0.5812
Epoch 7/10
1/1 [==============================] - 0s 6ms/step - loss: 0.5804
Epoch 8/10
1/1 [==============================] - 0s 8ms/step - loss: 0.5804
Epoch 9/10
1/1 [==============================] - 0s 5ms/step - loss: 0.5804
Epoch 10/10
1/1 [==============================] - 0s 4ms/step - loss: 0.5804
<keras.callbacks.History at 0x7fa8119b4ed0>
시각화
y_pred = model.predict(X).flatten()
cv_list = [
['data', Y],
['prediction', y_pred]
]
df = pd.DataFrame.from_dict(dict(cv_list))
df.plot()
[출력]
'Machine Learning > Coding' 카테고리의 다른 글
[실습]주성분 분석(Principal Component Analysis, PCA) (0) | 2021.07.13 |
---|---|
[실습] 단일, 다중 입력 로지스틱 회귀와 소프트맥스(다중 분류 로지스틱 회귀) (0) | 2021.07.12 |
[실습] KMeans (K 평균 군집화) (0) | 2021.06.23 |
[실습] 랜덤 포레스트(Random Forest)와 앙상블(Ensemble) (0) | 2021.06.20 |
[실습] 다항분포 나이브 베이즈(Multinomial Naive Bayes) (0) | 2021.06.13 |