时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测
目录
- 时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测
- 预测效果
- 基本介绍
- 研究回顾
- 程序设计
- 参考资料
预测效果
基本介绍
CNN-SVM预测模型将深度学习模型作为特征学习器,将SVM 支持向量机 作为训练器进行回归预测。在深度学习模型中,卷积神经网络模型的卷积层和池化层具有强大的计算能力,能够降低图像在平移过程中的损失率,从而特征向量的影响会大大减少,经过不同的卷积层和池化层,可以有效地控制模型的拟合能力从而降低了拟合过程中特征向量的维数。
研究回顾
- SVM 支持向量机基于核函数思想,将非线性映射作为理论基础映射高维空间,由非线性转变为线性可分,再以最大化分类间隔为目标寻找最优分类超平面(分类函数)。本次CNN 与SVM 模型结合,主要利用SVM 的hinge loss 形式的损失函数。
- 本次构建的CNN-SVM 卷积支持向量机多输入单输出回归预测模型以卷积神经网络结构为基础,建立完整的CNN 模型。通过训练数据获取卷积层权重参数,然后将卷积层输出结果作为SVM 输入特征向量进行训练,最后进行预测。
- CNN 模型不需要复杂的预处理,可以从输入的信息中自动进行特征挖掘和提取,随着网络不断向后传递,由浅到深对特征进行融合。
- 支持向量机(SVM)适用于处理非线性的小样本数据,通过输入融合值,将二维输入空间映射到高维空间,在高维空间中构造一个最优决策函数从而处理在二维空间中的预测回归问题。
程序设计
- 完整程序和数据获取方式1:私信博主,同等价值程序兑换。
- 完整程序和数据获取方式2:订阅《组合优化》专栏,订阅后私信博主获取。
% 归一化
[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,:);
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'];
model = svmtrain(Tn_train,Pn_train,cmd);%训练
[predict,~]= svmpredict(Tn_test,Pn_test,model);%测试
% 反归一化,为后面的结果计算做准备
predict0=mapminmax('reverse',predict',inputns);%测试实际输出反归一化
T_test=mapminmax('reverse',Tn_test',inputns);%测试集期望输出反归一化
T_train=mapminmax('reverse',Tn_train',inputns);%训练集期望输出反归一化
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/126378086?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/126358211?spm=1001.2014.3001.5501