Python(Colab) 파이토치(Pytorch) + 다항 선형회귀 해보기
2023. 6. 20. 21:40ㆍ파이썬/머신러닝 및 딥러닝
1. 기초설정
#데이터 설정
x_train = torch.FloatTensor([[73,80,75],
[93,88,93],
[89,91,90],
[96,98,100],
[73,66,70]])
y_train = torch.FloatTensor([[152],[185],[180],[196],[142]])
print(x_train)
print(x_train.shape)
print('------------------')
print(y_train)
print(y_train.shape)

2. 모델 설정
model = nn.Linear(3,1) # 3개가 들어가서 1개가 나온다
print(model)

print(list(model.parameters()))

3. 학습하기
optimizer = optim.SGD(model.parameters(),lr=0.00001)
# 학습하기
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}')

4. 최적의 파라미터 확인
#최종 파라미터 확인
print(list(model.parameters()))

5. 테스트해보기
x_test = torch.FloatTensor([[82,92,82]])
y_pred = model(x_test)
print(y_pred)

173.3595라는 예측값을 알수 있다.
csv파일을 적용해서 해보기
목표: 기온에 따른 지면온도를 예측해보자
1. 데이터를 read + 결측값 제거 + 컬럼 이름 확인하기
temp_df = pd.read_csv('/content/drive/MyDrive/KDT-1/머신러닝과 딥러닝/temps.csv',encoding='CP949')
temp_df = temp_df.dropna()
temp_df.info()
2. 필요한 데이터 뽑아오기
x_data = torch.FloatTensor(temp_df[['기온(°C)']].values)
y_data = torch.FloatTensor(temp_df[['지면온도(°C)']].values)
print(x_data)
print(y_data)

주의점 밑에로 뽑아오면 독립변수가 다항으로된다. (모양확인 필수)
# 이거아님 !!!!!🔴
x_data = torch.FloatTensor([temp_df['기온(°C)'].values])
y_data = torch.FloatTensor([temp_df['지면온도(°C)'].values])
print(x_data)
print(y_data)

3. 독립변수와 종속변수 시각화
plt.figure(figsize=(10,8))
plt.scatter(x_data,y_data)

4. 모델 기초설정 및 학습시키기
model = nn.Linear(1,1)
print(list(model.parameters()))
optimizer = optim.SGD(model.parameters(),lr=0.001)
epochs = 1000
for epoch in range(epochs+1):
y_pred = model(x_data)
loss = nn.MSELoss()(y_pred,y_data)
optimizer.zero_grad() #초기화
loss.backward() # 미분
optimizer.step() #업데이트
if epoch % 100 == 0:
print(f'Epoch{epoch}/{epochs} // Loss{loss:.6f}')

5. 예측 데이터 확인
역전파가 안되게 detach().numpy()를 적용
✔️detach()
✔️numpy() : 텐서 객체를 numpy 배열로 변경해준다.
y_pred = model(x_data).detach().numpy()
y_pred
728x90
'파이썬 > 머신러닝 및 딥러닝' 카테고리의 다른 글
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 |
Python(Colab) KMeans + 실루엣 기법 / 클러스터링 (0) | 2023.06.18 |