YearsExperience ()Salary ()| YearsExperience () | Salary () |
|---|---|
| 1.2 | 39344 |
| 3.1 | 60151 |
| 6.1 | 93941 |
| 10.4 | 122392 |
# Kaggle에서 데이터셋 다운로드
!kaggle datasets download -d abhishek14398/salary-dataset-simple-linear-regression
!unzip salary-dataset-simple-linear-regression.zip
import pandas as pd
# 트레이닝 데이터 불러오기
data = pd.read_csv("Salary_dataset.csv", sep=",", header=0)
print(data)
# 특징 변수와 목표 변수 분리
x = data.iloc[:, 1].values # YearsExperience
t = data.iloc[:, 2].values # Salary
print(x)
print(t)
data.iloc[:, 1]: 두 번째 열(YearsExperience)을 특징 변수로 사용data.iloc[:, 2]: 세 번째 열(Salary)을 목표 변수로 사용.values: pandas Series를 numpy 배열로 변환특징 변수와 목표 변수 사이에 선형 관계가 있는지 확인하기 위해 상관 관계 분석을 수행한다.

import numpy as np
# 상관 관계 분석
correlation_matrix = np.corrcoef(x, t)
correlation_coefficient = correlation_matrix[0, 1]
print(correlation_matrix)
print('Correlation Coefficient between YearsExperience and Salary :', correlation_coefficient)
np.corrcoef(x, t): x와 t 사이의 상관계수 행렬을 반환correlation_matrix[0, 1]: x-t 간 상관계수 값산점도(scatter plot)를 그리면 두 변수 간의 관계를 직관적으로 파악할 수 있다.

import matplotlib.pyplot as plt
plt.scatter(x, t)
plt.xlabel('YearsExperience')
plt.ylabel('Salary')
plt.title('YearsExperience vs Salary')
plt.grid(True)
plt.show()
산점도를 보면 YearsExperience가 증가할수록 Salary도 증가하는 강한 양의 선형 관계가 나타난다.
선형 회귀 모델에서 학습이란, 주어진 트레이닝 데이터의 특성을 가장 잘 표현할 수 있는 직선 의 가중치(기울기) 와 바이어스(y절편) 를 찾는 과정을 의미한다.


신경망 관점에서 선형 회귀 모델은 입력층의 특징 변수가 출력층의 예측 변수로 사상(mapping)되는 과정이다.
PyTorch에서 선형 회귀 모델은 nn.Module 클래스를 상속받아 생성한다.
nn.Module은 신경망의 모든 계층을 정의하기 위해 사용되는 기본 클래스nn.Module을 상속받아 신경망의 각 계층을 정의하고, 여러 계층들을 조합하여 복잡한 신경망 모델을 구축함nn.Module의 장점:
선형 회귀 모델 코드를 이해하기 위한 OOP 기본 개념 정리:
import torch.nn as nn
# 클래스 정의
class LinearRegressionModel(nn.Module):
def __init__(self): # 생성자 메서드
super(LinearRegressionModel, self).__init__() # 부모 클래스 초기화
self.linear = nn.Linear(1, 1) # 속성: 입력 1개, 출력 1개인 선형 계층
def forward(self, x_tensor): # 순전파 메서드
y = self.linear(x_tensor) # 입력 데이터를 선형 계층에 통과시켜 예측값 계산
return y
# 인스턴스 생성
model = LinearRegressionModel()
생성자 메서드 (__init__):
super(LinearRegressionModel, self).__init__(): 부모 클래스인 nn.Module의 생성자를 호출하여 상속받은 모든 초기화 작업을 수행self.linear = nn.Linear(1, 1): 입력과 출력 차원이 모두 1인 선형 계층. 모델의 구조와 파라미터(, )를 정의하는 핵심 요소순전파 메서드 (forward):
x_tensor를 받아 선형 계층 self.linear를 통해 예측 변수 y를 계산하고 반환모델에 데이터를 입력하기 전에, numpy 배열을 PyTorch Tensor로 변환해야 한다.
import torch
# 1차원 numpy 배열을 2차원 Tensor로 변환
x_tensor = torch.tensor(x, dtype=torch.float32).view(-1, 1) # (N, 1) 형태
t_tensor = torch.tensor(t, dtype=torch.float32).view(-1, 1) # (N, 1) 형태
print('x_tensor =', x_tensor)
print('t_tensor =', t_tensor)
.view(-1, 1): 1차원 배열을 2차원 텐서로 변환. nn.Linear는 2차원 입력을 기대하기 때문.# GPU 지원
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device) # 모델을 GPU로 전송
x_tensor = x_tensor.to(device) # 입력 데이터를 GPU로 전송
t_tensor = t_tensor.to(device) # 정답 데이터를 GPU로 전송


오차를 제곱하여 더한 후 평균을 구하는 손실 함수:
# 손실 함수 정의
loss_function = nn.MSELoss()