작성
·
7.6K
0
안녕하세요.
RNN, LSTM, GRU 파트 집중적으로 공부하고 있습니다.
수치의 단위를 맞추기 위해 MinMaxScaler를 사용하여 0~1사이의 값으로 보이는 결과 그래프까지 확인 하였습니다.
다만, 주가예측도, 주택가격도 예측을 하려면 다시 원상복구를 해서 원래 단위로 바꿔서 그래프화를 하고 싶은데,
혹시 방법을 알 수 있을까요?
답변 1
0
안녕하세요 :)
복원 하고 싶다면 sklearn에서 제공하는 inverse_transform를 사용할 수 있는데 우리가 스케일링을 scaler로 정의 했기 때문에 y_rescale = scaler.inverse_transform(예측값) 을 이용하시면 스케일링 했던 기준으로 다시 역산을 해서 값을 제공합니다.
먼저 스케일링을 피쳐와 타겟을 둘로 나눠서 하셔야 합니다.
scaler = MinMaxScaler()
df[['Open','High','Low','Volume']] = scaler.fit_transform(df[['Open','High','Low','Volume']])
scaler1 = MinMaxScaler()
df['Close'] = scaler1.fit_transform(df['Close'].values.reshape(-1,1))
스케일링을 둘로 나눠서 하신 후 학습을 하시고 그래프를 그리시기 전에 아래 코드를 추가하시면 됩니다.
rescaled_actual = scaler1.inverse_transform(df['Close'][sequence_length:].values.reshape(-1,1))
rescaled_pred = scaler1.inverse_transform(np.array(pred).reshape(-1,1))
그리고 그래프 그리는 부분에 두 변수를 넣어 주시면 됩니다.
concatdata = torch.utils.data.ConcatDataset([train, test])
data_loader = torch.utils.data.DataLoader(dataset=concatdata, batch_size=100, shuffle=False)
with torch.no_grad():
pred = []
for data in data_loader:
seq, target = data
out = model(seq)
pred += out.cpu().numpy().tolist()
plt.figure(figsize=(20,10))
plt.plot(np.ones(100)*len(train),np.linspace(0,1,100),'--', linewidth=0.6)
plt.plot(rescaled_actual,'--')
plt.plot(rescaled_pred,'b', linewidth=0.6)
plt.ylim(1200,2600)
plt.legend(['train boundary','actual','prediction'])
plt.show()
열공하세요 :)