가장 기본이라고 할 수 있는 Linear Regression(선형 회귀분석)을 학습해보려 한다.
📚 위키백과
통계학에서, 선형 회귀(線型回歸, 영어: linear regression)는 종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우에는 단순 선형 회귀
선을 바꿔가면서 최소의 손실 값을 가지는 선을 찾으면 된다.
제곱을 하여 절대값 구하고, (양수, 음수 차이 제거)
계산을 쉽게 해보기 위해 식을 간단하게 바꾼 뒤(B 제거)
W에 2를 넣으면 4.67를 구할 수 있고, 이렇게 값을 쭉 넣다보면 밑에 그림처럼
이차함수를 얻을 수있다.
최종 목표
cost 최소 값 즉 0에 대한 W = 1를 구하는 것 !
나무의 높이를 예측해보자.
기본 공식 H(x) = Wx + b
학습 결과 W = 3.11 b = 198.64
즉 H(x) = 3.11x + 198.64가 나왔고, x에 60(60일)을 대입하게 되면
3.11 * 60 + 198.64 = 385.24(cm)
나무의 60일 후의 높이는 385.24로 예측해볼 수 있다.
예제 소스
# 모듈 로드
import tensorflow as tf
import matplotlib.pyplot as plt
# 데이터 시각화
plt.scatter(x, y, label="input data set")
# 선형 모델 클래스
class LinearModel:
def __call__(self, x):
return self.Weight * x + self.Bias
def __init__(self):
self.Weight = tf.Variable(0.)
self.Bias = tf.Variable(0.)
# 오차(손실) 구하기 함수
def loss(y, pred):
return tf.reduce_mean(tf.square(y - pred))
# 학습 함수
def train(linear_model, x, y, lr):
with tf.GradientTape() as t:
current_loss = loss(y, linear_model(x))
lr_weight, lr_bias = t.gradient(current_loss, [linear_model.Weight, linear_model.Bias])
linear_model.Weight.assign_sub(lr * lr_weight)
linear_model.Bias.assign_sub(lr * lr_bias)
# 학습 진행
linear_model = LinearModel()
epochs = 10000
for epoch_count in range(epochs + 1):
real_loss = loss(y, linear_model(x))
train(linear_model, x, y, lr=0.003)
if epoch_count % 100 == 0:
print(f"{epoch_count}:: W:{linear_model.Weight.numpy()} b:{linear_model.Bias.numpy()} Loss: {real_loss.numpy()} ")
https://www.yalco.kr/34_tensorflow/
https://doorbw.tistory.com/97