pytorch 로 sklearn 의 diabetes datasets 을 Regression 해보자. Linear와 MLP Regression 모델을 적용하며, 모델 외에 optimizer, loss function 등은 동일하게 사용하고자 했다.
공통함수 정의
- sklearn 의 load_diabetes 함수를 사용해 데이터 Load
- 데이터 tensor 변환
from sklearn import datasets
import pandas as pd
import numpy as np
import torch
from torch import nn
data = datasets.load_diabetes()
x = torch.from_numpy(data.data).float()
y = torch.from_numpy(data.target.reshape(-1, 1)).float()
- optimizer, loss function, train 함수 정의
- optimizer: SGD
- loss_fn: MSE
- train: epoch=10000
def get_optimizer(lr):
return torch.optim.SGD(model.parameters(), lr=lr)
def get_loss_fn():
return torch.nn.MSELoss()
def train(model, optimizer, loss):
epoches=100000
PRINT=5000
for e in range(epoches):
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if e % PRINT == 0:
print(e, loss.item())
- 결과 시각화를 위한 plotting 함수 정의
import matplotlib.pyplot as plt
def plotting(title, pred, y):
plt.scatter(x=y.numpy(), y=pred.reshape(1, -1).detach().numpy())
plt.title(title)
plt.xlabel('y')
plt.ylabel('pred')
Lineare Regression
- nn.Linear 를 사용해서 모델을 정의
- train (lr=0.01)
- 마지막 epoch 의 loss 는 2881.43
model = nn.Linear(x.size(-1), 1)
loss = get_loss_fn()
optimizer = get_optimizer(0.01)
train(model, optimizer, loss)
- 결과 시각화
plotting("Linear Regression", pred, y)
MLP Regression
- nn.Sequential 을 사용해서 MLP Regression 모델을 정의
- 중간의 nn,Linear size 및 nn.ReLU 등은 임의로 선정
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self._stacked_model = nn.Sequential(
nn.Linear(x.size(-1), 50),
nn.ReLU(),
nn.Linear(50, 100),
nn.ReLU(),
nn.Linear(100, 25),
nn.ReLU(),
nn.Linear(25, 1)
)
def forward(self, x):
pred = self._stacked_model(x)
return pred
- lr(Learning Rate)이 너무 클 경우 loss 가 nan 으로 출력됨
- train (lr=0.0001)
- 마지막 epoch의 loss는 1.73
- Linear 에 비해 굉장히 낮은 값
- 다만, train/test 셋을 나눠서 측정한 결과가 아니기 때문에 큰 의미는 없음
- MLP의 특성상 overfitting
model = MyModel()
optimizer = torch.optim.SGD(model.parameters(), lr=0.0001)
loss_fn = get_loss_fn()
train(model, optimizer, loss_fn)
- 결과 시각화
plotting("MLP Regression", pred, y)
반응형
'IT > Machine Learning' 카테고리의 다른 글
pytorch Classifier 튜토리얼 (feat. sklearn, digits, accuracy) (0) | 2023.06.15 |
---|---|
Ray tune 를 사용해서 pytorch hyperparameter 최적화하기 (feat. diabetes) (0) | 2023.06.14 |
회귀모델 성능지표 결정계수란? (feat. 기준값, 음수, 조정된 결정계수) (2) | 2021.03.03 |
MLP 파라미터(param) 개수 자세히 알기 (feat. 케라스) (2) | 2020.12.17 |
케라스(keras) 모델 저장(save) 및 불러오는(load) 2가지 방법 (0) | 2020.12.14 |