使用SVM神经网络对上证开盘指数进行回归预测分析

使用SVM神经网络对上证开盘指数进行回归预测分析

数据准备与预处理

% 载入数据,这里假设数据存储在chapter14_sh.mat文件中
load chapter14_sh.mat; % 数据是一个4579*6的double型矩阵,每行表示一天的上证指数
% 6列分别表示开盘指数、最高值、最低值、收盘指数、交易量、交易额

% 提取开盘指数数据
ts = sh(2:end, 1); % 从第二天开始的开盘指数
tsx = sh(1:end-1, :); % 从第一天开始的其他数据作为特征

% 数据归一化
[TS, TSps] = mapminmax(ts); % 对开盘指数进行归一化
[TSX, TSXps] = mapminmax(tsx); % 对特征数据进行归一化

选择最佳SVM参数

% 粗略选择最佳参数
[bestmse, bestc, bestg] = SVMcgForRegress(TS, TSX, -8, 8, -8, 8);
disp('打印粗略选择结果');
str = sprintf('Best Cross Validation MSE = %g Best c = %g Best g = %g', bestmse, bestc, bestg);
disp(str);

% 精细选择最佳参数
[bestmse, bestc, bestg] = SVMcgForRegress(TS, TSX, -4, 4, -4, 4, 3, 0.5, 0.5, 0.05);
disp('打印精细选择结果');
str = sprintf('Best Cross Validation MSE = %g Best c = %g Best g = %g', bestmse, bestc, bestg);
disp(str);

SVM模型训练与预测

% 利用最佳参数训练SVM模型
cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg), ' -s 3 -p 0.01'];
model = svmtrain(TS, TSX, cmd);

% 进行预测
[predict, mse, predict_values] = svmpredict(TS, TSX, model);
predict = mapminmax('reverse', predict', TSps);
predict = predict';

结果分析与可视化

% 打印回归结果
str = sprintf('均方误差 MSE = %g 相关系数 R = %g%%', mse(2), mse(3) * 100);
disp(str);

% 绘制原始数据与预测数据对比图
figure;
subplot(3, 1, 1);
hold on;
plot(ts, '-o');
plot(predict, 'r-^');
legend('原始数据', '回归预测数据');
title('原始数据和回归预测数据对比', 'FontSize', 12);
xlabel('交易日天数(1990.12.19-2009.08.19)', 'FontSize', 12);
ylabel('开盘数', 'FontSize', 12);
grid on;

% 绘制误差图
subplot(3, 1, 2);
hold on;
error = predict - ts';
plot(error, 'rd');
title('误差图(predicted data - original data)', 'FontSize', 12);
xlabel('交易日天数(1990.12.19-2009.08.19)', 'FontSize', 12);
ylabel('误差量', 'FontSize', 12);
grid on;

% 绘制相对误差图
subplot(3, 1, 3);
hold on;
error = (predict - ts') ./ ts';
plot(error, 'rd');
title('相对误差图(predicted data - original data)/original data', 'FontSize', 12);
xlabel('交易日天数(1990.12.19-2009.08.19)', 'FontSize', 12);
ylabel('相对误差量', 'FontSize', 12);
grid on;

参考代码 使用SVM神经网络对上证开盘指数进行回归预测分析 https://www.codedown123.com/100553.html

事项

  1. 数据预处理:在实际应用中,需要对数据进行清洗、去除异常值、填补缺失值等操作,以提高模型的预测性能。
  2. 参数选择:SVM的参数选择对模型性能影响较大,需要通过交叉验证等方法进行精细调整。
  3. 模型评估:通过均方误差(MSE)、平均绝对误差(MAE)、决定系数(R²)等指标对模型进行评估。

专注于matlab/simulink,电子电路,编程