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.pipeline import Pipeline
from sklearn.decomposition import PCA
import skfuzzy as fuzz
from skfuzzy import control as ctrl

# 成分数据矩阵
data = np.array([[0.758, 0.171, 0.049, 0.022],
                 [0.758, 0.172, 0.047, 0.023],
                 ...
                 [0.559, 0.186, 0.167, 0.088],
                 [0.562, 0.179, 0.175, 0.084]])

drht_matrix = np.zeros((len(data)-1, len(data[0])-1))
for i in range(len(data)-1):
    drht_matrix[i] = data[i+1, :-1] - data[i, :-1]

df = pd.DataFrame(drht_matrix, columns=['Coal', 'Petroleum', 'Others'])
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)

# 定义模糊控制变量
input_var = [ctrl.Antecedent(np.arange(0, 1, 0.1), 'Coal'),
             ctrl.Antecedent(np.arange(0, 1, 0.1), 'Petroleum'),
             ctrl.Antecedent(np.arange(0, 1, 0.1), 'Others')]
output_var = ctrl.Consequent(np.arange(0, 1, 0.1), 'Next_Value')

# 设定隶属度函数
for var in input_var:
    var.automf(3)

output_var.automf(3)

# 设定规则
rules = [
    ctrl.Rule(input_var[0]['poor'] | input_var[1]['poor'] | input_var[2]['poor'], output_var['poor']),
    ctrl.Rule(input_var[0]['average'] | input_var[1]['average'] | input_var[2]['average'], output_var['average']),
    ctrl.Rule(input_var[0]['good'] | input_var[1]['good'] | input_var[2]['good'], output_var['good'])
]

# 构建模糊控制系统
system = ctrl.ControlSystem(rules)
model = ctrl.ControlSystemSimulation(system)

# 模糊推理与训练模型
for i in range(len(X_train)):
    model.input['Coal'] = X_train[i][0]
    model.input['Petroleum'] = X_train[i][1]
    model.input['Others'] = X_train[i][2]
    model.compute()

    y_pred = model.output['Next_Value']
    y_train[i] = y_pred

# 模型评估
crmse = np.sqrt(mean_squared_error(y_test, y_train))
cmape = np.mean(np.abs((y_test - y_train) / y_test)) * 100

print('CRMSE:', crmse)
print('CMAPE:', cmape)

这个修改后的代码使用模糊推理和控制系统来训练模型,并对其进行评估。请注意,此处的输出变量设置为 'Next_Value',您可以根据您的需求调整变量名称。另外,模糊控制系统的规则设置可以根据您的数据和问题进行调整。


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

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