|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
import math |
|
from metrics import MAE, MAPE, RMSE |
|
import csv |
|
|
|
|
|
def show_pred(all_y_true, all_predict_values, horizon): |
|
|
|
|
|
header = ['test_y', 'predicted_values'] |
|
ele_values = np.concatenate((all_y_true[:, 0, :1], all_predict_values[:, 0, :1]), axis=1) |
|
with open('./result/ele.csv', 'w', encoding='utf-8', newline='') as fp: |
|
|
|
writer = csv.writer(fp) |
|
|
|
writer.writerow(header) |
|
|
|
writer.writerows(ele_values) |
|
|
|
cooling_values = np.concatenate((all_y_true[:, 0, 1:2], all_predict_values[:, 0, 1:2]), axis=1) |
|
with open('./result/cooling.csv', 'w', encoding='utf-8', newline='') as fp: |
|
|
|
writer = csv.writer(fp) |
|
|
|
writer.writerow(header) |
|
|
|
writer.writerows(cooling_values) |
|
|
|
heating_values = np.concatenate((all_y_true[:, 0, 2:3], all_predict_values[:, 0, 2:3]), axis=1) |
|
with open('./result/heating.csv', 'w', encoding='utf-8', newline='') as fp: |
|
|
|
writer = csv.writer(fp) |
|
|
|
writer.writerow(header) |
|
|
|
writer.writerows(heating_values) |
|
|
|
mae1 = MAE(all_y_true[:, 0, :1], all_predict_values[:, 0, :1]) |
|
mape1 = MAPE(all_y_true[:, 0, :1], all_predict_values[:, 0, :1]) |
|
rmase1 = RMSE(all_y_true[:, 0, :1], all_predict_values[:, 0, :1]) |
|
predict = all_predict_values[:, 0, :1] |
|
Ytest = all_y_true[:, 0, :1] |
|
sigma_p = (predict).std(axis=0) |
|
sigma_g = (Ytest).std(axis=0) |
|
mean_p = predict.mean(axis=0) |
|
mean_g = Ytest.mean(axis=0) |
|
index = (sigma_g != 0) |
|
correlation = ((predict - mean_p) * (Ytest - mean_g)).mean(axis=0) / (sigma_p * sigma_g) |
|
correlation1 = (correlation[index]).mean() |
|
print("============电负荷===================") |
|
print("MAE = " + str(mae1)) |
|
print("MAPE = " + str(mape1)) |
|
print("RMSE = " + str(rmase1)) |
|
print("acc = " + str(correlation1)) |
|
print("============cooling==================") |
|
mae2 = MAE(all_y_true[:, 0, 1:2], all_predict_values[:, 0, 1:2]) |
|
mape2 = MAPE(all_y_true[:, 0, 1:2], all_predict_values[:, 0, 1:2]) |
|
rmase2 = RMSE(all_y_true[:, 0, 1:2], all_predict_values[:, 0, 1:2]) |
|
predict = all_predict_values[:, 0, 1:2] |
|
Ytest = all_y_true[:, 0, 1:2] |
|
sigma_p = (predict).std(axis=0) |
|
sigma_g = (Ytest).std(axis=0) |
|
mean_p = predict.mean(axis=0) |
|
mean_g = Ytest.mean(axis=0) |
|
index = (sigma_g != 0) |
|
correlation = ((predict - mean_p) * (Ytest - mean_g)).mean(axis=0) / (sigma_p * sigma_g) |
|
correlation2 = (correlation[index]).mean() |
|
print("MAE = " + str(mae2)) |
|
print("MAPE = " + str(mape2)) |
|
print("RMSE = " + str(rmase2)) |
|
print("acc = " + str(correlation2)) |
|
|
|
print("==============heating=================") |
|
mae3 = MAE(all_y_true[:, 0, 2:3], all_predict_values[:, 0, 2:3]) |
|
mape3 = MAPE(all_y_true[:, 0, 2:3], all_predict_values[:, 0, 2:3]) |
|
rmase3 = RMSE(all_y_true[:, 0, 2:3], all_predict_values[:, 0, 2:3]) |
|
|
|
predict = all_predict_values[:, 0, 2:3] |
|
Ytest = all_y_true[:, 0, 2:3] |
|
sigma_p = (predict).std(axis=0) |
|
sigma_g = (Ytest).std(axis=0) |
|
mean_p = predict.mean(axis=0) |
|
mean_g = Ytest.mean(axis=0) |
|
index = (sigma_g != 0) |
|
correlation = ((predict - mean_p) * (Ytest - mean_g)).mean(axis=0) / (sigma_p * sigma_g) |
|
correlation3 = (correlation[index]).mean() |
|
|
|
print("MAE = " + str(mae3)) |
|
print("MAPE = " + str(mape3)) |
|
print("RMSE = " + str(rmase3)) |
|
print("acc = " + str(correlation3)) |
|
|
|
with open('./result/data.txt', 'w') as f: |
|
print("============电负荷===================", file=f, flush=True) |
|
print("MAE = " + str(mae1), file=f, flush=True) |
|
print("MAPE = " + str(mape1), file=f, flush=True) |
|
print("RMSE = " + str(rmase1), file=f, flush=True) |
|
print("acc = " + str(correlation1), file=f, flush=True) |
|
print("============cooling==================", file=f, flush=True) |
|
print("MAE = " + str(mae2), file=f, flush=True) |
|
print("MAPE = " + str(mape2), file=f, flush=True) |
|
print("RMSE = " + str(rmase2), file=f, flush=True) |
|
print("acc = " + str(correlation2), file=f, flush=True) |
|
print("==============heating=================", file=f, flush=True) |
|
print("MAE = " + str(mae3), file=f, flush=True) |
|
print("MAPE = " + str(mape3), file=f, flush=True) |
|
print("RMSE = " + str(rmase3), file=f, flush=True) |
|
print("acc = " + str(correlation3), file=f, flush=True) |
|
|
|
node_id = 0 |
|
time = 24 * 31 |
|
plt.figure(figsize=(20, 10)) |
|
plt.title("electricity") |
|
plt.xlabel("time/one_hour") |
|
plt.ylabel("electricity") |
|
plt.plot(all_y_true[:time, 0, node_id], linewidth=6.0, label='true') |
|
plt.plot(all_predict_values[:time, 0, node_id], linewidth=1.0, label='pred') |
|
plt.legend() |
|
plt.savefig("./assets/the first month pred electricity.png") |
|
|
|
|
|
node_id = 1 |
|
time = 24 * 31 |
|
plt.figure(figsize=(20, 10)) |
|
plt.title("cooling") |
|
plt.xlabel("time/one_hour") |
|
plt.ylabel("electricity") |
|
plt.plot(all_y_true[:time, 0, node_id], linewidth=6.0, label='true') |
|
plt.plot(all_predict_values[:time, 0, node_id], linewidth=1.0, label='pred') |
|
plt.legend() |
|
plt.savefig("./assets/the first month pred cooling.png") |
|
|
|
|
|
node_id = 2 |
|
time = 24 * 31 |
|
plt.figure(figsize=(20, 10)) |
|
plt.title("heating") |
|
plt.xlabel("time/one_hour") |
|
plt.ylabel("heating") |
|
plt.plot(all_y_true[:time, 0, node_id], linewidth=6.0, label='true') |
|
plt.plot(all_predict_values[:time, 0, node_id], linewidth=1.0, label='pred') |
|
plt.legend() |
|
plt.savefig("./assets/the first month pred heating.png") |
|
|
|
|
|
mae = MAE(all_y_true, all_predict_values) |
|
rmse = RMSE(all_y_true, all_predict_values) |
|
mape = MAPE(all_y_true, all_predict_values) |
|
|
|
print("ST-GCN基于原始值的精度指标 mae: {:02.4f}, rmse: {:02.4f}, mape: {:02.4f}".format(mae, rmse, mape)) |
|
with open('./result/data.txt', 'w') as f: |
|
print("ST-GCN基于原始值的精度指标 mae: {:02.4f}, rmse: {:02.4f}, mape: {:02.4f}".format(mae, rmse, mape), file=f) |
|
|