matlab BP神经网络 回归或者分类程序。 有例子,易上手,只要换数据就行,提供代码解释,可修改神经网络内置参数

先看回归任务

% 生成模拟数据(替换成你的数据)
X = rand(100,3);  % 100样本,3个特征
Y = X*[0.5; -0.3; 1.2] + randn(100,1)*0.1;  % 线性关系加噪声

% 数据归一化(神经网络必做!)
[Xn, xps] = mapminmax(X');
[Yn, yps] = mapminmax(Y');

% 创建网络(关键参数在这里改!)
net = feedforwardnet(10);  % 单隐藏层10个神经元
net.trainParam.epochs = 500;  % 迭代次数
net.trainParam.lr = 0.01;     % 学习率

% 训练走起
net = train(net, Xn, Yn);

% 预测新数据
X_new = [0.1, 0.2, 0.3]';
Xn_new = mapminmax('apply', X_new, xps);
pred = sim(net, Xn_new);
Y_pred = mapminmax('reverse', pred, yps);
disp(['预测结果:', num2str(Y_pred)]);

代码要点:

  1. feedforwardnet默认用梯度下降法,隐藏层数量直接改数字
  2. 归一化用mapminmax处理,避免特征量纲差异影响
  3. 学习率调太低会收敛慢,太高可能震荡发散

分类任务改哪里?

% 鸢尾花分类示例(自带数据集)
load iris_dataset
inputs = irisInputs; 
targets = irisTargets;

% 改网络结构
net = patternnet(15);  % 分类专用网络
net.layers{1}.transferFcn = 'logsig';  % 隐藏层激活函数改logistic

% 训练+验证自动拆分
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;

[net, tr] = train(net, inputs, targets);

% 看效果
pred = net(inputs);
plotconfusion(targets, pred)

关键调整点:

  • patternnet自带softmax输出层,适合分类
  • 修改transferFcn尝试不同的激活函数(tansig、relu)
  • 验证集比例根据数据量调整,小数据集别设太高

参数调优指南

  1. 过拟合了?加L2正则化:
net.performParam.regularization = 0.1;  % 0.1是权重衰减系数
  1. 想用更快的优化器:
net.trainFcn = 'trainbr';  % 贝叶斯正则化
% 或者
net.trainFcn = 'trainscg'; % 共轭梯度法
  1. 早停机制内置在trainParam里:
net.trainParam.max_fail = 10;  % 验证集误差连续上升10次停止

避坑提醒:

  • 数据记得打乱顺序!MATLAB默认按顺序划分数据集
  • 输出层节点数=分类类别数(比如手写数字识别设10)
  • 回归任务输出层用线性激活函数,分类用softmax

实际使用时,把数据替换成自己的矩阵就行。输入特征按列排,样本按行排。遇到问题先检查数据维度是否匹配——MATLAB报的维度错误比女朋友的脸色还难看(但解决起来其实更简单)。

matlab BP神经网络 回归或者分类程序。 有例子,易上手,只要换数据就行,提供代码解释,可修改神经网络内置参数

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐