✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
一种基于CNN和SVM的股价预测方法.包括采集多源数据,通过多源数据提取股价因子,将提取出来的股价因子样本数据进行量化处理,对股价因子进行评价筛选,构建股价波动模型,先利用卷积神经网络CNN对历史股价数据进行特征提取,再利用支持向量机SVM对提取出的特征进行易发性预测,对股价波动模型进行精度评价,输出最终的股价预测图.
⛄ 部分代码
% 支持向量机用于收盘价预测,首先是未优化的,其次是优化后的
%% 清空环境
tic;clc;clear;close all;format compact
%% 加载数据
data=xlsread('EUA五分钟.xlsx','G2:G30763');
save data data
load data
% 归一化
[a,inputns]=mapminmax(data',0,1);%归一化函数要求输入为行向量
data_trans=data_process(5,a);%% 对时间序列预测建立滚动序列,即用1到m个数据预测第m+1个数据,然后用2到m+1个数据预测第m+2个数据
input=data_trans(:,1:end-1);
output=data_trans(:,end);
%% 数据集 前75%训练 后25%预测
m=round(size(data_trans,1)*0.75);
Pn_train=input(1:m,:);
Tn_train=output(1:m,:);
Pn_test=input(m+1:end,:);
Tn_test=output(m+1:end,:);
%% 1.没有优化的SVM
bestc=0.001;bestg=10;%c和g随机赋值 表示没有优化的SVM
t=0;%t=0为线性核函数,1-多项式。2rbf核函数
cmd = ['-s 3 -t ',num2str(t),' -c ', num2str(bestc),' -g ',num2str(bestg),' -p 0.01 -d 1'];
figure
plot(predict0,'r-')
hold on;grid on
plot(T_test,'b-')
xlabel('样本编号')
ylabel('收盘价/元')
if t==0
title('线性核SVM预测')
elseif t==1
title('多项式核SVM预测')
else
title('RBF核SVM预测')
end
legend('实际输出','期望输出')
figure
error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差
plot(error_svm,'r-*')
xlabel('样本编号')
ylabel('收盘价相对误差/%')
if t==0
title('线性核SVM预测的误差')
elseif t==1
title('多项式核SVM预测的误差')
else
title('RBF核SVM预测的误差')
end
grid on
error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差
plot(error_svm,'r-*')
xlabel('样本编号')
ylabel('收盘价相对误差/%')
if t==0
title('线性核SVM预测的误差')
elseif t==1
title('多项式核SVM预测的误差')
else
title('RBF核SVM预测的误差')
end
grid on
error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差
plot(error_svm,'r-*')
xlabel('样本编号')
ylabel('收盘价相对误差/%')
if t==0
title('线性核SVM预测的误差')
elseif t==1
title('多项式核SVM预测的误差')
else
title('RBF核SVM预测的误差')
end
grid on
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img4.png') %即可得到对应格式和期望dpi的图像
figure
error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差
plot(error_svm,'r-*')
xlabel('样本编号')
ylabel('收盘价相对误差/%')
if t==0
title('线性核SVM预测的误差')
elseif t==1
title('多项式核SVM预测的误差')
disp('优化前的均方误差')
mse_svm=mse(predict0-T_test)
disp('优化前的平均相对误差')
mre_svm=sum(abs(predict0-T_test)./T_test)/length(T_test)
disp('优化前的平均绝对误差')
abs_svm=mean(abs(predict0-T_test))
disp('优化前的归一化均方误差')
a=sum((predict0-T_test).^2)/length(T_test);
b=sum((predict0-mean(predict0)).^2)/(length(T_test)-1);
one_svm=a/b
toc %结束计时
⛄ 运行结果
⛄ 参考文献
[1]杨培. 基于支持向量机的金融时序数据预测算法研究[D]. 合肥工业大学, 2013.
[2]马永杰, 马芸婷, and 陈佳辉. "结合卷积神经网络多层特征和支持向量机的车辆识别." 激光与光电子学进展 56.14(2019):7.
[3]王毅, and 方志策. "一种基于CNN和SVM的洪水灾害易发性预测方法.", CN111079999A. 2020.