Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

덕배의 블로그

다중 선형 회귀, 벡터 내적에 대해서 알아보고 파이토치로 실습해보기 본문

인공지능

다중 선형 회귀, 벡터 내적에 대해서 알아보고 파이토치로 실습해보기

김덕배_KDB 2023. 8. 12. 19:21
반응형

다중 선형 회귀

다중 선형 회귀를 알아보기 전에 단순 선형 회귀에 대해서 잘 모른다면 밑에 링크를 통해 공부해 보고 오는 게 좋을 듯하다.

 

 

딥러닝 선형 회귀(Linear Regression), 경사 하강법을 알고 파이토치로 실습해보자

선형 회귀(Linear Regression) 선형 회귀에 대해서 알아볼 건데 선형 회귀가 뭔지 또 평균 제곱 오차, 경사하강법과 손실함수에 대해서 알아보려고 한다. 선형 회귀는 학습 데이터와 가장 잘 맞는 하

kdbeom.com

 

이번 글은 다중 선형 회귀로서 훈련 데이터를 1000개로 가정해보려고 한다. 근데 일일이 다 선언하기가 힘들다. 이러한 코딩은 굉장히 비효율적이기에 행렬 곱셈 연산( 벡터 내적 )을 사용하면 편하고 간단하고 속도도 빠르다.

 

 

벡터 내적 

H(x) = w1x1 + w2x2 + w3x3 이 식을 벡터의 내적으로 표현하면

 

벡터 내적
벡터의 내적

 

위 식처럼 되는데 x의 변수가 3개임에도 H(x) = XW 이 식처럼 표현할 수 있다.

이렇게 벡터의 내적을 이용하면 간단한 식으로 표현이 가능하다.

 

 

다중 선형 회귀 실습 코드 (파이토치)

 

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim


x_train  =  torch.FloatTensor([[73,  80,  75], 
                               [93,  88,  93], 
                               [89,  91,  80], 
                               [96,  98,  100],   
                               [73,  66,  70]])  # (5,3) 행렬
y_train  =  torch.FloatTensor([[152],  [185],  [180],  [196],  [142]]) # (5,1) 행렬

# 모델 초기화
W = torch.zeros((3, 1), requires_grad=True) #가중치 행렬 x가 특징이 3이기에 (3,1)
b = torch.zeros(1, requires_grad=True)

# optimizer 경사하강법 설정 lr = 학습률
optimizer = optim.SGD([W, b], lr=1e-5)

nb_epochs = 50
for epoch in range(nb_epochs + 1):

    # H(x) 계산
    # 편향 b는 브로드 캐스팅되어 각 샘플에 더해집니다.
    hypothesis = x_train.matmul(W) + b

    # 비용함수 (평균제곱오차)
    cost = torch.mean((hypothesis - y_train) ** 2)

    # cost로 H(x) 개선
    optimizer.zero_grad()
    cost.backward()  #w와 b에 대한 기울기 계산
    optimizer.step() #lr 계산 업데이트

    print('Epoch {:4d}/{} hypothesis: {} Cost: {:.6f}'.format(
        epoch, nb_epochs, hypothesis.squeeze().detach(), cost.item()
    ))

 

 

optimizer.zero_grad()를 하는 이유와 backward, step 등이 궁금하다면 밑에 사이트에서 공부하기를 바란다.

 

 

딥러닝 선형 회귀(Linear Regression), 경사 하강법을 알고 파이토치로 실습해보자

선형 회귀(Linear Regression) 선형 회귀에 대해서 알아볼 건데 선형 회귀가 뭔지 또 평균 제곱 오차, 경사하강법과 손실함수에 대해서 알아보려고 한다. 선형 회귀는 학습 데이터와 가장 잘 맞는 하

kdbeom.com

 

자동 미분

 

import torch

w = torch.tensor(2.0, requires_grad=True)  #기울기를 저장

y = w**2       #2w제곱
z = 2*y + 5
z.backward()   #w에 대한 기울기 계산

print('미분한 값 : {}'.format(w.grad))
8.0

 

 

이렇게 다중 선형 회귀와 벡터 내적에 대한 연관성을 알아보고 자동 미분과 파이토치 실습까지 해보았다. 다른 딥러닝 공부에 어려움을 느낀다면 카테고리를 통해 공부하기를 바란다. 찾아볼 것들이 많으니 참고하면 좋을 것 같다.