Python灰色预测模型:能源消费结构预测与评估
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
def grey_model(X):
n = len(X)
X1 = np.cumsum(X)
Z = np.zeros(n - 1)
for i in range(1, n):
Z[i - 1] = -0.5 * (X1[i] + X1[i - 1])
B = np.vstack((np.ones(n - 1), -0.5 * np.ones(n - 1))).T
Y = X[1:]
a, b = np.linalg.lstsq(B, Y, rcond=None)[0]
X_pred = np.zeros(n)
X_pred[0] = X[0]
for i in range(1, n):
X_pred[i] = (X_pred[i - 1] - b / a) * np.exp(-a) + b / a
return X_pred
# 成分数据矩阵
# 数据说明:灰色模型适用于短期预测,因此我们选取2012-2018年的数据作为训练集,
# 2019-2022年的数据作为测试集,用于评估模型的预测性能。
data = np.array([
[0.702, 0.168, 0.084, 0.046],
[0.685, 0.17, 0.097, 0.048],
[0.674, 0.171, 0.102, 0.053],
[0.658, 0.173, 0.113, 0.056],
[0.638, 0.184, 0.12, 0.058],
[0.622, 0.187, 0.13, 0.061],
[0.606, 0.189, 0.136, 0.069],
[0.59, 0.189, 0.145, 0.076],
[0.577, 0.19, 0.153, 0.08],
[0.569, 0.188, 0.159, 0.084],
[0.559, 0.186, 0.167, 0.088],
[0.562, 0.179, 0.175, 0.084]
])
# 转换为特征矩阵
feature_matrix = np.zeros((len(data) - 1, len(data[0])))
for i in range(len(data) - 1):
feature_matrix[i] = data[i + 1] - data[i]
# 构建特征矩阵的DataFrame
df = pd.DataFrame(feature_matrix, columns=['Coal', 'Petroleum', 'Others', 'Gas'])
# 目标变量 (这里选择第二列'Petroleum'作为目标变量)
target = data[1:, 1]
# 数据归一化
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
df_scaled, target, test_size=0.4, random_state=42
)
# 在训练集上拟合模型
y_pred_train = grey_model(y_train)
# 创建与训练集目标变量相同大小的预测结果数组
y_pred_train_cumsum = np.zeros_like(y_train)
# 在训练集上进行累加计算
y_pred_train_cumsum[0] = y_train[0]
for i in range(1, len(y_train)):
y_pred_train_cumsum[i] = y_pred_train_cumsum[i - 1] + y_pred_train[i]
# 在测试集上进行预测
y_pred_test = grey_model(y_test)
# 创建与测试集目标变量相同大小的预测结果数组
y_pred_test_cumsum = np.zeros_like(y_test)
# 在测试集上进行累加计算
y_pred_test_cumsum[0] = y_test[0]
for i in range(1, len(y_test)):
y_pred_test_cumsum[i] = y_pred_test_cumsum[i - 1] + y_pred_test[i]
# 计算CRMSE和CMAPE
crmse = np.sqrt(mean_squared_error(y_test, y_pred_test_cumsum))
cmape = np.mean(np.abs((y_test - y_pred_test_cumsum) / y_test)) * 100
print('CRMSE:', crmse)
print('CMAPE:', cmape)
这段代码展示了如何使用Python构建灰色预测模型,并将其应用于能源消费结构预测。
代码解释:
- 导入必要的库: 包括NumPy用于数值计算,Pandas用于数据处理,MinMaxScaler用于数据归一化,train_test_split用于划分训练集和测试集,mean_squared_error用于计算均方误差。
- 定义
grey_model函数: 该函数实现了灰色预测模型的核心算法。 - 准备数据: 包括加载数据、数据预处理(转换为特征矩阵、数据归一化)、划分训练集和测试集等步骤。
- 模型训练: 在训练集上拟合灰色预测模型。
- 模型预测: 使用训练好的模型对测试集进行预测。
- 模型评估: 使用CRMSE和CMAPE指标评估模型的预测精度。
关键词解释:
- 灰色预测模型: 一种基于数据序列自身信息进行预测的模型,适用于数据量较少、信息不完全的情况。
- CRMSE (Root Mean Squared Error): 均方根误差,用于衡量预测值与真实值之间的偏差。
- CMAPE (Mean Absolute Percentage Error): 平均绝对百分比误差,用于衡量预测值与真实值之间的相对偏差。
希望这段代码和解释能够帮助你理解如何使用Python构建灰色预测模型,并将其应用于能源消费结构预测。
原文地址: https://www.cveoy.top/t/topic/oag 著作权归作者所有。请勿转载和采集!