GM、BP、LSTM时间推测推测代码

[复制链接]
发表于 2025-12-19 21:26:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
GM
  1. clc; clear; close all;
  2. %% 数据加载和预处理
  3. [file, path] = uigetfile('*.xlsx', 'Select the Excel file');
  4. filename = fullfile(path, file);
  5. time_series = xlsread(filename);
  6. % 确保数据是一列
  7. time_series = time_series(:);
  8. % 归一化数据
  9. min_val = min(time_series);
  10. max_val = max(time_series);
  11. normalized_data = (time_series - min_val) / (max_val - min_val);
  12. % 训练/测试集划分
  13. train_ratio = 0.8;
  14. n = length(normalized_data);
  15. M = floor(n * train_ratio);
  16. train_data = normalized_data(1:M);
  17. test_data = normalized_data(M+1:end);
  18. %% 构建 GM(1,1) 模型并预测
  19. % 1. 原始序列
  20. X0 = train_data(:); % 确保为列向量
  21. % 2. 累加生成序列(AGO)
  22. X1 = cumsum(X0);
  23. % 3. 构造数据矩阵并计算参数
  24. B = [-0.5 * (X1(1:end-1) + X1(2:end)), ones(M-1, 1)];
  25. Y = X0(2:end);
  26. U = (B \ Y); % 参数 a 和 b
  27. a = U(1); % 模型参数 a
  28. b = U(2); % 模型参数 b
  29. % 4. 预测公式
  30. X1_pred = zeros(M, 1);
  31. X1_pred(1) = X0(1); % 初值
  32. for k = 2:M
  33.     X1_pred(k) = (X0(1) - b/a) * exp(-a * (k-1)) + b/a;
  34. end
  35. % 还原到原始序列
  36. X0_pred = [X1_pred(1); diff(X1_pred)];
  37. % 对测试集进行预测
  38. N = length(test_data);
  39. X_test_pred = zeros(N, 1);
  40. X_test_pred(1) = X0_pred(end); % 使用最后一个训练值初始化
  41. for k = 2:N
  42.     X_test_pred(k) = (X_test_pred(1) - b/a) * exp(-a * (M + k - 2)) + b/a;
  43. end
  44. %% 反归一化数据
  45. T_train = train_data * (max_val - min_val) + min_val; % 真实训练集
  46. T_test = test_data * (max_val - min_val) + min_val;   % 真实测试集
  47. T_train_pred = X0_pred * (max_val - min_val) + min_val; % 训练预测值
  48. T_test_pred = X_test_pred * (max_val - min_val) + min_val; % 测试预测值
  49. %% 性能评估
  50. % R² (决定系数)
  51. R1 = 1 - norm(T_train - T_train_pred)^2 / norm(T_train - mean(T_train))^2;
  52. R2 = 1 - norm(T_test - T_test_pred)^2 / norm(T_test - mean(T_test))^2;
  53. % MAE (平均绝对误差)
  54. mae1 = mean(abs(T_train - T_train_pred));
  55. mae2 = mean(abs(T_test - T_test_pred));
  56. % MAPE (平均相对误差)
  57. mape1 = mean(abs((T_train - T_train_pred) ./ T_train));
  58. mape2 = mean(abs((T_test - T_test_pred) ./ T_test));
  59. % MBE (平均偏差误差)
  60. mbe1 = mean(T_train - T_train_pred);  % 训练集 MBE
  61. mbe2 = mean(T_test - T_test_pred);    % 测试集 MBE
  62. % MSE (均方误差)
  63. mse1 = mean((T_train - T_train_pred).^2);  % 训练集 MSE
  64. mse2 = mean((T_test - T_test_pred).^2);    % 测试集 MSE
  65. % 显示性能指标
  66. disp(['训练集 R²: ', num2str(R1)]);
  67. disp(['测试集 R²: ', num2str(R2)]);
  68. disp(['训练集 MAE: ', num2str(mae1)]);
  69. disp(['测试集 MAE: ', num2str(mae2)]);
  70. disp(['训练集 MAPE: ', num2str(m
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表