1.  파일 불러오기

import pandas as pd
temp_df = pd.read_csv('/content/drive/MyDrive/KDT v2/머신러닝과 딥러닝/ data/temps.csv', encoding='euc-kr')
temp_df

한글이 들어가있어서 UTF-8에러가 발생함. encoding방식을 euc-kr로 변경하여 오류 없이 불러옴.

 

2.  null값 확인

df.isna().sum()

# 결과값 => 
# 지점          0
# 지점명         0
# 일시          0
# 기온(°C)      3
# 지면온도(°C)    0

 

3.  null값 제거

df.dropna(inplace=True)

 

4.  x_data에 기온데이터 저장, y_data에 지면온도 데이터 저장

x_data = df[['기온(°C)']]
y_data = df[['지면온도(°C)']]

x_data = torch.FloatTensor(x_data.values)
y_data = torch.FloatTensor(y_data.values)

print(x_data.shape)
print(y_data.shape)

# 결과값 => 
# torch.Size([8779, 1])
# torch.Size([8779, 1])

 

5.  scatter로 x_data, y_data 출력

plt.figure(figsize=(8, 6))
plt.scatter(x_data, y_data)

6.  입력과 출력이 1개인 선형모델 생성 및 SGD를 이용하여 옵티마이저 객체를 생성

model = nn.Linear(1, 1)

optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
print(list(model.parameters()))

# 출력값 => 
# [Parameter containing:
# tensor([[-0.6530]], requires_grad=True), Parameter containing:
# tensor([0.4092], requires_grad=True)]

 

7.  모델 학습 + 오차함수는 MSELoss()함수를 사용

epochs = 5000

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}')

 

8.  학습된 파라미터 확인

print(list(model.parameters()))

# 결과값 => 
# [Parameter containing:
# tensor([[1.0857]], requires_grad=True), Parameter containing:
# tensor([0.8143], requires_grad=True)]

 

9.  scatter로 x_data, y_data를 출력 후 예측된 선을 출력

# detach() : 텐서에서 다른 자료구조로 변환할 수 있는 함수

y_pred = model(x_data).detach().numpy()

plt.figure(figsize=(8, 6))
plt.scatter(x_data, y_data)
plt.scatter(x_data, y_pred)

주황선 : 예측선, 파란색 : 예측값