본문 바로가기
교재 리뷰/파이토치 첫걸음

파이토치 첫걸음 - 3. 선형회귀분석

by 펄서까투리 2019. 11. 14.

# 세줄요약 #

  1. 선형회귀분석은 주어진 데이터의 경향성을 잘 나타내는 선형관계를 찾아내는 것을 의미하는데, 간단한 예로는 y=wx+b 방정식에서 데이터 x, y를 가장 잘 표현하는 변수 w, b를 찾는 것이다(w: weight, b: bias).
  2. 예측값과 목표값의 차이인 오차를 나타내는 손실함수(Loss function)를 구하고, 경사하강법(gradient descent)을 사용하여 가중치(weight)를 업데이트하며 오차의 최솟값을 찾는 과정이 바로 학습(Learning)이다.
  3. 파이토치에서는 데이터 기본 단위로 "tensor"를 사용하여, "torch.nn" 라이브러리에서 신경망 모델과 손실함수를 설계하고, "torch.optim" 라이브러리에서 경사하강법 알고리즘을 선택해 학습을 수행한다.

fig 1. Linear regression, 선형회귀분석 [출처: https://en.wikipedia.org/wiki/Linear_regression]

#code block#

###########################
# Linear Regression Model #
###########################

# Library Import
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.init as init
import matplotlib.pyplot as plt

# Data Create
num_data = 1000
num_epoch = 500
x =  init.uniform_(torch.Tensor(num_data, 1), -10, 10)
noise = init.normal_(torch.FloatTensor(num_data, 1), std=1)
y = 2*x+3
y_noise = 2*(x+noise)+3

# Model Build
model = nn.Linear(1,1)
loss_func = nn.L1Loss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# Model Running
for i in range(num_epoch):
    optimizer.zero_grad()
    output = model(x)
    
    loss = loss_func(output, label)
    loss.backward()
    optimizer.step()
    
    if i%10 == 0:
        print(loss.data)
        param_list = list(model.parameters())
        print(param_list[0].item(), param_list[1].item())
        
# Result Check
plt.figure(figsize=(15,15))
plt.scatter(x.numpy(),y_noise.numpy(),s=7,c="gray")
plt.scatter(x.detach().numpy(),output.detach().numpy(),s=2,c="red")
plt.axis([-10, 10, -30, 30])
plt.show()

 

* 출처: 파이토치 첫걸음 / 최건호 / 한빛미디어

728x90
728x90

댓글