在回归任务中绘制多维真实和预测数组
Plotting multi-dimensional true and predicted arrays in a regression task
在使用 LSTM(单变量 LSTM)预测未来 1 小时电力负荷的回归任务中,结果可以很容易地绘制成如下所示:
plt.plot(y_ts, label='True Future', color='blue')
plt.plot(y_pred, label='Forecast', color='red')
plt.show()
这是因为 y_ts
和 y_pred
都是一维的。现在,假设任务已更改为使用 LSTM 预测未来 6 小时的电力负荷。这意味着 y_ts
和 y_pred
现在将是二维的,例如 y_ts= (3454, 6)
和 y_pred= (3454, 6)
如何绘制高维数组的这种情况?
从根本上说,您的数据中只有一个维度,即时间;你有 6 个时间片 - 将它们相互附加,在相同的轴上绘制并分别标记每个小时是有意义的。
让我借助一些捏造的数据来解释一下:
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(42)
n, h = 3454, 6
y_ts, y_pred = np.random.randn(n, h).cumsum(), np.random.randn(n, h).cumsum()
y_ts = y_ts - np.min(y_ts)
y_pred = y_ts - (y_pred - np.min(y_pred)) / np.max(y_pred) * 0.05 * np.mean(y_ts)
y_ts = y_ts.reshape((n, h), order="F")
y_pred = y_pred.reshape((n, h), order="F")
单独绘制 y_ts(y_pred 也类似):
for i in range(h):
plt.plot(y_ts[:, i], label=f'y_ts_h{i+1}')
plt.legend()
plt.show()
现在,您可以整理数据并将其绘制为一维系列,如下所示:
y_ts = y_ts.reshape((n*h), order="F")
y_pred = y_pred.reshape((n*h), order="F")
plt.plot(y_ts, label=f'y_ts')
plt.plot(y_pred, label=f'y_pred')
for i in range(h):
plt.axvline(x=(n*(i+1)), c='m')
plt.xticks([(i+1)*n for i in range(h)], [f'hr_{i+1}' for i in range(h)])
plt.legend()
plt.show()
在使用 LSTM(单变量 LSTM)预测未来 1 小时电力负荷的回归任务中,结果可以很容易地绘制成如下所示:
plt.plot(y_ts, label='True Future', color='blue')
plt.plot(y_pred, label='Forecast', color='red')
plt.show()
这是因为 y_ts
和 y_pred
都是一维的。现在,假设任务已更改为使用 LSTM 预测未来 6 小时的电力负荷。这意味着 y_ts
和 y_pred
现在将是二维的,例如 y_ts= (3454, 6)
和 y_pred= (3454, 6)
如何绘制高维数组的这种情况?
从根本上说,您的数据中只有一个维度,即时间;你有 6 个时间片 - 将它们相互附加,在相同的轴上绘制并分别标记每个小时是有意义的。
让我借助一些捏造的数据来解释一下:
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(42)
n, h = 3454, 6
y_ts, y_pred = np.random.randn(n, h).cumsum(), np.random.randn(n, h).cumsum()
y_ts = y_ts - np.min(y_ts)
y_pred = y_ts - (y_pred - np.min(y_pred)) / np.max(y_pred) * 0.05 * np.mean(y_ts)
y_ts = y_ts.reshape((n, h), order="F")
y_pred = y_pred.reshape((n, h), order="F")
单独绘制 y_ts(y_pred 也类似):
for i in range(h):
plt.plot(y_ts[:, i], label=f'y_ts_h{i+1}')
plt.legend()
plt.show()
现在,您可以整理数据并将其绘制为一维系列,如下所示:
y_ts = y_ts.reshape((n*h), order="F")
y_pred = y_pred.reshape((n*h), order="F")
plt.plot(y_ts, label=f'y_ts')
plt.plot(y_pred, label=f'y_pred')
for i in range(h):
plt.axvline(x=(n*(i+1)), c='m')
plt.xticks([(i+1)*n for i in range(h)], [f'hr_{i+1}' for i in range(h)])
plt.legend()
plt.show()