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
import skfuzzy as fuzz

# 成分数据矩阵
data = np.array([[0.758, 0.171, 0.049, 0.022],
                 [0.758, 0.172, 0.047, 0.023],
                 [0.762, 0.17, 0.047, 0.021],
                 [0.762, 0.17, 0.047, 0.021],
                 [0.76, 0.171, 0.047, 0.021],
                 [0.762, 0.166, 0.051, 0.021],
                 [0.761, 0.171, 0.048, 0.02],
                 [0.757, 0.175, 0.049, 0.019],
                 [0.747, 0.182, 0.052, 0.019],
                 [0.75, 0.174, 0.057, 0.019],
                 [0.746, 0.175, 0.061, 0.018],
                 [0.747, 0.18, 0.055, 0.018],
                 [0.715, 0.204, 0.062, 0.017],
                 [0.696, 0.215, 0.067, 0.022],
                 [0.68, 0.232, 0.066, 0.022],
                 [0.661, 0.246, 0.068, 0.025],
                 [0.653, 0.243, 0.077, 0.027],
                 [0.661, 0.234, 0.078, 0.027],
                 [0.702, 0.201, 0.074, 0.023],
                 [0.702, 0.199, 0.076, 0.023],
                 [0.724, 0.178, 0.074, 0.024],
                 [0.724, 0.175, 0.074, 0.027],
                 [0.725, 0.17, 0.075, 0.03],
                 [0.715, 0.167, 0.084, 0.034],
                 [0.716, 0.164, 0.085, 0.035],
                 [0.692, 0.174, 0.094, 0.04],
                 [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]])

# 使用LCC方法转换为特征矩阵
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'])

# 目标变量 (使用第二列作为目标变量)
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.13, random_state=42)

class TSK_FS():
    # ... (代码与之前相同,使用单引号)

# 创建TSK模型对象
model = TSK_FS(n_cluster=20, C=0.1)

# 拟合模型
model.fit(X_train, y_train)

# ... (预测和评估代码与之前相同,使用单引号)

代码解读

这段代码使用Python实现了一个基于TSK模糊系统和LCC方法的能源预测模型。

1. 数据预处理:

  • 使用LCC方法将原始数据转换为特征矩阵,捕捉能源消耗的变化趋势。
  • 使用MinMaxScaler对特征数据进行归一化,消除不同特征之间量纲的影响。
  • 将数据集划分为训练集和测试集,用于模型训练和评估。

2. TSK模糊系统:

  • 使用skfuzzy库实现TSK模糊系统,该系统能够处理非线性关系,并提供可解释的规则。
  • 通过FCM算法确定模糊规则的数量和中心,并计算每个特征的方差。
  • 使用高斯函数计算每个样本属于不同模糊规则的隶属度,并构建模糊特征矩阵。
  • 使用最小二乘法训练TSK模型的参数,最小化预测值与真实值之间的误差。

3. 模型预测和评估:

  • 使用训练好的TSK模型对测试集进行预测,并计算预测误差指标,如RMSE和MAPE。
  • 根据历史数据和模型预测未来十年的能源消耗趋势,并计算95%的置信区间,用于评估预测结果的不确定性。

总结

该代码提供了一个完整的能源预测模型,并包含详细的代码注释和解释。通过调整模型参数和使用更多的数据,可以进一步提高模型的预测精度。

基于TSK模糊系统和LCC方法的能源预测模型

原文地址: http://www.cveoy.top/t/topic/bcHX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录