상관관계
두 변수 간의 관계를 나타내는 통계적 개념이다.
상관계수는 보통 -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개 이다.
다음 블로그에 손실함수를 이용하여 학습하는 방법을 작성하겠습니다.
'AI Naver boost camp > [Week 01] Pytorch' 카테고리의 다른 글
경사하강법(GD) vs 확률적경사하강법(SGD) vs 미니 배치 경사하강법(MBGD) (0) | 2024.08.10 |
---|---|
선형 회귀 (Linear Regression) _ 2 - 경사하강법, 데이터 표준화 (0) | 2024.08.08 |
Day - 04 (0) | 2024.08.08 |
Tensor 노름 (0) | 2024.08.07 |
Tensor 생성과 조작 (0) | 2024.08.06 |
댓글