'텐서플로'로 선형 회귀

TaeHyun Lee·2023년 3월 20일
0

AI 공부

목록 보기
6/17

선형 회귀는 형상을 분석하는 방법의 하나입니다. 머신러닝에서는 가설 함수(hypothesis)라고 하며 H(x)라고 표기합니다. 또 기울기 a는 변수 x에 어느 정도의 가중치를 곱하는지 결정하므로, 가중치(weight)라고 하며, w로 표시합니다. 절편 b는 데이터의 특성에 따라 따로 부여되는 값이므로 편향(bias)이라고 하며, b로 표시합니다. 따라서 우리가 앞서 배운 y = ax + b는 머신 러닝에서 다음과 같이 표기됩니다.

y = ax + b ➡︎ H(x) = wx + b

최적의 기울기와 절편을 찾기 위해 앞서 경사 하강법을 배웠지요. 딥러닝에서는 이를 옵티마이저(optimizer)라고 합니다. 우리가 사용했던 경사 하강법은 딥러닝에서 사용하는 여러 옵티마이저 중 하나였습니다. 경사 하강법 이외의 옵티마이저에 대해서는 9장에서 상세히 배웁니다.

경사 하강법 ➡︎ 옵티마이저(optimizer)

이제부터는 손실 함수, 옵티마이저라는 용어를 사용해 설명하겠습니다. 먼저 텐서플로에 포함된 케라스 API 중 필요한 함수들을 다음과 같이 불러옵니다.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

Sequential() 함수와 Dense() 함수는 2장에서 이미 소개한 바 있습니다. 이 함수를 불러와 선형 회귀를 실행하는 코드는 다음과 같습니다.

model.add(Dense(1, input_dim=1, activation='linear')) ----- ➊
model.compile(optimizer='sgd', loss='mse') -----  ➋
model.fit(x, y, epochs=2000) -----

가설 함수는 H(x) = wx + b입니다. 이때 출력되는 값(=성적)이 하나씩이므로 Dense() 함수의 첫 번째 인자에 1이라고 설정합니다. 입력될 변수(=학습 시간)도 하나뿐이므로 input_dim 역시 1이라고 설정합니다. 입력된 값을 다음 층으로 넘길 때 각 값을 어떻게 처리할지를 결정하는 함수를 활성화 함수라고 합니다.

plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')    # 예측 결과를 그래프로 나타냅니다.
plt.show()

텐서플로에서 실행하는 선형 회귀

import numpy as np
import matplotlib.pyplot as plt

# 텐서플로의 케라스 API에서 필요한 함수들을 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

model = Sequential()

# 출력 값, 입력 변수, 분석 방법에 맞게끔 모델을 설정합니다.
model.add(Dense(1, input_dim=1, activation='linear'))

# 오차 수정을 위해 경사 하강법(sgd)을, 오차의 정도를 판단하기 위해
# 평균 제곱 오차(mse)를 사용합니다.
model.compile(optimizer='sgd', loss='mse')

# 오차를 최소화하는 과정을 2000번 반복합니다.
model.fit(x, y, epochs=2000)

plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')    # 예측 결과를 그래프로 나타냅니다.
plt.show()

# 임의의 시간을 집어넣어 점수를 예측하는 모델을 테스트해 보겠습니다.
hour = 7
prediction = model.predict([hour])
print("%.f시간을 공부할 경우의 예상 점수는 %.02f점입니다." % (hour, prediction))

Epoch 1/2000
1/1 [==============================] - 1s 114ms/step - loss: 9241.3984
... (중략) ...
Epoch 2000/2000
1/1 [==============================] - 0s 2ms/step - loss: 8.3022

7시간을 공부할 경우의 예상 점수는 95.12점입니다.

profile
서커스형 개발자

0개의 댓글