基于matlab的回归、分类、时序预测基本算法全家桶
基于matlab开发的11款时序预测模型代码
基础 BP 神经网络回归
对应文件夹:002-基于BP神经网络回归
适用场景: 预测连续数值(如房价预测、销量预测)。
%% 1. 清空环境
clear; clc; close all;
%% 2. 加载数据 (假设数据存储在 data.xlsx 中)
% 输入数据 P (例如:历史数据),目标数据 T (例如:未来数值)
data = xlsread(‘data.xlsx’);
P = data(:, 1:end-1)‘; % 输入矩阵,转置为列向量形式
T = data(:, end)’; % 目标矩阵
%% 3. 数据归一化 (非常重要)
[p_train, ps_input] = mapminmax(P, 0, 1);
[t_train, ps_output] = mapminmax(T, 0, 1);
%% 4. 创建 BP 网络
% newff(输入范围, [隐藏层节点数], {‘激活函数’}, 训练函数)
hidden_layer_size = 10;
net = newff(p_train, t_train, hidden_layer_size, {‘tansig’, ‘purelin’}, ‘trainlm’);
%% 5. 设置训练参数
net.trainParam.epochs = 1000; % 最大训练次数
net.trainParam.goal = 1e-6; % 训练目标误差
net.trainParam.lr = 0.01; % 学习率
%% 6. 训练网络
net = train(net, p_train, t_train);
%% 7. 测试与仿真
y_train = sim(net, p_train); % 仿真结果
Y = mapminmax(‘reverse’, y_train, ps_output); % 反归一化
%% 8. 绘图
figure;
plot(T, ‘b-o’); hold on;
plot(Y, ‘r-*’);
legend(‘真实值’, ‘预测值’);
title(‘BP神经网络回归预测结果’);
基础 BP 神经网络分类
对应文件夹:003-基于BP神经网络分类
适用场景: 判别类别(如鸢尾花分类、故障诊断)。
%% 1. 清空环境
clear; clc; close all;
%% 2. 加载数据 (以鸢尾花数据为例)
load iris_dataset; % MATLAB自带的鸢尾花数据
inputs = irisInputs; % 输入数据
targets = irisTargets; % 目标数据 (one-hot 编码)
%% 3. 创建网络
% patternnet 专门用于模式识别(分类)
hiddenLayerSize = 10;
net = patternnet(hiddenLayerSize);
%% 4. 划分训练集和测试集
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
%% 5. 训练网络
[net, tr] = train(net, inputs, targets);
%% 6. 测试与评估
outputs = net(inputs);
errors = gsubtract(targets, outputs);
% 计算混淆矩阵
figure;
plotconfusion(targets, outputs);
title(‘分类混淆矩阵’);
卷积神经网络
对应文件夹:004/005/006-基于卷积神经网络(CNN)
适用场景: 图像识别、复杂特征提取。这里使用的是 MATLAB 深度学习工具箱。
%% 1. 清空环境
clear; clc; close all;
%% 2. 准备图像数据 (假设图片在 ‘Images’ 文件夹下)
% imds = imageDatastore(‘Images’, ‘IncludeSubfolders’, true, ‘LabelSource’, ‘foldernames’);
% 这里用随机数据演示网络结构
inputSize = [28 28 1]; % 假设输入是 28x28 的灰度图
numClasses = 10; % 假设分 10 类
%% 3. 定义网络层结构
layers = [
imageInputLayer(inputSize)
% 卷积块 1 convolution2dLayer(3, 8, 'Padding', 'same') % 3x3 卷积核,8个 batchNormalizationLayer reluLayer % 最大池化层 maxPooling2dLayer(2, 'Stride', 2) % 卷积块 2 convolution2dLayer(3, 16, 'Padding', 'same') batchNormalizationLayer reluLayer % 全连接层与分类层 fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];%% 4. 设置训练选项
options = trainingOptions(‘sgdm’, …
‘MaxEpochs’, 10, …
‘InitialLearnRate’, 0.01, …
‘Verbose’, false, …
‘Plots’, ‘training-progress’);
%% 5. 训练网络 (需要真实数据 imds)
% net = trainNetwork(imds, layers, options);