成分数据预测:基于TSK模糊推理模型的预测与去模糊化
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, r2_score
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
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.569, 0.188, 0.159, 0.084],
[0.562, 0.179, 0.175, 0.084]])
# BASE转化
base_matrix = np.zeros((len(data)-1, len(data[0])-1))
for i in range(len(data)-1):
base_matrix[i] = np.log(data[i+1, :-1] / data[i, :-1])
df_base = pd.DataFrame(base_matrix, columns=['Coal', 'Petroleum', 'Others'])
target = data[1:, -1] # 使用最后一列作为目标变量
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df_base)
X_train, X_test, y_train, y_test = train_test_split(df_scaled, target, test_size=0.13, random_state=42)
model = TSK_FS(n_cluster=20, C=0.1)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
crmse = np.sqrt(mean_squared_error(y_test, y_pred))
cmape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
print('CRMSE:', crmse)
print('CMAPE:', cmape)
# 去模糊化示例
from skfuzzy import defuzz
# 假设模糊输出为y_pred_fuzzy,模糊集的x坐标为x_coords
# 根据模糊输出和坐标计算去模糊化结果
y_pred_defuzz = defuzz(x_coords, y_pred_fuzzy, 'centroid')
print('Defuzzified result:', y_pred_defuzz)
本代码使用TSK_FS模糊推理模型对成分数据进行预测,并计算预测结果的均方根误差(CRMSE)和平均绝对百分比误差(CMAPE)。同时,提供了示例代码展示如何使用skfuzzy模块的defuzz函数进行模糊输出的去模糊化处理。
代码详解:
- 导入库: 导入必要的库,包括NumPy、Pandas、Scikit-learn等。
- 数据准备: 定义成分数据矩阵,并进行BASE转化,将数据转换为合适的格式用于建模。
- 模型训练: 使用TSK_FS模型进行训练,并对测试集进行预测。
- 评估指标: 计算预测结果的CRMSE和CMAPE,评估模型性能。
- 去模糊化: 使用skfuzzy模块的defuzz函数对模糊输出进行去模糊化处理。
去模糊化示例:
在去模糊化示例中,x_coords表示模糊集的x坐标,y_pred_fuzzy表示模糊输出。defuzz函数使用centroid方法进行去模糊化,并将结果存储在y_pred_defuzz中。
注意: 具体的去模糊化方法会根据您使用的模糊推理模型和模糊集合的设计而有所不同。您可以根据实际情况选择合适的去模糊化方法,并根据需要进行相应的调整。
原文地址: https://www.cveoy.top/t/topic/RV9 著作权归作者所有。请勿转载和采集!