核心内容摘要
探索“粉色视频晶体结构sio”的奇幻边界
基于留出法和k折交叉验证的多种神经网络分类预测MATLAB程序代码中共包含人工神经网络ANN、前馈神经网络 FFNN、级联正向神经网络CFNN、递归神经网络RNN、广义回归神经网络GRNN、概率神经网络PNN六种神经网络可以任意选择再用留出法和k折交叉验证进行分类效果对比。
代码注释清楚。
main为主程序读取EXCEL数据。
很方便容易上手。
打开MATLAB时是不是总想找点能直接跑起来的神经网络代码今天咱们看个自带六种网络模型还能自动对比验证方法的工具箱。
这个程序包最实用的地方在于——你只需要改两个参数就能同时看到不同神经网络在相同数据上的分类表现。
先看看数据怎么喂进去的。
主程序里直接调Excel文件对非CSV选手特别友好data xlsread(dataset.xlsx); inputs data(:,1:end-
; targets data(:,end);注意这里转置操作神经网络的输入要求行代表特征列代表样本。
要是数据没转置训练时会报维度错误这个坑新人经常踩。
重点来了模型选择就像自动售货机model_type GRNN; % 可替换为ANN/FFNN/CFNN/RNN/GRNN/PNN switch model_type case PNN spread
1; net newpnn(inputs, targets, spread); case GRNN spread
5; net newgrnn(inputs, targets, spread); % ...其他网络初始化代码 end比如PNN概率神经网络设置spread参数控制平滑程度值太小会导致过拟合。
实际测试时发现当数据噪声较多时把spread从
1调到
3准确率能提升7%左右。
验证方法切换才是重头戏。
留出法简单直接[trainInd, ~, testInd] dividerand(500,
7, 0,
0.
;但遇到小数据集就得用k折交叉验证。
代码里实现5折验证时用了索引轮转技巧foldSize floor(N/k); indices randperm(N); % 关键打乱顺序防数据分布不均 for i1:k testIdx indices((i-
*foldSize1 : i*foldSize); trainIdx setdiff(indices, testIdx); end有个细节很有意思——在循环里每次都会重新初始化网络这样避免不同折之间的权重污染。
但这也导致计算量翻倍跑完整流程可能需要多等几分钟。
基于留出法和k折交叉验证的多种神经网络分类预测MATLAB程序代码中共包含人工神经网络ANN、前馈神经网络 FFNN、级联正向神经网络CFNN、递归神经网络RNN、广义回归神经网络GRNN、概率神经网络PNN六种神经网络可以任意选择再用留出法和k折交叉验证进行分类效果对比。
代码注释清楚。
main为主程序读取EXCEL数据。
很方便容易上手。
测试时发现个有趣现象在时序数据上RNN的k折验证结果反而比留出法差。
后来发现是因为随机分折破坏了时间序列连续性改成时间窗划分后效果回升。
这说明交叉验证不是万金油得看数据特性。
最后输出的对比图很直观如图1。
柱状图显示不同网络在两种验证方法下的准确率误差线标记标准差。
从结果看GRNN和PNN这类概率网络在留出法中表现稳定但FFNN在交叉验证时方差更小。
实际部署时要取舍是要单次跑的稳定性还是统计意义的可靠性完整代码里还藏了个彩蛋——每个网络子函数里都有参数调节区。
比如在CFNN级联网络的定义中net.numLayers 3; % 隐藏层数可调 net.layerConnect [0 0 0; 1 0 0; 1 1 0]; % 级联连接矩阵试着把层数从3改到5某医疗数据集上的分类F1值从
82蹦到
89。
但代价是训练时间从20秒变成3分钟这trade-off值不值得看具体应用场景。
要跑这个工具箱的话记得先装Deep Learning Toolbox。
如果遇到未定义函数错误八成是工具箱没装全。
数据格式方面最后一列必须是分类标签支持多分类比如
这样的编码。
新手建议先用鸢尾花数据集试水等摸清参数含义再上自己的数据。