- 로지스틱 회귀의 가설식은 H(x)=sigmoid(Wx+b)
- pytorch에서
nn.Sigmoid()
를 로지스틱 회귀
1. 파이토치의 nn.Linear와 nn.Sigmoid로 로지스틱 회귀 구현하기
01. 패키지 선언 및 초기화
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
torch.manual_seed(1)
02. 학습 데이터 선언
x_data = [[1, 2], [2, 3], [3, 1], [4, 3], [5, 3], [6, 2]]
y_data = [[0], [0], [0], [1], [1], [1]]
x_train = torch.FloatTensor(x_data)
y_train = torch.FloatTensor(y_data)
03. nn.module을 활용한 모델 선언
nn.Sequential()
은 nn.Module
층을 차례로 쌓을 수 있음.
- 쉽게 말해
nn.Sequential
은 Wx+b와 같은 수식과 시그모이드 함수 등 여러 함수를 연결해주는 역할
model = nn.Sequential(
nn.Linear(2, 1),
nn.Sigmoid()
)
model(x_train)
04. optimizer 설정 및 학습
optimizer = optim.SGD(model.parameters(), lr=1)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
hypothesis = model(x_train)
cost = F.binary_cross_entropy(hypothesis, y_train)
optimizer.zero_grad()
cost.backward()
optimizer.step()
if epoch % 10 == 0:
prediction = hypothesis >= torch.FloatTensor([0.5])
correct_prediction = prediction.float() == y_train
accuracy = correct_prediction.sum().item() / len(correct_prediction)
print('Epoch {:4d}/{} Cost: {:.6f} Accuracy {:2.2f}%'.format(
epoch, nb_epochs, cost.item(), accuracy * 100,
))
05. 학습 결과 확인
model(x_train)
- 0.5를 넘으면 True, 그보다 낮으면 False로 간주
- 실제값은 [0,0,0,1,1,1]로, [False,False,False,True,True,True]로 해당됨
print(list(model.parameters()))
[Parameter containing:
tensor([[3.2534, 1.5181]], requires_grad=True), Parameter containing:
tensor([-14.4839], requires_grad=True)]
2. 인공신경망으로 표현되는 로지스틱 회귀
- 로지스틱회귀는 인공신경망으로 간주할 수 있음.
- 위의 인공신경망 그림에서 검은 화살표는 가중치(W), 회색 화살표는 편향(b)이 곱해짐
- 출력하기 전에 시그모이드 함수를 지나게됨.
- 위 사진의 인공신경망은 다중 로지스틱 회귀를 표현하고 있음.
- H(x)=sigmoid(x1w1+x2w2+b)