• 正文
    • NO.1|CNN(卷积神经网络)的数学模型
    • NO.2|SVM(支持向量机)的数学模型
    • NO.3|CNN-SVM组合模型
  • 相关推荐
申请入驻 产业图谱

CNN-SVM时间序列预测/详细原理讲解

03/24 15:30
652
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

CNN-SVM(卷积神经网络-支持向量机)是一种将卷积神经网络(CNN)与支持向量机(SVM)组合起来的深度学习模型。CNN-SVM模型的目标是通过结合CNN的特征提取能力和SVM的分类能力来提升图像分类、模式识别等任务的性能。以下详细介绍这两种模型各自的数学原理及其组合后的工作原理。

NO.1|CNN(卷积神经网络)的数学模型

CNN是一种适用于图像处理和其他结构化数据的深度神经网络。其核心组成部分包括卷积层、池化层和全连接层。

1.1 卷积层的数学表示

卷积层的主要作用是从输入数据中提取特征。假设输入是一幅图像I,卷积核K大小为m×n,则卷积操作可以表示为:

其中,S(i,j)是卷积操作后的输出特征图上的像素值。通过滑动卷积核在图像上进行卷积操作,生成新的特征图。多个卷积核可以捕捉图像的不同特征,如边缘、纹理等。

1.2 池化层的数学表示

池化层 (Pooling)通常用来减少特征图的大小,从而减小计算量并增加模型的鲁棒性。最常见的池化操作是最大池化(Max Pooling),其数学表示为:

这里,P(i,j)是池化后的输出,池化窗口选取了输入特征图$S(i,j)$上的一个小块区域,通过最大值或平均值等方式进行降维。

1.3 全连接层

全连接层将来自卷积和池化后的特征展平为向量,并通过权重矩阵W和偏置项b进行线性变换:

x是输入的展平特征向量,z是全连接层的输出。最后,这些输出通过激活函数(如ReLU或Softmax) 得到最终的分类结果。

NO.2|SVM(支持向量机)的数学模型

SVM是一种用于二分类问题的监督学习模型,其核心思想是通过找到一个最优的超平面来将不同类别的数据分开。对给定的训练数据  ,其中xi是输入向量,  表示类别标签。SVM试图找到一个超平面:

其中,w是权重向量,b是偏置项。为了找到最优的超平面,SVM的目标是最大化超平面到两类数据的最小距离,这转化为一个优化问题:

同时满足约束条件:

当数据不完全线性可分时,可以引入松弛变量$xi_{i}$ 来允许一些数据点被错误分类:

其中C是调节惩罚项的超参数。对于非线性可分问题,SWM诵过使用核函数将数据映的到高维空间,使其线性可分。常见的核函数有线性核、多项式核和RBF核。

NO.3|CNN-SVM组合模型

CNN-SVM模型结合了CNN的特征提取能力和SVW的强分类能力。其基本思路是使用CNN进行特征提取,然后将这些提取到的高维持征输入到SWM进行分类。与直接使用CNN的全连接层和Softmax分类器相比,SVM分类器能够更好地处理高维特征空间中的复杂分类问题。

3.1 CNN-SVM模型的结构

1. CNN部分:CNN首先处理输入数据(如图像),通过多层的卷积、池化操作提取出多尺度的特征表示。这些特征保留了图像的空间结构信息。

2. 渐征向量:在经过CNN的最后一层 (通常是展平后的特征图或全连接层),我们得到一个高维特征向量x。

3. SVM分类器:将CNN提取的特征向量输入到SWM模型中进行分类。SWM通过计算样本到超平面的距离来确定其所属类别。SVM部分可以用线性或核SVM,具体取决于数据的分布和复杂性。

3.2 CNN-SVM的数学表示

设  是CNN对输入图像$I$提取的特征向量。然后,我们使用SVM进行分类:

其中w和b是SVM模型的参数。SVM将学习如何在特征空间中找到一个超平面来区分不同类别的样本。

3.3 部分代码

%% 定义卷积神经网络结构cnn_architecture = [    imageInputLayer([size(scaled_train_input, 1) 1 1], "Name", "input_layer")
    convolution2dLayer([3, 1], 16, 'Padding', 'same')         % 3x1 卷积核,生成16个通道    batchNormalizationLayer                                   % 批量归一化    reluLayer                                                 % ReLU 激活层
    maxPooling2dLayer([2, 1], 'Stride', 1)                    % 最大池化层,步长为1    convolution2dLayer([2, 1], 32)                            % 2x1 卷积核,生成32个通道    batchNormalizationLayer                                   % 批量归一化    reluLayer                                                 % ReLU 激活层
    maxPooling2dLayer([2, 1], 'Stride', 1)                    % 第二层池化,步长为1
    fullyConnectedLayer(25)                                   % 全连接层,25个神经元    reluLayer                                                 % ReLU 激活层    fullyConnectedLayer(1)                                    % 输出层    regressionLayer                                           % 回归层用于计算损失];
%% 设置训练选项train_options = trainingOptions('adam', ...    'MaxEpochs', 150, ...    'GradientThreshold', 1, ...    'InitialLearnRate', 0.01, ...    'LearnRateSchedule', 'piecewise', ...    'LearnRateDropPeriod', 70, ...    'LearnRateDropFactor', 0.1, ...    'L2Regularization', 0.001, ...    'ExecutionEnvironment', 'cpu', ...    'Verbose', 1, ...    'Plots', 'none');
%% 训练CNN模型tictrained_cnn = trainNetwork(reshaped_input_train, target_train', cnn_architecture, train_options);toc
%% 提取CNN特征selected_layer_name = 'pool2';train_features = activations(trained_cnn, reshaped_input_train, selected_layer_name, 'OutputAs', 'rows');test_features = activations(trained_cnn, reshaped_input_test, selected_layer_name, 'OutputAs', 'rows');
%% 转换为双精度train_features = double(train_features); test_features = double(test_features);output_train = double(output_train); output_test = double(output_test);
%% SVM训练与预测opt_c = 0.01;opt_g = 150;svm_command = [' -s 4 -t 0 -c ', num2str(opt_c), ' -g ', num2str(opt_g)];svm_model = libsvmtrain(output_train', train_features, svm_command);[train_predictions, train_accuracy, ~] = libsvmpredict(output_train', train_features, svm_model);[test_predictions, test_accuracy, ~] = libsvmpredict(output_test', test_features, svm_model);
%% 反归一化train_predictions_denorm = mapminmax('reverse', train_predictions, output_norm_params);test_predictions_denorm = mapminmax('reverse', test_predictions, output_norm_params);

1.均方差(MSE):0.265752.根均方差(RMSE):0.515513.平均绝对误差(MAE):0.345794.平均相对百分误差(MAPE):2.6756%5.R2:99.1024%
…………测试集误差指标…………1.均方差(MSE):0.301552.根均方差(RMSE):0.549133.平均绝对误差(MAE):0.394074.平均相对百分误差(MAPE):3.0429%5.R2:98.9411%

 

点赞
收藏
评论
分享
加入交流群
举报

相关推荐