• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

MinMaxScaler 수치 원상복구 방법 문의

21.06.02 12:19 작성 조회수 6.98k

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() 

열공하세요 :)