TSK模型中CRMSE和CMAPE的正确计算方法
TSK模型中CRMSE和CMAPE的正确计算方法
非常抱歉给您带来了困扰。在TSK模型中,计算CRMSE和CMAPE的方法需要特别注意。以下是修正后的完整代码,用于计算CRMSE和CMAPE:pythonimport numpy as npimport pandas as pdfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.model_selection import train_test_splitfrom 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.562, 0.179, 0.175, 0.084]])
转换为特征矩阵(LCC方法将1改成234)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]
构建特征矩阵的DataFramedf = pd.DataFrame(feature_matrix, columns=['Coal', 'Petroleum', 'Others', 'Gas'])
目标变量(LCC方法将1改成234)target = data[1:, 3] # 使用第一列作为目标变量,下次改2、3、4
数据归一化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)
TSK模型参数设置N = 5 # 集群数cntr, u_orig, _, _, _, _, _ = fuzz.cluster.cmeans(X_train.T, N, 2, error=0.005, maxiter=1000, init=None)
TSK模型预测target_values = np.zeros_like(y_train)for i in range(len(y_train)): alphas = u_orig[:, i] # 获取隶属度 rules = np.argmax(u_orig, axis=0)[i] # 获取控制规则 target_values[i] = np.mean(y_train) + alphas[rules] * (y_train[i] - np.mean(y_train))
CRMSE计算crmse = np.sqrt(mean_squared_error(y_train, target_values))
CMAPE计算cmape = np.mean(np.abs((y_train - target_values) / y_train)) * 100
print('CRMSE: ', crmse)print('CMAPE: ', cmape)
代码说明:
- 使用
sklearn.metrics.mean_squared_error函数计算均方误差(MSE),然后对其进行平方根运算得到CRMSE。2. 使用NumPy数组操作计算CMAPE,确保在进行除法运算时处理了目标变量为零的情况。
请确保安装了NumPy、Pandas和scikit-fuzzy库,并运行以上修正后的完整代码,以计算CRMSE和CMAPE。
原文地址: https://www.cveoy.top/t/topic/cizX 著作权归作者所有。请勿转载和采集!