본문 바로가기
AI Naver boost camp/[Week 01] Pytorch

선형 회귀 (Linear Regression) _ 1 - 상관관계, pytorch 모델 코드, loss funtion

by AI-BT 2024. 8. 8.
728x90
반응형

상관관계

두 변수 간의 관계를 나타내는 통계적 개념이다.

상관계수는 보통 -1 ~ 1 사이의 값을 가지며, 아래와 같은 의미를 갖고 있다.

 

  • 1: 완벽한 양의 상관관계. 두 변수는 정확히 같은 방향으로 움직인다.
  • 0: 상관관계 없음. 두 변수 간에 선형 관계가 없습니다.
  • -1: 완벽한 음의 상관관계. 두 변수는 정확히 반대 방향으로 움직인다.
import numpy as np
import matplotlib.pyplot as plt

# 두 변수의 예제 데이터
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])  # x의 값에 대해 완벽한 양의 상관관계를 가짐

# 상관계수 계산
corr_matrix = np.corrcoef(x, y)
corr_coefficient = corr_matrix[0, 1]

print(f"상관계수: {corr_coefficient}")

# 데이터 시각화
plt.scatter(x, y)
plt.title(
    f'Scatter plot of x and y\nCorrelation Coefficient: {corr_coefficient:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

 

 

결과

상관계수 = 0.999999


pytorch 선형회귀 모델 

1. 선형 회귀 모델 이란?

데이터를 기반으로 두 변수 간의 선형 관계를 찾는 방법이다.

여기서 선형 관계란 한 변수의 변화가 다른 변수의 변화에 비례하는 관계를 의미 한다.

 

2. 선형 회귀 모델 개념

주어진 데이터를 가장 잘 설명하는 직선을 찾는 과정

y = wx + b

y - 예측하고자 하는 값 (target)

x - 입력값

w - 기울기 (가중치)

b - 편향 (절편)

 

3. pytorch 를 사용한 선형회귀 모델 코드

import pandas as pd
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt

# 데이터 로드

data = pd.read_csv('./StudentsPerformance.csv')
print(data.head())

# 간단한 전처리: 점수들을 float로 변환
data['math score'] = data['math score'].astype(float)
data['reading score'] = data['reading score'].astype(float)
data['writing score'] = data['writing score'].astype(float)

# feature와 target 설정 (여기서는 'math score'와 'reading score' 사용)
x = data[['math score']].values
y = data[['reading score']].values

# NumPy 배열을 PyTorch tensor로 변환
x = torch.tensor(x, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32)

# 선형 회귀 모델 정의
class LinearRegressionModel(nn.Module):
    def __init__(self):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        return self.linear(x)

 

 

3. 코드 설명

- super(LinearRegressionModel, self).__init__() 

부모 클래스 (nn.Module) 의 초기화 메소드를 호출하는 구문

 

super() 함수의 역할

super() 함수는 부모 클래스의 메서드를 호출하는 데 사용된다.

특히, 부모 클래스의 초기화 메서드를 호출하여 부모 클래스가 정상적으로 초기화되도록 할 수 있다. .

왜 부모 클래스의 초기화 메서드를 호출해야 하는가?

부모 클래스가 초기화될 때, 부모 클래스의 속성들이 올바르게 설정되고 필요한 초기화 작업들이 수행된다.

이를 호출하지 않으면, 부모 클래스의 초기화 작업이 누락될 수 있다.

 

 

-  self.linear = nn.Linear(1, 1)

  • self.linear:
    • self는 클래스 내에서 인스턴스 자체를 뜻 한다. 따라서 self.linear는 인스턴스의 속성(attribute)으로, 선형 계층을 정의하는 데 사용된다.
  • nn.Linear(1, 1):
    • nn.Linear는 선형 변환 계층을 정의하는 PyTorch 클래스
    • 첫 번째 인자인 1은 입력 특성의 수를 나타냅니다. 즉, 이 계층은 1차원 입력을 받음.
    • 두 번째 인자인 1은 출력 특성의 수를 나타냅니다. 즉, 이 계층은 1차원 출력을 생성.

Loss funtion (손실함수)

1. Loss (오차, cost) 

 

- Loss (손실)란?

실제값(target)과 모델이 예측한 값(y) 간의 차이를 측정한 것이다.

Loss는 모델이 얼마나 잘 예측했는지를 평가하는 척도라고 볼 수 있으며,

Loss 값이 작을수록 모델의 예측이 실제값에 더 가까운 것이다.

 

- Loss 역할

모델의 목표는 이 Loss를 최소화하는 것이다.

이 과정에서 모델은 가중치와 편향 등의 파라미터를 조정하여 예측과 실제값의 차이를 줄이려고 한다.

 

- Loss funtion

손실함수는 실제값(target)과 예측값(y) 간의 차이를 수치적으로 측정하는 함수이다.

손실함수의 값이 클수록 모델의 예측이 실제값과 더 많이 벗어나 있다는 것을 의미한다.

Loss 를 제곱 혹은 절대값을 취하여 더하는 방식을 사용하는데,

값이 커지면 선형 회귀 모델에서의 학습은 훨씬 수월해진다.

 

- MSE (Mean Squared Error)

Loss 를 제곱하여 더한 후 평균을 구하는 방식의 MSE 이다.

Loss funtion 종류 중 1개 이다.

 

다음 블로그에 손실함수를 이용하여 학습하는 방법을 작성하겠습니다.

728x90
반응형

댓글