Python(Colab) 파이토치(Pytorch) + 논리 회귀
2023. 6. 20. 22:12ㆍ파이썬/머신러닝 및 딥러닝
✔️논리 회귀
- 주로 분류할 때 사용한다.
- 선형 회귀 공식으로부터 나와서 논리회귀라는 이름을 사용한다.
✔️ 1번 그림을 보게 되면 직선으로 한 선형 회귀이다.
✔️ 2번 그림은 곡선으로 회귀를 진행한다.
>> Sigmoid함수를 사용하여 곡선화시켜 정확도를 높인다.
✔️ Sigmoid함수란?
- 예측값이 0 ~ 1사이의 값이 되도록 만들어준다.
- 0 ~ 1 사이의 연속된 값을 출력함으로 보통 0.5로 구분한다.
- 계단함수(퍼셉트론)은 무조건 0 or 1을 반환하지만 시그모이드는 0~1이기떄문에
>> 퍼셉트론: A는 1이고, B는 0이야 이렇게 확답을한다면, 시그모이드는 A가 아마도 1일거야 라는 느낌
단점)
vanishing gradient: 입력값이 아무리 커도, 미분 값의 범위로 제한되어 있어, 층이 쌓일수록 gradient값이 0에 수렴
1번 사진 따라해보기
1. 데이터 셋 설정 및 시각화
import torch
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(10)
import matplotlib.pyplot as plt
x_train = torch.FloatTensor([[0],[1],[3],[5],[9],[11],[15],[20]]) #시간
y_train = torch.FloatTensor([[0],[0],[0],[0],[0],[1],[1],[1]]) #11시간 공부하면 시험에 붙었다라는
plt.figure(figsize=(4,3))
plt.scatter(x_train,y_train)
2. 시그모이드 함수를 사용한 모델 만들기
# 위에 가설을 검증
model=nn.Sequential(
nn.Linear(1,1),
nn.Sigmoid()
)
print(model)
torch.nn.Sequential(): 모듈들을 인수로 받아 하나의 모델처럼 돌아가게 하는 것
✔️논리 회귀에서는 nn.BCELoss()를 사용하여 Loss를 계산한다. (Binary Cross Entropy)
✔️Binary Cross Entropy : 모델 구조상 마지막 Layer가 Sigmoid 혹은 Softmax로 되어 있는 경우 사용
y_pred = model(x_train)
y_pred
loss = nn.BCELoss()(y_pred,y_train)
loss
4. 확률적 경사하강법 셋팅 후 학습
optimizer = optim.SGD(model.parameters(),lr=0.01)
epochs =1000
for epoch in range(epochs+1):
y_pred = model(x_train)
loss = nn.MSELoss()(y_pred,y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print(f'Epoch{epoch}/{epochs} // Loss{loss:.6f}')
해석
1. 1000번 반복할 예정
2. loss = nn.MSELoss()(y_pred,y_train)으로 예측값과 결과값의 차이의 제곱을 구한다.
3. 역전파 단계
4. optimizer.zero_grad()으로 매번 기울기를 0으로 초기화 (만약 하지 않으면 다른 방향을 가르킬수 있다.)
5. loss.backward()로 모델의 기울기를 계산한다.
6. optimizer.step()로 파라미터를 업데이트 한다.
7. 반복이 100회 돌때마다 손실율을 출력한다.
5. 테스트데이터 입력 후 결과값 확인
x_test = torch.FloatTensor([[2.5],[15.5]])
y_pred = model(x_test)
y_pred
1일 확률이 더 높다
728x90
'파이썬 > 머신러닝 및 딥러닝' 카테고리의 다른 글
Python(Colab) 파이토치(Pytorch) + 논리 회귀 (와인품종 예측) (0) | 2023.06.20 |
---|---|
Python(Colab) 파이토치(Pytorch) + 논리 회귀 (다항) (2) | 2023.06.20 |
Python(Colab) 파이토치(Pytorch) + 다항 선형회귀 해보기 (0) | 2023.06.20 |
Python(Colab) 파이토치(Pytorch) + 단항 선형회귀 해보기 (0) | 2023.06.18 |
Python(Colab) 파이토치(Pytorch) (0) | 2023.06.18 |