💡 이상치(Outlier)
이상치는 다른 데이터 포인트와 비교했을 때 현저히 다르거나 극단적인 값을 가지는 데이터 포인트를 말합니다.
이상치는 모델의 성능에 큰 영향을 미칠 수 있습니다.
💡 다중공선성 (Multicollinearity)
다중공선성은 독립 변수들 간에 강한 상관관계가 존재하는 경우를 말합니다. 이는 회귀 계수의 추정에 불안정성을 초래하며, 해석이 어려워질 수 있습니다.
nn.Module
은 PyTorch 에서 신경망을 구현할 때 사용
nn.Module
을 사용하면 복잡한 모델을 여러 계층으로 나누어 관리할 수 있습니다. 이를 통해 모델의 각 부분을 쉽게 이해하고 수정할 수 있습니다.nn.Module
을 사용하면 모든 파라미터가 자동으로 관리되며, parameters()
메서드를 통해 쉽게 접근할 수 있습니다.to()
메서드를 사용하여 전체 모델을 원하는 장치로 이동할 수 있습니다.nn.Module
을 사용하면 역전파(backpropagation)를 쉽게 구현할 수 있습니다. 이는 모델 학습의 복잡성을 줄여줍니다.nn.Module
과 PyTorch의 최적화 알고리즘을 함께 사용하면 모델의 파라미터를 손쉽게 최적화할 수 있습니다. torch.optim
패키지의 다양한 옵티마이저를 사용할 수 있습니다.상관 계수(Correlation Coefficient)는 두 변수 간의 선형 관계의 강도와 방향을 측정하는 통계적 지표입니다. 상관 계수는 -1과 1 사이의 값을 가지며, 두 변수 간의 관계를 수치적으로 나타냅니다.
r = 1
: 완벽한 양의 선형 관계r = -1
: 완벽한 음의 선형 관계r = 0
: 선형 관계 없음numpy
의 corrcoef
를 이용한 상관 계수import numpy as np
# 두 데이터 배열 정의
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
# 상관 계수 계산
correlation_matrix = np.corrcoef(x, y)
print("상관 계수 행렬:")
print(correlation_matrix)
상관 계수 행렬:
[[1. 1.]
[1. 1.]]
선형 회귀 모델은 입력 변수와 출력 변수 간의 선형 관계를 모델링하는 회귀 분석 기법입니다.
주어진 입력 변수 x에 대해 연속적인 출력 변수 y를 예측합니다.
import torch
import torch.nn as nn # PyTorch의 신경망 모듈을 임포트
# 선형 회귀 모델 정의
class LinearRegressionModel(nn.Module): # nn.Module을 상속받아 새로운 클래스 정의
def __init__(self):
super(LinearRegressionModel, self).__init__() # 부모 클래스(nn.Module)의 생성자 호출
self.linear = nn.Linear(1, 1) # 입력 차원 1, 출력 차원 1인 선형 계층 정의
def forward(self, x):
return self.linear(x) # 입력 x를 선형 계층에 전달하여 출력 계산
# 모델 초기화
model = LinearRegressionModel() # LinearRegressionModel 클래스의 인스턴스 생성
__init__
)nn.Module
을 상속받은 클래스에서는 주로 모델의 계층(layer)들을 정의하고 초기화하는 역할forward
)forward
메서드는 직접 호출하지 않고, 모델 인스턴스를 호출함으로써 간접적으로 호출됩니다.함수가 정의된 특정 구간 내에서 가장 작은 값을 가지는 지점
함수의 다른 점들보다 낮은 값을 가지지만, 전체 범위에서 가장 낮은 값은 아닐 수 있음
import numpy as np
import matplotlib.pyplot as plt
# 함수 정의
def f(x):
return np.sin(x) + 0.5 * x
# x 범위 설정
x = np.linspace(-10, 10, 400)
y = f(x)
# 그래프 그리기
plt.plot(x, y, label='f(x) = sin(x) + 0.5x')
plt.title('Local vs Global Minimum')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.show()
StandardScaler
라이브러리를 이용하여 간단하게 표준화 가능fit
: 데이터의 평균과 표준편차 계산하여 스케일러 학습transform
: 학습된 스케일러를 사용하여 데이터 표준화fit_transform
: fit과 transform을 한 번에 수행from sklearn.preprocessing import StandardScaler
import numpy as np
# 샘플 데이터 생성
data = np.array([[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]])
# StandardScaler 객체 생성
scaler = StandardScaler()
# 데이터의 평균과 표준편차 계산하여 스케일러 학습
scaler.fit(data)
# 학습된 스케일러를 사용하여 데이터 표준화
standardized_data = scaler.transform(data)
# 또는 fit과 transform을 한 번에 수행
standardized_data = scaler.fit_transform(data)
# 표준화된 데이터를 원래 스케일로 변환
original_data = scaler.inverse_transform(standardized_data)
# 각 피처의 평균과 표준편차 확인
print("Mean:", scaler.mean_)
print("Scale:", scaler.scale_)
print("Variance:", scaler.var_)
print("원본 데이터:\n", data)
print("표준화된 데이터:\n", standardized_data)
print("복원된 데이터:\n", original_data)
Mean: [4. 5. 6.]
Scale: [2.44948974 2.44948974 2.44948974]
Variance: [6. 6. 6.]
원본 데이터:
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
표준화된 데이터:
[[-1.22474487 -1.22474487 -1.22474487]
[ 0. 0. 0. ]
[ 1.22474487 1.22474487 1.22474487]]
복원된 데이터:
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
loss.backward()
loss.backward()
는 손실 함수의 값인 loss
에 대해 모든 파라미터에 대한 기울기를 계산하는 메서드 (역전파 수행)grad
속성에 기울기를 저장import torch
import torch.nn as nn
# 간단한 모델 정의
model = nn.Linear(2, 1)
criterion = nn.MSELoss() # 손실 함수 정의
# 임의의 입력과 출력
inputs = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
targets = torch.tensor([[5.0], [6.0]])
# 예측
outputs = model(inputs)
# 손실 함수 계산
loss = criterion(outputs, targets)
# 기울기 계산
loss.backward()
optimizer.step()
optimizer.step()
은 기울기를 사용해 파라미터를 업데이트하는 메서드import torch.optim as optim
# 옵티마이저 정의
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 기울기 계산 후 파라미터 업데이트
loss.backward() # 기울기 계산
optimizer.step() # 파라미터 업데이트
optimizer.zero_grad()
optimizer.zero_grad()
는 모든 파라미터의 기울기를 0으로 초기화# 파라미터 업데이트 후 기울기 초기화
optimizer.step() # 파라미터 업데이트
optimizer.zero_grad() # 기울기 초기화